vLLM 프리필-디코드 분산 처리 with MORI-IO

vLLM은 단일 노드 배포를 위해 프리필-디코드(PD) 분산 처리를 도입했으며, 8-GPU AMD Instinct MI300X 노드에서 굿풋을 2.5배 향상시켰습니다. 계산에 바인딩된 프리필 단계와 메모리 대역폭에 바인딩된 디코드 단계를 분리함으로써, vLLM은 이러한 워크로드가 동일한 GPU 자원을 놓고 경쟁할 때 일반적으로 발생하는 인터-토큰 지연(ITL) 스파이크를 제거합니다.

공동 배치 서비스의 병목

표준 단일체 배포에서는 프리필과 디코드 워크로드가 동일한 GPU 자원과 스케줄러를 공유합니다. 프리필은 대형 GEMM을 사용해 전체 프롬프트를 병렬로 처리하기 때문에 계산에 바인딩되어 있으며, 단일 디코드 단계보다 훨씬 오래 걸립니다. 프리필 요청이 배치에 들어오면 모든 진행 중인 디코드 스트림을 차단하여 인터-토큰 지연(ITL)의 예측 불가능한 스파이크를 유발합니다.

단일 노드 PD 분산 처리 아키텍처

분산 처리가 다중 노드 클러스터를 필요로 한다는 일반적인 가정과 달리, vLLM은 이 아키텍처를 단일 8-GPU 노드 내에서 구현합니다. 시스템은 세 가지 구성 요소로 이루어진 마이크로서비스 아키텍처로 전환됩니다:

  • Prefill Instance: 입력 프롬프트를 처리하고 KV 캐시를 생성합니다(예: GPU 0–3 사용).
  • Decode Instance: 전송된 KV 캐시를 사용해 출력 토큰을 생성합니다(예: GPU 4–7 사용).
  • Proxy Server: 진입점 역할을 하며, 요청을 먼저 프리필 인스턴스로, 그 다음 디코드 인스턴스로 라우팅합니다.

이 인스턴스들 간에 기가바이트 규모의 KV 캐시 데이터를 전송하기 위해, vLLM은 오픈소스 MORI(Modular RDMA Interface) 프레임워크 위에 구축된 RDMA 기반 KV 캐시 커넥터인 MORI-IO를 활용합니다.

KV 캐시 전송 모드: 읽기 vs. 쓰기

MORI-IO는 VLLM_MORIIO_CONNECTOR_READ_MODE 환경 변수를 통해 설정되는 두 가지 별도 전송 모드를 지원합니다:

읽기 모드 (VLLM_MORIIO_CONNECTOR_READ_MODE=1)

읽기 모드에서는 프록시가 요청을 순차적으로 디스패치합니다. 프리필 인스턴스가 완료되어 remote_block_ids를 반환할 때까지 기다린 후, 요청을 디코드 인스턴스로 전달합니다. 디코드 인스턴스는 이후 RDMA를 통해 프리필 인스턴스 메모리에서 KV 캐시를 가져옵니다.

쓰기 모드 (기본값)

쓰기 모드에서는 프록시가 프리필 인스턴스와 디코드 인스턴스에 동시에 요청을 디스패치합니다. 프리필 인스턴스가 각 레이어를 계산함에 따라, KV 데이터를 RDMA WRITE를 통해 디코드 인스턴스가 미리 할당한 메모리로 직접 푸시합니다. 이는 프록시 직렬화 오버헤드를 제거하고, 디코드 큐 대기 시간을 프리필 계산과 겹치게 합니다.

속성 읽기 모드 쓰기 모드
RDMA 방향 디코드가 프리필에서 가져옴 프리필이 디코드로 푸시
프록시 디스패치 순차 (프리필 대기 $\rightarrow$ 디코드 디스패치) 동시 (프리필과 디코드 병렬)
블록 ID 전달 프록시를 통해 필요 필요 없음
KV 정리 디코드가 프리필에 블록 해제 알림 프리필이 쓰기 완료를 추적

성능 결과 및 굿풋

8-GPU MI300X 노드에서 Qwen3-235B-A22B-FP8 모델을 사용(2000 토큰 프롬프트, 1000 토큰 출력)하여, vLLM은 굿풋을 측정했습니다—요청이 첫 토큰까지 시간(TTFT) < 1초와 ITL < 50ms를 모두 만족하는 최대 요청률을 의미합니다.

주요 결과

  • 2.5배 굿풋 증가: 쓰기 모드는 8 req/s 속도에서 73/100 요청이 SLO를 만족했으며, 표준 TP8 서비스에서는 26/100에 불과했습니다.
  • ITL 스파이크 제거: 분산 모드는 디코드 엔진이 계산 집약적인 프리필 작업으로부터 격리되어 ITL 위반을 완전히 없앴습니다.
  • TTFT 트레이드오프: 분산 처리로 인해 추가된 RDMA 전송 및 프록시 오버헤드 때문에 TTFT가 증가합니다. 쓰기 모드는 프록시 직렬화를 없애기 때문에 읽기 모드보다 더 나은 TTFT를 제공합니다.

배포 및 구성

PD 분산 처리를 배포하려면 vLLM에서 kv-transfer-config를 설정해야 합니다. 두 인스턴스 모두 MoRIIOConnector와 각각의 역할(kv_producer는 프리필, kv_consumer는 디코드)을 지정해야 합니다.

포트 요구 사항

  • proxy_ping_port: 프록시와 인스턴스 등록을 위한 ZMQ 엔드포인트.
  • http_port: 추론 요청을 위한 vLLM HTTP 서버 포트.
  • handshake_port: KV 캐시 레이아웃을 위한 일회성 메타데이터 교환.
  • notify_port: KV 블록이 준비되었을 때 요청별 동기화 신호.

사용 사례 요약

상황 권장 사항
프로덕션 부하에서 ITL p99가 SLO를 초과 분산
TTFT가 주요 제약 조건 표준 서비스
긴 프롬프트와 높은 동시성 분산
짧은 프롬프트와 낮은 요청률 표준 서비스

Sources