vLLM Qwen3.5 성능 최적화

vLLM은 GB200 NVL72 시스템에서 Qwen3.5를 서빙할 때 GPU당 총 25,000 tokens per second (TPS) 이상의 성능을 달성했습니다. 이 성능 이정표는 Qwen3.5의 hybrid attention 아키텍처를 위한 disaggregated serving 경로를 최적화함으로써 달성되었으며, 특히 Gated Delta Network (GDN) 연산 및 prefill과 decode 워커 간의 state transfer 문제를 해결했습니다.

Qwen3.5를 위한 기술적 최적화

Qwen3.5는 full-attention 레이어와 Gated Delta Network (GDN) 레이어를 결합한 hybrid 아키텍처를 사용합니다. 처리량을 극대화하기 위해 vLLM은 세 가지 주요 기술적 향상을 구현했습니다:

1. Blackwell 최적화 GDN Prefill

vLLM은 기존의 FLA/Triton 구현을 대체하여 FlashInfer의 새로운 GDN prefill 커널을 통합했습니다 (PR #3001). Qwen3.5-397B-A17B-NVFP4를 실행하는 8×B200 시스템에서 이 통합은 다음과 같은 결과를 가져왔습니다:

  • GDN Kernel Performance: 마이크로 벤치마크에서 최대 5.92배 높은 성능.
  • Prefill Throughput: prefill 전용 워크로드(ISL/OSL = 8192/1)에서 end-to-end prefill 처리량 1.13배 증가.
  • Latency: 동일한 워크로드에서 평균 Time to First Token (TTFT) 12% 감소.

사용자는 GDN backend를 auto로 설정하거나 --gdn-prefill-backend flashinfer를 명시적으로 사용하여 이 경로를 활성화할 수 있습니다.

2. Hybrid Cache 및 GDN-State Transfer

disaggregated 모드에서 hybrid SSM-attention 모델을 서빙하려면 full-attention KV cache와 Mamba 스타일의 SSM state를 모두 전송해야 합니다. vLLM은 이를 지원하기 위해 몇 가지 핵심적인 변경 사항을 구현했습니다:

  • Physical Memory Mapping: PR #35758은 HMA 논리 블록을 물리적 메모리 영역에 매핑하여, 소규모 H100 설정에서 전송되는 descriptor 수를 4,284개에서 1,650개로 줄이고 처리량을 약 7% 향상시켰습니다.

  • Dual Descriptor Views: PR #36687은 dual descriptor views와 homogeneous-TP 지원을 도입하여, prefill 및 decode 워커가 NIXL를 통해 이질적인(heterogeneous) state를 전송할 수 있도록 했습니다.

  • GDN Extension: PR #41869는 Qwen3.5를 위한 GDN 레이어를 지원하도록 이 disaggregated 경로를 구체적으로 확장했습니다.

3. Race-Free Async Scheduling

Async scheduling은 GPU당 25K tok/s 임계값을 넘기 위한 핵심 기능으로 확인되었습니다. vLLM은 이전에 async scheduling이 활성화되었을 때 정확도가 0으로 급락하게 만들었던 KV block 전송의 두 가지 심각한 race condition을 해결했습니다 (PR #48481 및 PR #45357).

성능 벤치마크

환경 및 설정

성능은 다음 구성으로 측정되었습니다:

  • Hardware: NVLink72로 연결된 GB200 클러스터.
  • Model: Qwen3.5-397B-A17B-NVFP4.
  • Workload: ISL/OSL = 8192/1024, random_range_ratio=0.8인 random dataset.
  • Topology: DEP8(8개 GPU에 걸친 Data Parallel + Expert Parallel)을 사용하는 고정된 decode 측과 4~8개의 endpoint(각 DEP2 사용)를 사용하는 prefill 측 구성.

결과

정확도는 GSM8K 벤치마크를 사용하여 검증되었으며, 테스트된 5가지 구성 모두에서 **88%**의 정확도를 유지하여 집계된 Qwen3.5 실행 결과와 일치했습니다.

GPU당 총 TPS는 concurrency를 64에서 5,120까지 스윕했을 때 25,000 tokens per second에 도달했습니다. 5,120의 concurrency 한계는 decode 측의 KV cache 용량 때문에 발생했으며, 이를 늘리려면 decode endpoint에 추가 GPU가 필요합니다.

배포 레시피 및 권장 사항

이러한 결과를 달성하기 위해 vLLM은 다음 설정을 권장합니다:

  • State Layout: disaggregated serving에서 conv-state 전송을 위해 VLLM_SSM_CONV_STATE_LAYOUT=DS 설정이 필수적입니다.
  • Scheduling: 처리량을 극대화하려면 --async-scheduling을 사용하십시오.
  • Cache Optimization: decode endpoint의 유효 KV cache 용량을 늘리려면 --mamba-ssm-cache-dtype bfloat16를 사용하십시오.
  • Model Mode: 텍스트 워크로드의 경우 --language-model-only를 사용하여 multimodal 입력을 비활성화하고 attention 레이어의 fused QK-norm + RoPE + gate 경로를 잠금 해제하십시오.
  • Prefill Batching: prefill이 병목 현상이 되는 것을 방지하기 위해 prefill 측에 --max-num-batched-tokens 16384 (2× ISL)를 설정하십시오. 이는 높은 concurrency에서 GPU당 총 TPS를 약 +8% 증가시켰습니다.
  • Frontend Overhead: 높은 concurrency에서 frontend 오버헤드를 줄이려면 --stream-interval 100을 설정하십시오. 단, 이 경우 토큰당 지연 시간(latency)은 증가합니다.
  • Monitoring: 병목 현상을 식별하고 KV cache 사용량을 모니터링하기 위해 기본 통계 로깅을 활성화하는 --api-server-count 1을 사용하십시오.

Sources

관련