본문으로 건너뛰기

[vllm] vLLM의 ROCm 환경 성능 최적화: CUDA Graph 메모리 프로파일링 비활성화

PR 링크: vllm-project/vllm#48440 상태: Merged | 변경: +5 / -7

들어가며

최근 vLLM 프로젝트에서 ROCm 환경의 성능 저하 문제를 해결하기 위한 중요한 PR이 머지되었습니다. vLLM은 고성능 추론 엔진으로서 CUDA Graph를 활용해 커널 실행 오버헤드를 줄이는데, 이 과정에서 메모리 프로파일링 단계가 필수적입니다. 하지만 ROCm 환경에서는 이 프로파일링 로직이 오히려 정상적인 추론 성능(steady-state decode throughput)을 저하시키는 부작용이 발견되었습니다. 본 글에서는 이 문제를 해결하기 위해 gpu_worker.py에서 수행된 코드 변경 사항을 분석합니다.

코드 분석: gpu_worker.py

이번 변경의 핵심은 determine_available_memory 메서드 내에서 CUDA Graph 메모리 프로파일링을 수행하는 조건을 수정하는 것입니다.

Before: 모든 CUDA-alike 플랫폼에서 프로파일링 수행

기존 코드에서는 is_cuda_alike()를 사용하여 ROCm을 포함한 모든 CUDA 호환 환경에서 프로파일링을 시도했습니다.

# Before
if (
    current_platform.is_cuda_alike()
    and self.vllm_config.compilation_config.cudagraph_mode
    != CUDAGraphMode.NONE
):
    cudagraph_memory_estimate = self._profile_cudagraph_memory()

After: CUDA 전용으로 제한

수정된 코드는 is_cuda()를 사용하여 오직 NVIDIA CUDA 환경에서만 프로파일링이 동작하도록 제한했습니다. ROCm 환경에서는 이 로직을 건너뛰게 하여 불필요한 오버헤드를 제거했습니다.

# After
if (
    current_platform.is_cuda()
    and self.vllm_config.compilation_config.cudagraph_mode
    != CUDAGraphMode.NONE
):
    cudagraph_memory_estimate = self._profile_cudagraph_memory()

왜 이게 좋은가

이번 최적화는 '범용적인 추상화'보다 '플랫폼별 특성'을 존중하는 것이 성능에 얼마나 중요한지를 보여줍니다.

  1. 성능 회귀 방지: ROCm 환경에서 프로파일링 캡처가 추론 성능을 저하시키는 원인이었습니다. 이를 비활성화함으로써 steady-state decode throughput을 복구했습니다.
  2. 정확성 확보: ROCm/HIP 환경에서 get_memory_info와 같은 API는 CUDA와 다르게 동작할 수 있습니다. 잘못된 메모리 추정치는 시스템의 안정성을 해칠 수 있는데, 이를 원천 차단했습니다.
  3. 교훈: 추상화 레이어(is_cuda_alike)가 편리할 수 있지만, 하드웨어 가속기마다 메모리 관리 방식이 미묘하게 다를 경우, 플랫폼별로 명시적인 분기 처리를 하는 것이 성능 최적화 측면에서 안전합니다.

이번 변경은 #47366에서 시도했던 통합 프로파일링 로직이 ROCm 환경에서 기대한 대로 동작하지 않음을 인지하고, 이전의 안정적인 상태로 롤백하되 테스트 측면의 수정사항은 유지하는 현명한 접근 방식을 취하고 있습니다.

참고 자료

⚠️ 알림: 이 분석은 AI가 실제 코드 diff를 기반으로 작성했습니다.

댓글

관련 포스트

PR Analysis 의 다른글