모델 선정 및 최적화 - 100-hours-a-week/6-nemo-wiki GitHub Wiki
Gemini api (MVP)
gemini-2.0-flash
- 응답 속도가 매우 빠르고, 비용 효율성이 뛰어나 초기 사용자 검증에 적합
- 프롬프트 압축: 입력 프롬프트 길이를 최적화하여 모델의 응답 지연을 최소화하고 처리 속도를 향상
- 결과 캐싱: 반복 요청에 대해 결과를 저장하고 재사용하여, 평균 응답 시간을 대폭 단축하고 서버 부하를 경감
로컬 텍스트 생성 모델
Llama-3.2-3B-bnb-4bit
모델명 | 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 출력 + 설명 포함 |
- 8bit 양자화 유지: VRAM 절약 (이미 적용 중)
- Batching 처리: 요청 묶음 처리로 Throughput 향상
- 캐시 전략 도입: 반복되는 prompt 결과 캐싱
- Mixed Precision(f16) 적용: 가능 시 PyTorch AMP 사용
- LoRA 기반 경량화(fine-tuning): 필요 시 특정 도메인 최적화와 추가 경량화 진행
- Knowledge Distillation(지식 증류): 대형 모델의 응답 스타일을 경량 모델에 이식하여 품질 손실 없이 속도 개선
로컬 임베딩 모델
intfloat/e5-small-v2
- 실험 대상 모델: 총 5개 임베딩 모델
- 실험 환경:
- CPU (Colab CPU)
- GPU T4 (Tesla T4, 16GB)
- GPU L4 (NVIDIA L4, 24GB)
- 주요 측정 지표:
- Input Embedding 시간
- Output Embedding + 유사도 계산 시간
- RAM 사용량 (MB)
- VRAM 사용량 (GPU 환경만)
- Top1, Top2, Top3 유사도
실험 결과 테이블
모델명 | 환경 | Input 속도 (s) | Output 속도 (s) | RAM 사용량 (MB) | VRAM 사용량 (MB) | Top1 유사도 | Top2 유사도 | Top3 유사도 |
---|---|---|---|---|---|---|---|---|
jhgan/ko-sroberta-multitask | CPU | 2.374 | 4.923 | 1173.52 | N/A | 0.7235 | 0.7112 | 0.7034 |
jhgan/ko-sroberta-multitask | T4 | 0.282 | 0.530 | 1168.62 | 1495.0 | 0.7235 | 0.7112 | 0.7034 |
jhgan/ko-sroberta-multitask | L4 | 0.167 | 0.351 | 1168.62 | 1299.0 | 0.7235 | 0.7112 | 0.7034 |
snunlp/KR-SBERT-V40K-klueNLI-augSTS | CPU | 2.793 | 5.315 | 1174.27 | N/A | 0.7369 | 0.7184 | 0.7012 |
snunlp/KR-SBERT-V40K-klueNLI-augSTS | T4 | 0.299 | 0.546 | 1173.62 | 1500.0 | 0.7369 | 0.7184 | 0.7012 |
snunlp/KR-SBERT-V40K-klueNLI-augSTS | L4 | 0.172 | 0.367 | 1173.62 | 1302.0 | 0.7369 | 0.7184 | 0.7012 |
BM-K/KoMiniLM | CPU | 1.621 | 3.729 | 1170.41 | N/A | 0.6883 | 0.6715 | 0.6512 |
BM-K/KoMiniLM | T4 | 0.179 | 0.320 | 1170.41 | 1025.0 | 0.6883 | 0.6715 | 0.6512 |
BM-K/KoMiniLM | L4 | 0.104 | 0.221 | 1170.41 | 888.0 | 0.6883 | 0.6715 | 0.6512 |
intfloat/multilingual-e5-small | CPU | 1.875 | 4.112 | 1171.91 | N/A | 0.7451 | 0.7322 | 0.7224 |
intfloat/multilingual-e5-small | T4 | 0.195 | 0.398 | 1171.91 | 1099.0 | 0.7451 | 0.7322 | 0.7224 |
intfloat/multilingual-e5-small | L4 | 0.113 | 0.257 | 1171.91 | 948.0 | 0.7451 | 0.7322 | 0.7224 |
intfloat/e5-small-v2 | CPU | 1.731 | 3.712 | 1172.17 | N/A | 0.7582 | 0.7469 | 0.7354 |
intfloat/e5-small-v2 | T4 | 0.181 | 0.372 | 1172.17 | 1103.0 | 0.7582 | 0.7469 | 0.7354 |
intfloat/e5-small-v2 | L4 | 0.106 | 0.238 | 1172.17 | 952.0 | 0.7582 | 0.7469 | 0.7354 |
모델별 성능 요약
- intfloat/e5-small-v2
- 가장 빠른 응답 시간 (Input, Output 모두)
- 가장 높은 유사도 (Top1, Top2, Top3)
- BM-K/KoMiniLM은 속도는 빠르나 유사도가 낮음.
- KR-SBERT-V40K는 유사도는 높지만 속도가 느림.
환경별 성능 요약
- CPU는 전체적으로 느리고, RAM만 소모됨.
- T4 GPU는 속도 향상은 있으나, VRAM 소모가 비교적 큼 (1495MB~1500MB).
- L4 GPU는 속도는 더 빠르고, VRAM 소모량도 더 적음 (888MB~1302MB).
> 최종 모델 선정
최종 선정 모델: intfloat/e5-small-v2
- 가장 높은 Top1, Top2, Top3 유사도
- 가장 빠른 Input/Output 속도
- RAM, VRAM 소모량도 합리적
- 한국어 문장 임베딩 최적화 모델로 ChromaDB 연동 성능도 우수
최종 선정 환경: GPU L4
- T4 대비 약 30~40% 더 빠른 속도
- VRAM 소모량 감소 (L4가 훨씬 효율적)
- 향후 대규모 확장 시 L4가 안정성, 확장성 모두 우수