서비스 최적화 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

2차

모델명 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 기반 최적화는 성능 측면에서 불리하여 제외되었습니다.