LLM 모델 추론 성능 최적화 - 100-hours-a-week/6-nemo-ai GitHub Wiki
1. LLM 로컬 모델 비교 분석
Gemini API 기반 모델에서 로컬 추론으로 전환하기 위해 다음과 같은 Hugging Face 기반 모델들을 테스트하였다:
- google/gemma-3-4b-it
- Qwen/Qwen2.5-3B-Instruct
- kakaocorp/kanana-nano-2.1b-instruct
- naver-hyperclovax/HyperCLOVAX-SEED-Text-Instruct-1.5B
각 모델은 동일한 텍스트 생성 과제를 기준으로 CPU/GPU 환경에서 추론 시간, VRAM 사용량, 결과 품질을 비교하였다.
2. 모델 선정 기준
평가 항목 | 설명 |
---|---|
추론 속도 | 짧은 응답 시간 확보 (1건 기준 30초 이내) |
메모리 효율성 | 24GB 이하 GPU에서 무리 없이 실행 가능 |
응답 품질 | 문맥 자연스러움, 주제 적합성, 명사형 종결 등 |
API 연동성 | vLLM 연동 및 FastAPI 연계 용이성 |
양자화 가능 여부 | 4bit/8bit 등 양자화 가능 여부와 효과 |
3. 모델별 성능 비교 (GPU: GCP L4 환경 기준)
Model | 추론 시간 (1건) | GPU 메모리 사용 | 응답 품질 | 비고 |
---|---|---|---|---|
google/gemma-3-4b-it | 80~85초 | 약 13~14GB | 주제 일치 + 문법 안정성 우수 | 최종 선정, FastAPI 연동 완료 |
Qwen/Qwen2.5-3B-Instruct | 24~28초 | 약 14~15GB | 표현력 좋으나 지시 일관성 낮음 | 다국어 강점, 속도 다소 느림 |
kakaocorp/kanana-nano-2.1b-instruct | 18~22초 | 약 8~9GB | 다소 단순한 문장 구성 | 응답 구조 균일, 품질 보통 수준 |
naver-hyperclovax/HyperCLOVAX-SEED-Instruct-1.5B | 15~20초 | 약 7~8GB | 품질 보통, 마무리 부정확 빈도 있음 | VRAM 효율적, 가벼운 과제에 적합 |
4. 병목 요소 분석
모델 | 병목 요소 | 주요 특성 요약 |
---|---|---|
gemma-3-4b-it | 병렬 시 최대 VRAM 사용량 급증 → 메모리 튜닝 필요 | 응답 구조가 가장 자연스럽고 후처리 최소화 가능 |
Qwen2.5-3B | 응답 형식 다양성으로 후처리 부담 발생 | 프롬프트 명확성 요구, 문장력은 강함 |
kanana-nano-2.1b | 모델 크기 작아 빠르나, 문장 구조 단순화 | 짧은 응답에서만 적절, 설명형 문장엔 한계 |
hyperclovax-1.5B | 문장 완결성 부족으로 후처리 필수 | 속도와 메모리는 우수하나 응답 통제 어려움 |
5. 적용 최적화 기법
기법 | 기대 효과 |
---|---|
4-bit 양자화 | VRAM 25~40% 절감 |
vLLM 엔진 사용 | 병렬 추론 최적화, KV 캐시 활용 |
FastAPI 분리 서빙 | 요청 처리 안정성 증가 |
후처리 로직 적용 | 명사형 마무리, 문법 정제 |
6. 모델 선정 및 결론
✅ 최종 선정 모델: google/gemma-3-4b-it
-
선정 사유:
-
GPU 환경에서의 추론 속도 및 VRAM 소비 적정
-
한국어 문장 생성 품질 우수 (요약, 설명, 커리큘럼 모두 적용)
-
FastAPI 연동 테스트 완료
-
❗Gemma-3-4b-it 모델은 특히 추론 시간이 가장 길었음에도 불구하고 출력 품질과 문장 안정성, 후처리 등의 강점을 바탕으로 최종 선정되었음.
7. 향후 개선 방향
- Gemma 모델 양자화 버전 적용으로 응답 시간 추가 단축 실험
- 후처리 로직 통합 자동화로 품질 일관성 확보