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% 이상 상승).

## 스크립트 및 결과

run_vllm_quant.sh
0.00MB
vllm-quant-results.txt
0.02MB

+ Recent posts