[vllm] --performance-mode: 워크로드별 최적화 프로파일
PR 링크: vllm-project/vllm#34936 상태: Merged | 변경: +37/-5
들어가며
vLLM에 --performance-mode 옵션이 추가되었다. balanced(기본), interactivity, throughput 3가지 모드를 제공하며, 각 모드에 따라 CUDA Graph 캡처 크기, 배칭 전략, 커널 선택이 자동으로 조정된다. 단 37줄의 변경으로 사용자 경험을 크게 개선한 PR이다.
핵심 코드 분석
PerformanceMode 타입 정의
# vllm/config/vllm.py
PerformanceMode = Literal["balanced", "interactivity", "throughput"]
performance_mode: PerformanceMode = "balanced"
"""'interactivity' favors low end-to-end per-request latency at small batch
sizes (fine-grained CUDA graphs, latency-oriented kernels).
'throughput' favors aggregate tokens/sec at high concurrency (larger CUDA
graphs, more aggressive batching, throughput-oriented kernels)."""
CUDA Graph 캡처 크기 분기
# Before: 모든 경우 동일한 캡처 크기
cudagraph_capture_sizes = [
i for i in [1, 2, 4] if i <= max_cudagraph_capture_size
]
# After: interactivity 모드에서 세밀한 캡처
if self.performance_mode == "interactivity":
interactivity_max = min(max_cudagraph_capture_size, 32)
cudagraph_capture_sizes = list(range(1, interactivity_max + 1))
else:
cudagraph_capture_sizes = [
i for i in [1, 2, 4] if i <= max_cudagraph_capture_size
]
interactivity 모드에서는 1부터 32까지 모든 배치 크기에 대해 CUDA Graph를 캡처한다. 이는 소규모 배치에서 패딩 오버헤드를 최소화하여 요청당 latency를 줄인다.
왜 이게 좋은가
- 원클릭 최적화: 복잡한 파라미터 튜닝 없이
--performance-mode throughput한 줄로 최적화 - CUDA Graph 패딩 감소: interactivity 모드에서 1~32 전부 캡처하여 소규모 배치의 패딩 낭비 제거
- 확장 가능한 구조: 향후 커널 선택, 배칭 정책 등을 모드별로 분기하기 쉬운 아키텍처
- 중복 제거:
sorted(set(cudagraph_capture_sizes))로 캡처 크기 중복도 방지
정리
37줄의 코드 변경이지만, 사용자가 워크로드 특성에 맞게 vLLM을 최적화하는 진입 장벽을 크게 낮춘 PR이다. 특히 interactive 서비스(챗봇 등)에서의 latency 개선이 기대된다.
참고 자료
이 글은 AI(Claude)의 도움을 받아 작성되었습니다. 코드 분석 내용은 실제 PR diff를 기반으로 합니다.
관련 포스트
PR Analysis 의 다른글
- 이전글 [triton] Backend별 global_scratch_alloc 할당 통합
- 현재글 : [vllm] --performance-mode: 워크로드별 최적화 프로파일
- 다음글 [triton] Proton 커널 런처에 더 많은 메타데이터 전달
댓글