vLLM의 PyNvVideoCodec를 활용한 다중 GPU 비디오 캡션 스케일링

vLLM는 PyNvVideoCodec 라이브러리를 통해 NVIDIA 하드웨어 비디오 디코딩(NVDEC)을 지원하여, CPU에서 GPU로 디코딩 작업을 이동함으로써 다중 GPU 노드에서 비디오 캡션 및 레이블링 작업을 효율적으로 확장할 수 있게 되었습니다.

비디오 캡션에서 CPU 병목 현상 제거

자율주행(AV) 훈련에서 위험한 시나리오를 분류하고 검색 가능한 메타데이터를 생성하는 데 사용되는 비디오 캡션 작업은 일반적으로 Qwen/Qwen3-VL-8B-Instruct와 같은 경량 비전 언어 모델(VLM)을 활용합니다. 이러한 작업은 일반적으로 짧은 출력(100~200 토큰)을 생성하므로, 비디오 프레임 디코딩에 소요되는 시간이 전체 처리 시간의 상당 부분을 차지합니다.

이전에는 vLLM이 CPU 기반의 OpenCV+FFMPEG 백엔드를 사용하여 비디오 디코딩을 수행했습니다. 다중 GPU 환경(각 GPU당 하나의 vLLM 서버)에서는 CPU가 종종 병목 현상이 발생하여, 2~4개의 GPU만으로도 코어가 최대 사용량에 도달했습니다. PyNvVideoCodec을 활용함으로써 vLLM은 이 디코딩 프로세스를 GPU의 하드웨어 디코더로 이동시켜, 최대 8개 GPU까지 처리량이 선형적으로 확장될 수 있게 되었습니다.

다중 GPU 노드에서의 성능 향상

하드웨어 기반 비디오 디코딩은 대규모 캡션 작업에 대해 처리량을 크게 증가시킵니다. H100 GPU를 사용한 벤치마크에서 8개의 vLLM 복제본(각각 하나의 GPU에 할당)을 사용할 경우, GPU 기반 디코딩은 CPU 기반 디코딩보다 처리량이 2배 이상 높았습니다.

이 변화는 이전에 확장성을 제한하던 CPU 사용률 한계를 제거합니다. CPU 기반 디코딩은 4개 GPU에 도달하기 전에 시스템이 병목되지만, NVDEC 기반 접근 방식은 CPU가 포화되지 않고 모든 8개 GPU에서 안정적인 성능을 유지할 수 있습니다.

구현 및 구성

사전 요구 사항 및 설치

PyNvVideoCodec 기능은 표준 CUDA vLLM 릴리스에 포함되어 있습니다. 커스텀 설치를 사용하는 사용자는 PyNvVideoCodec==2.0.4를 PyPi 종속성으로 포함해야 합니다.

배포 구성

하드웨어 기반 비디오 디코딩을 활성화하려면 vLLM을 media-io-kwargspynvvideocodec 백엔드를 지정하여 시작해야 합니다. 권장 배포 단계는 다음과 같습니다:

  1. CUDA MPS 데몬 시작: 고복잡도 대량 VLM 추론 중 성능을 유지하기 위해 nvidia-cuda-mps-control -d 명령어가 필수적입니다.
  2. VRAM 예약: --mm-ipc-gpu-memory-gb 플래그를 사용하여 비디오 디코딩 전용 VRAM을 예약합니다. 사용자는 처리량을 유지하기 위해 필요한 최소값을 조정해야 합니다.
  3. GPU 격리: 다중 GPU 확장의 경우, 각 vLLM 서버 복제본당 하나의 컨테이너를 실행하고, 각 컨테이너에 단일 GPU를 노출하는 것이 권장됩니다(또는 CUDA_VISIBLE_DEVICES 사용). 이후 리버스 프록시를 사용하여 요청을 이러한 복제본들 사이에 분배합니다.

예제 실행 명령어

vllm serve Qwen/Qwen3-VL-8B-Instruct \
  --dtype bfloat16 \
  --max-model-len 32768 \
  --max-num-seqs 1024 \
  --max-num-batched-tokens 32768 \
  --api-server-count 4 \
  --renderer-num-workers 4 \
  --async-scheduling \
  --mm-ipc-gpu-memory-gb 2 \
  --media-io-kwargs '{"video":{"backend":"pynvvideocodec","min_frames":16,"max_frames":16,"hw_decoders":2}}' \
  --mm-processor-kwargs '{"size":{"shortest_edge":65536,"longest_edge":9437184}}'

기술적 주의사항

하드웨어 기반 비디오 디코딩은 전용 VRAM 일부를 필요로 합니다. 만약 사용 사례가 이미 KV 캐시를 위해 전체 가용 VRAM을 사용하고 있다면 성능에 영향을 줄 수 있습니다. 그러나 vLLM은 실제 테스트에서 PyNvVideoCodec을 사용했을 때 성능 저하가 발생한 사례를 발견하지 못했습니다.

Sources