- Fixed NLLB-200 tokenizer forced_bos_token_id issue - Changed from lang_code_to_id to convert_tokens_to_ids - Added .dockerignore to exclude models directory from Docker build - Prevents disk space issues during build - Models are loaded at runtime via volume mount - Both M2M100 and NLLB-200 models tested and working 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
Multilingual Translation API
105개 이상의 언어를 지원하는 다국어 번역 REST API 서비스입니다. 상업적 사용이 가능한 Apache 2.0 라이선스 모델을 사용합니다.
주요 기능
- 105개 이상의 언어 지원 - 모든 언어 간 양방향 번역 가능 (Any-to-Any Translation)
- 상업적 사용 가능 - Apache 2.0 라이선스의 Facebook M2M100 모델 사용
- 고성능 번역 - 418M 파라미터 신경망 기계 번역 모델
- FastAPI 기반 - 고성능 비동기 REST API
- Docker 지원 - 간편한 배포 및 확장
- 자동 API 문서화 - Swagger UI 제공
- GPU 자동 감지 - CUDA 사용 가능 시 자동으로 GPU 활용
지원 언어 (105개)
주요 언어
English, 中文 (Chinese), Español (Spanish), العربية (Arabic), हिन्दी (Hindi), বাংলা (Bengali), Português (Portuguese), Русский (Russian), 日本語 (Japanese), Deutsch (German), Français (French), 한국어 (Korean), Italiano (Italian), Türkçe (Turkish)
동남아시아 언어
Bahasa Melayu (Malay), Bahasa Indonesia (Indonesian), ไทย (Thai), Tiếng Việt (Vietnamese), Tagalog, မြန်မာဘာသာ (Burmese), ភាសាខ្មែរ (Khmer), ລາວ (Lao), Filipino, Cebuano, Basa Jawa (Javanese), Basa Sunda (Sundanese)
남아시아 언어
اردو (Urdu), தமிழ் (Tamil), తెలుగు (Telugu), मराठी (Marathi), ગુજરાતી (Gujarati), ಕನ್ನಡ (Kannada), മലയാളം (Malayalam), ਪੰਜਾਬੀ (Punjabi), नेपाली (Nepali), සිංහල (Sinhala)
유럽 언어
Polski (Polish), Nederlands (Dutch), Українська (Ukrainian), Română (Romanian), Svenska (Swedish), Dansk (Danish), Suomi (Finnish), Norsk (Norwegian), Čeština (Czech), Slovenčina (Slovak), Magyar (Hungarian), Български (Bulgarian), Српски (Serbian), Hrvatski (Croatian), Slovenščina (Slovenian), Eesti (Estonian), Latviešu (Latvian), Lietuvių (Lithuanian), Ελληνικά (Greek), עברית (Hebrew), فارسی (Persian), Català (Catalan), Euskara (Basque), Galego (Galician), Cymraeg (Welsh), Gaeilge (Irish), Gàidhlig (Scottish Gaelic), Íslenska (Icelandic), Malti (Maltese)
아프리카 언어
Kiswahili (Swahili), አማርኛ (Amharic), Hausa, Igbo, Yorùbá (Yoruba), isiZulu (Zulu), isiXhosa (Xhosa), Afrikaans, Malagasy, Luganda, Lingála (Lingala), chiShona (Shona), Soomaali (Somali), Sesotho, Chichewa
기타 언어
Azərbaycan (Azerbaijani), ქართული (Georgian), Қазақша (Kazakh), Oʻzbekcha (Uzbek), Монгол (Mongolian), Shqip (Albanian), Հայերեն (Armenian), Беларуская (Belarusian), Bosanski (Bosnian), Esperanto, Frysk (Frisian), ʻŌlelo Hawaiʻi (Hawaiian), Hmong, Kreyòl ayisyen (Haitian Creole), Kurdî (Kurdish), Кыргызча (Kyrgyz), Latina (Latin), Lëtzebuergesch (Luxembourgish), Te Reo Māori (Maori), Македонски (Macedonian), پښتو (Pashto), Тоҷикӣ (Tajik), Türkmençe (Turkmen), ئۇيغۇرچە (Uyghur), ייִדיש (Yiddish)
전체 언어 목록은 /api/supported-languages 엔드포인트에서 확인하실 수 있습니다.
빠른 시작
1. Docker로 실행 (권장)
# Docker Compose로 실행
docker-compose up -d
# 로그 확인
docker-compose logs -f
# 서비스 종료
docker-compose down
서버가 실행되면 http://localhost:8001 에서 API에 접근할 수 있습니다.
2. 로컬 환경 설정
주의: PyTorch는 Python 3.13을 지원하지 않으므로 Python 3.11 이하 버전을 사용해야 합니다.
# Python 가상환경 생성 및 활성화
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
# 의존성 설치
pip install -r requirements.txt
# 환경변수 설정 (선택사항)
cp .env.example .env
# 서버 실행
python run.py
서버가 실행되면 http://localhost:8000 에서 API에 접근할 수 있습니다.
API 사용법
번역 요청
# 말레이어 → 영어
curl -X POST "http://localhost:8001/api/translate" \
-H "Content-Type: application/json" \
-d '{
"text": "Selamat pagi, apa khabar?",
"source_lang": "ms",
"target_lang": "en"
}'
# 영어 → 한국어
curl -X POST "http://localhost:8001/api/translate" \
-H "Content-Type: application/json" \
-d '{
"text": "Hello, how are you?",
"source_lang": "en",
"target_lang": "ko"
}'
# 영어 → 방글라데시어
curl -X POST "http://localhost:8001/api/translate" \
-H "Content-Type: application/json" \
-d '{
"text": "Good morning",
"source_lang": "en",
"target_lang": "bn"
}'
# 일본어 → 영어
curl -X POST "http://localhost:8001/api/translate" \
-H "Content-Type: application/json" \
-d '{
"text": "こんにちは、元気ですか?",
"source_lang": "ja",
"target_lang": "en"
}'
응답:
{
"original_text": "Selamat pagi, apa khabar?",
"translated_text": "Good morning, how are you?",
"source_lang": "ms",
"target_lang": "en",
"model_used": "facebook/m2m100_418M"
}
지원 언어 확인
curl http://localhost:8001/api/supported-languages
응답:
{
"languages": [
{
"code": "af",
"name": "Afrikaans",
"native_name": "Afrikaans"
},
{
"code": "en",
"name": "English",
"native_name": "English"
},
{
"code": "ko",
"name": "Korean",
"native_name": "한국어"
},
...
],
"total_languages": 105,
"note": "All language pairs are supported (any-to-any translation)"
}
헬스체크
curl http://localhost:8001/health
응답:
{
"status": "healthy",
"message": "Translation service is running",
"models_loaded": true
}
API 문서
서버 실행 후 다음 URL에서 자동 생성된 API 문서를 확인할 수 있습니다:
- Swagger UI: http://localhost:8001/docs
- ReDoc: http://localhost:8001/redoc
기술 스택
- FastAPI: 고성능 비동기 웹 프레임워크
- Transformers (Hugging Face): 머신러닝 모델 로딩 및 추론
- PyTorch: 딥러닝 프레임워크
- M2M100 (Facebook): 418M 파라미터 다국어 번역 모델
- Docker & Docker Compose: 컨테이너화 및 배포
- Pydantic: 데이터 검증 및 설정 관리
- Uvicorn: ASGI 서버
프로젝트 구조
site13/
├── app/
│ ├── __init__.py
│ ├── main.py # FastAPI 애플리케이션 및 엔드포인트
│ ├── models.py # Pydantic 데이터 모델
│ ├── translator.py # 번역 서비스 로직 (M2M100)
│ └── config.py # 설정 관리
├── models/ # 다운로드된 번역 모델 캐시 (자동 생성)
├── requirements.txt # Python 의존성
├── run.py # 서버 실행 스크립트
├── Dockerfile # Docker 이미지 빌드 설정
├── docker-compose.yml # Docker Compose 설정
├── CLAUDE.md # 개발자 문서
└── README.md # 프로젝트 문서
환경 변수
.env 파일에서 다음 설정을 변경할 수 있습니다:
API_HOST: API 서버 호스트 (기본값: 0.0.0.0)API_PORT: API 서버 포트 (기본값: 8000)MODEL_CACHE_DIR: 모델 캐시 디렉토리 (기본값: ./models)MAX_LENGTH: 최대 번역 길이 (기본값: 512)ALLOWED_ORIGINS: CORS 허용 오리진 (기본값: *)
성능 최적화
- 첫 실행 시 M2M100 모델을 다운로드하므로 시간이 걸릴 수 있습니다 (~1.5GB)
- 모델은
models/디렉토리에 캐시되어 재사용됩니다 - GPU가 있는 경우 자동으로 감지하여 사용합니다
- Docker volume을 사용하여 모델을 영구 저장합니다
- 시작 시 말레이어↔영어 모델을 미리 로드합니다
개발
# 개발 모드로 실행 (자동 재시작)
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
# Docker 재빌드
docker-compose down
docker-compose up -d --build
라이선스
모델 라이선스
이 프로젝트는 Facebook M2M100 모델을 사용합니다.
- 라이선스: Apache 2.0 License
- 상업적 사용: ✅ 허용됨
- 모델 정보: https://huggingface.co/facebook/m2m100_418M
프로젝트 코드
프로젝트 코드는 자유롭게 사용 가능합니다.
제한사항
- 텍스트 길이: 1-5000 자
- 모델 크기: ~1.5GB (디스크 공간 필요)
- Python 3.11 이하 버전 필요 (PyTorch 호환성)
트러블슈팅
포트 충돌 오류
Docker Compose는 포트 8001을 사용합니다. 포트가 이미 사용 중이면 docker-compose.yml에서 포트를 변경하세요:
ports:
- "9001:8000" # 9001로 변경
모델 다운로드 실패
인터넷 연결을 확인하고 다시 시도하세요. HuggingFace Hub에 접근할 수 있어야 합니다.
GPU 사용 안 됨
NVIDIA GPU를 사용하려면 Docker에서 nvidia-docker를 설치하고 docker-compose.yml에 GPU 설정을 추가해야 합니다.
기여
이슈 리포트 및 풀 리퀘스트를 환영합니다.
연락처
프로젝트 관련 문의사항이 있으시면 이슈를 생성해 주세요.