본문으로 건너뛰기

[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를 줄인다.

왜 이게 좋은가

  1. 원클릭 최적화: 복잡한 파라미터 튜닝 없이 --performance-mode throughput 한 줄로 최적화
  2. CUDA Graph 패딩 감소: interactivity 모드에서 1~32 전부 캡처하여 소규모 배치의 패딩 낭비 제거
  3. 확장 가능한 구조: 향후 커널 선택, 배칭 정책 등을 모드별로 분기하기 쉬운 아키텍처
  4. 중복 제거: sorted(set(cudagraph_capture_sizes))로 캡처 크기 중복도 방지

정리

37줄의 코드 변경이지만, 사용자가 워크로드 특성에 맞게 vLLM을 최적화하는 진입 장벽을 크게 낮춘 PR이다. 특히 interactive 서비스(챗봇 등)에서의 latency 개선이 기대된다.

참고 자료


이 글은 AI(Claude)의 도움을 받아 작성되었습니다. 코드 분석 내용은 실제 PR diff를 기반으로 합니다.

댓글

관련 포스트

PR Analysis 의 다른글