서비스 최적화 V2 이상 설계 - 100-hours-a-week/6-nemo-wiki GitHub Wiki
단계 2: 모델 추론 성능 최적화
실험 목적
- 사용자 입력(모임명, 목적, 카테고리)을 바탕으로 한줄 소개 + 상세 설명 + 커리큘럼을 자연스럽게 생성하는 한국어 기반 LLM 모델을 선정하기 위함.
- 성능 기준: 응답 품질, 응답 시간, 리소스 사용량, 모델 실행 가능 환경(CPU/GPU) 등
실험 모델 목록
1차
모델명 | 파라미터 | 양자화 | 실행 환경 | 한줄 소개/상세 설명 품질 | 응답 시간 | 메모리 사용량 |
---|---|---|---|---|---|---|
kakaocorp/kanana-nano-2.1b-instruct |
2.1B | X | CPU 가능 | 보통 | 4.7초 | +34MB |
beomi/KoAlpaca-Polyglot-5.8B |
5.8B | X | GPU 권장 | 낮음 (비지시형) | 6.1초 | +48MB |
Qwen/Qwen2.5-3B-Instruct |
3B | 4bit | GPU 필요 | 우수 | 3.9초 | +42MB |
unsloth/Qwen2.5-3B-Instruct |
3B | 4bit | GPU 필요 | 우수 (빠름) | 2.3초 | +29MB |
microsoft/phi-2 |
2.7B | X | CPU 가능 | 중간 | 4.2초 | +37MB |
google/gemma-3-12b-it |
12B | X | GPU 전용 | 우수 (최상) | 5.6초 | +61MB |
모델명 | VRAM 사용량 (GB) | 파라미터 수 | 지연 시간 (초) | 처리량 (토큰/초) | 최대 시퀀스 길이 | 양자화 여부 | 디바이스 | 로드 시간 (초) | 입력 토큰 수 | 출력 토큰 수 | 응답 결과 |
---|---|---|---|---|---|---|---|---|---|---|---|
Llama-3.2-3B-bnb-4bit |
0.01 | 1.8B | 1.59 | 0.63 | 131.1K | 8bit | T4 | 58.08 | 94 | 1 | ✅ JSON 출력 (정상) |
Meta-Llama-3.1-8B-bnb-4bit |
0.00 | 4.5B | 0.95 | 1.05 | 131.1K | 8bit | T4 | 50.20 | 94 | 1 | ✅ JSON 출력 (정상) |
Mistral-Nemo-Base-2407-bnb-4bit |
- | - | - | - | - | - | - | - | - | - | ❌ 오류: VRAM 부족 |
mistral-7b-v0.3-bnb-4bit |
0.00 | 3.8B | 10.12 | 13.83 | 1.0M | 8bit | T4 | 35.67 | 141 | 140 | ⚠️ JSON 2개 세트 출력 |
Mistral-Small-24B-Base-2501-unsloth-bnb-4bit |
- | - | - | - | - | - | - | - | - | - | ❌ 오류: VRAM 부족 |
Qwen2.5-3B-bnb-4bit |
0.00 | 1.7B | 16.33 | 13.65 | 32.8K | 8bit | T4 | 19.90 | 98 | 223 | ⚠️ JSON 출력 + 코드 조각 포함 |
Qwen2.5-7B-bnb-4bit |
0.00 | 4.4B | 16.42 | 13.40 | 131.1K | 8bit | T4 | 113.87 | 98 | 220 | ⚠️ JSON 출력 + 코드 조각 포함 |
kanana-nano-2.1b-base |
0.03 | 2.1B | 0.32 | 3.09 | 1.0M | 8bit | T4 | 88.26 | 94 | 1 | ✅ JSON 출력 (정상) |
llama-3-Korean-Bllossom-8B |
0.01 | 8.0B | 35.38 | 8.48 | 1.0M | 8bit | T4 | 63.53 | 94 | 300 | ⚠️ JSON 출력 + 코드 조각 포함 |
xglm-1.7B |
0.00 | 1.7B | 0.42 | 4.79 | 1.0M | 8bit | T4 | 20.80 | 96 | 2 | ✅ JSON 출력 (정상) |
Nemotron-H-8B-Base-8K |
- | - | - | - | - | - | - | - | - | - | ❌ 오류: 라이브러리 미설치 (pip해도 불가능) |
Zephyr 7B |
0.18 | 7.2B | 20.92 | 6.55 | 1.0M | 8bit | T4 | 60.74 | 141 | 137 | ⚠️ JSON + 추가 설명 출력 |
OpenChat 3.5 |
2.81 | 7.2B | 1070.32 | 0.28 | 1.0M | 8bit | T4 | 48.74 | 141 | 300 | ⚠️ JSON 출력 + 쓰레기 텍스트 포함 |
Falcon 1B |
0.00 | 1.3B | 19.51 | 15.37 | 1.0K | 8bit | T4 | 16.68 | 209 | 300 | ⚠️ JSON 출력 + 뉴스기사 끼어듦 |
OpenHermes 2.5 Mistral |
0.21 | 7.2B | 45.48 | 6.60 | 1.0M | 8bit | T4 | 142.11 | 141 | 300 | ⚠️ JSON 여러개 출력 |
HyperCLOVAX 1.5B |
0.00 | 1.6B | 29.44 | 10.19 | 1.0M | 8bit | T4 | 16.23 | 85 | 300 | ✅ JSON 출력 (정상) |
Phi-4-mini-instruct |
0.00 | 3.8B | 23.85 | 12.58 | 131.1K | 8bit | T4 | 275.38 | 90 | 300 | ⚠️ JSON 출력 + 설명 포함 |
Why
현재 통합한 AI 모델들은 기능적으로 JSON 출력 요구사항을 충족하지만,
추론 지연(latency) 및 자원 소모 문제로 인해 실제 서비스 적용 시 품질 저하와 인프라 비용 상승 리스크가 존재합니다.
특히 VRAM 부족, 과도한 지연, 불안정한 출력(JSON 외 쓰레기 텍스트) 문제 등이 발견되었습니다.
모델 추론 최적화는 다음을 목표로 합니다:
- 응답 시간 최소화 (사용자 경험 개선)
- 인프라 비용 최적화 (GCP T4 환경 기준)
- 동시 요청 처리량 증대 (확장성 확보)
기존 모델 추론 성능 지표
모델명 | VRAM 사용량(GB) | 지연 시간(초) | 처리량(tokens/sec) | 품질(응답) |
---|---|---|---|---|
Llama-3.2-3B-bnb-4bit |
0.01 | 1.59 | 0.63 | ✅ 정상(JSON 출력) |
Meta-Llama-3.1-8B-bnb-4bit |
0.00 | 0.95 | 1.05 | ✅ 정상(JSON 출력) |
xglm-1.7B |
0.00 | 0.42 | 4.79 | ✅ 정상(JSON 출력) |
※ 그 외 모델들은 VRAM 부족, 과다 출력, 품질 실패 등으로 제외.
성능 병목 요소 분석
- 모델 크기 병목: 8B 모델은 VRAM 부담 및 지연 시간 증가.
- 출력 불안정성: 일부 모델은 JSON 이외 텍스트 생성, 서비스 불가.
- 추론 속도 저하: 7B 이상 모델은 3B 모델 대비 2~3배 느려짐.
- 메모리 비효율성: VRAM 사용 최적화 필요 (T4 기준).
참고: CPU 기반 모델 최적화는 고려하지 않았습니다.
대부분의 모델이 CPU 환경에서는 추론 자체가 불가능하거나 지나치게 느려
비용 및 성능 모두 불리하기 때문에, T4 기반 GPU 환경에 집중하여 최적화를 수행합니다.
적용할 최적화 기법 계획
1. 모델 선택 최적화
- 기본 모델:
Llama-3.2-3B-bnb-4bit
(빠르고 안정적) - 초경량 대안:
xglm-1.7B
(응답 속도 중시 시) - 고품질 대안:
Meta-Llama-3.1-8B-bnb-4bit
(품질 중시 시)
2. 최적화 적용 방법
- 8bit 양자화 유지: VRAM 절약 (이미 적용 중)
- Batching 처리: 요청 묶음 처리로 Throughput 향상
- 캐시 전략 도입: 반복되는 prompt 결과 캐싱
- Mixed Precision(f16) 적용: 가능 시 PyTorch AMP 사용
- LoRA 기반 경량화(fine-tuning): 필요 시 특정 도메인 최적화와 추가 경량화 진행
- Knowledge Distillation(지식 증류): 대형 모델의 응답 스타일을 경량 모델에 이식하여 품질 손실 없이 속도 개선
3. 운영 최적화
- 단일 요청 최적화(싱글 배치)
- 최대 Input Length 제한 설정 (ex: 512~1024 tokens)
- 추론 세션 초기화 최소화 (Persistent session 유지)
최적화 적용 후 기대 성능 지표
모델명 | 기존 지연 시간(초) | 목표 지연 시간(초) | 기존 처리량(tokens/sec) | 목표 처리량(tokens/sec) |
---|---|---|---|---|
Llama-3.2-3B-bnb-4bit |
1.59 | 0.8 | 0.63 | 1.2 |
xglm-1.7B |
0.42 | 0.3 | 4.79 | 6.0 |
Meta-Llama-3.1-8B-bnb-4bit |
0.95 | 0.6 | 1.05 | 1.5 |
결론
서비스 품질과 비용의 균형을 고려할 때,
**Llama-3.2-3B-bnb-4bit
를 기본 모델로 선택할 예정입니다.
모든 모델은 8bit 양자화된 형태로 운용하며, 추가 최적화 방법으로
LoRA 파인튜닝 및 Knowledge Distillation을 검토하여
추가적인 응답 시간 단축과 인프라 비용 절감을 도모합니다.
모든 추론 최적화는 GCP T4 GPU 환경을 기준으로 설계되었으며,
CPU 기반 최적화는 성능 측면에서 불리하여 제외되었습니다.