텍스트 임베딩 및 유사도 계산을 담당하는 독립 마이크로서비스입니다.
- 메인 API 서버와 모델 서빙 로직 분리
- 독립적인 스케일링 및 배포
- 리소스 효율적 운영
model-service/
├── main.py # FastAPI 애플리케이션
├── requirements.txt # Python 의존성
├── Dockerfile # 컨테이너 이미지
└── README.md # 이 파일
pip install -r requirements.txtpython main.py서비스가 http://localhost:8000에서 시작됩니다.
브라우저에서 http://localhost:8000/docs 접속
docker build -t model-service:latest .docker run -p 8000:8000 model-service:latestdocker tag model-service:latest your-registry/model-service:latest
docker push your-registry/model-service:latestkubectl apply -f ../k8s/model-service-deployment.yamlkubectl get pods -l app=model-service
kubectl logs -f deployment/model-service헬스체크
curl http://localhost:8000/health텍스트 임베딩 생성
curl -X POST http://localhost:8000/embed \
-H "Content-Type: application/json" \
-d '{
"texts": ["Python 개발자", "Backend Engineer"],
"normalize": true
}'유사도 계산
curl -X POST http://localhost:8000/similarity \
-H "Content-Type: application/json" \
-d '{
"query_text": "Python 백엔드 개발자",
"corpus_embeddings": [[0.1, 0.2, ...], [0.3, 0.4, ...]]
}'# 모델 서비스 시작 후
pytest ../tests/model_service/test_model_service.py -v| 변수 | 설명 | 기본값 |
|---|---|---|
MODEL_NAME |
사용할 Sentence-BERT 모델 | sentence-transformers/distiluse-base-multilingual-cased-v2 |
- 메모리: 최소 2GB (권장 4GB)
- CPU: 최소 1 core (권장 2 cores)
- 디스크: 약 1GB (모델 캐시)
- 메모리 부족: Pod 메모리 제한 확인
- 네트워크 이슈: 모델 다운로드 실패 시 재시도
initialDelaySeconds증가 (모델 로딩 시간)timeout값 조정
- 첫 실행 시 모델 다운로드로 시간 소요 (30초~1분)
- 모델은 메모리에 캐시되어 재사용됨
- 동시 요청 처리 가능 (비동기 FastAPI)