Pre-quantized 모델 4종(Qwen2.5-7B-Instruct FP16, GPTQ-Int8, GPTQ-Int4, AWQ-Int4)을 vLLM V1 엔진에 배포하여 성능을 실측 비교했습니다. 별도의 로컬 양자화 과정 없이 Hugging Face의 pre-quantized 모델 ID를 지정하면 vLLM이 config.json의 quantization_config를 참조해 연산 커널을 자동으로 설정합니다.
| 변형 | 사용 모델 ID | vLLM 감지 방식 |
| FP16 | Qwen/Qwen2.5-7B-Instruct | None |
| GPTQ-Int8 | Qwen/Qwen2.5-7B-Instruct-GPTQ-Int8 | auto_gptq |
| GPTQ-Int4 | Qwen/Qwen2.5-7B-Instruct-GPTQ-Int4 | auto_gptq |
| AWQ-Int4 | Qwen/Qwen2.5-7B-Instruct-AWQ | auto_awq |
실측 결과 (워크로드: input 1024 / output 256, 300 요청, 동시성 128)
| 변형 | KV 캐시 (tok) | 최대 동시성 | req/s | out tok/s | Med TTFT | Med TPOT | Med ITL |
| FP16 | 374,704 | 11.44x | 6.04 | 1,546 | 933ms | 70.7ms | 37.3ms |
| GPTQ-Int8 | 505,440 (+35%) | 15.42x | 5.38 (-11%) | 1,377 | 1,292ms | 83.8ms | 30.4ms |
| GPTQ-Int4 | 560,816 (+50%) | 17.11x | 7.29 (+21%) | 1,867 | 941ms | 62.0ms | 24.7ms |
| AWQ-Int4 | 561,040 (+50%) | 17.12x | 7.12 (+18%) | 1,822 | 978ms | 63.5ms | 24.9ms |
동일 프롬프트 샘플링 테스트(Greedy, temp=0) 결과 4가지 모델 모두 문맥 붕괴 없이 일관되고 정확한 정의 문장을 생성했습니다.
심층 분석
- 메모리 확보 및 동시 수용력 증대: 모델 가중치가 작아진 만큼 동일 GPU 메모리 비율(gpu-memory-utilization=0.85) 환경에서 KV 캐시 영역이 확장됩니다. Int4 적용 시 KV 캐시 용량이 374k에서 561k tokens로 50% 증가하여 최대 동시성이 11.4x에서 17.1x로 대폭 상승합니다.
- Int4의 처리량 역전 상승: LLM 디코드 연산은 메모리 대역폭 병목(Memory Bandwidth Bound) 환경입니다. Int4 도입으로 가중치 전송량이 줄어들면서 토큰당 처리 속도가 빨라졌고, 전체 처리량이 21% 상향되었습니다.
- Int8 성능 저하 원인: GPTQ-Int8은 FP16보다 정밀도가 높음에도 불구하고 처리량이 11% 감소했습니다. 이는 vLLM 내 auto_gptq Int8 커널의 역양자화(Dequantization) 오버헤드가 메모리 대역폭 이득을 상쇄했기 때문입니다. L40S 환경에서는 Int4 Marlin 커널이 훨씬 최적화되어 있습니다.
튜닝 치트시트
- 실시간 대화형 서비스 (TTFT 최우선)
- Chunked Prefill ON + --max-num-batched-tokens=2048 설정.
- --max-num-seqs는 너무 작게 설정하지 않아 큐 대기 시간 증가 방지.
- 오프라인 대량 배치 처리 (Throughput 최우선)
- --max-num-batched-tokens=16384 이상 설정 또는 Chunked Prefill OFF (--no-enable-chunked-prefill).
- 단기 컨텍스트 전용 서빙
- --max-model-len을 실제 최대 응답 길이로 축소하여 KV 캐시 수용력(Concurrency) 확보.
- 7B 모델 기준 최적 조합 (NVIDIA L40S)
- GPTQ-Int4 / AWQ-Int4 양자화 적용을 기본 옵션으로 채택 (메모리 9GB 절감, 처리량 20% 이상 상승).
## 스크립트 및 결과
'LLM Serving and Optimization Study' 카테고리의 다른 글
| [LLMSO 5주차] vLLM 두 대 앞에 LiteLLM을 세우고, 네 가지를 실제로 재봤다 (0) | 2026.09.04 |
|---|---|
| [LLMSO 4주차] 쿠버네티스 위 TensorRT-LLM 실습기 — 설치부터 FP8 양자화, 그리고 vLLM 대조 (0) | 2026.08.30 |
| [LLMSO 3주차] K8s 기반 vLLM 서빙 파라미터 실측 튜닝기 (0) | 2026.08.23 |
| [LLMSO 2주차] Ray Serve로 LLM(Qwen2.5) 서빙하기 (0) | 2026.08.15 |
| [LLMSO 1주차] 기본 개념과 PagedAttention 최적화 메커니즘 (0) | 2026.08.09 |
