vLLM Qwen3.5 性能优化

在 GB200 NVL72 系统上运行 Qwen3.5 时,vLLM 每 GPU 的总吞吐量已超过 25,000 tokens per second (TPS)。这一性能里程碑是通过优化 Qwen3.5 混合注意力架构的解耦服务路径(disaggregated serving path)实现的,特别是解决了 Gated Delta Network (GDN) 计算以及 prefill 和 decode worker 之间的状态传输挑战。

Qwen3.5 技术优化

Qwen3.5 利用结合了全注意力层(full-attention layers)与 Gated Delta Network (GDN) 层的混合架构。为了最大化吞吐量,vLLM 实施了三项主要技术增强:

1. Blackwell 优化的 GDN Prefill

vLLM 集成了来自 FlashInfer 的全新 GDN prefill kernel (PR #3001),取代了之前的 FLA/Triton 实现。在运行 Qwen3.5-397B-A17B-NVFP4 的 8×B200 系统上,此次集成带来了以下结果:

  • GDN Kernel 性能: 在微基准测试中性能提升高达 5.92×。
  • Prefill 吞吐量: 对于仅 prefill 的工作负载(ISL/OSL = 8192/1),端到端 prefill 吞吐量提升了 1.13×。
  • 延迟: 在相同工作负载下,平均首字延迟 (TTFT) 降低了 12%。

用户可以通过将 GDN backend 设置为 auto 或显式使用 --gdn-prefill-backend flashinfer 来启用此路径。

2. 混合缓存与 GDN 状态传输

vLLM 在解耦模式下提供混合 SSM-attention 模型服务时,需要传输全注意力 KV cache 和 Mamba 风格的 SSM 状态。vLLM 实施了以下关键变更以支持此功能:

  • 物理内存映射: PR #35758 将 HMA 逻辑块映射到物理内存区域,将传输的描述符从 4,284 减少到 1,650,并在小型 H100 设置中将吞吐量提高了约 7%。
  • 双描述符视图: PR #36687 引入了双描述符视图和同构-TP 支持,允许 prefill 和 decode worker 通过 NIXL 传输异构状态。
  • GDN 扩展: PR #41869 特别扩展了此解耦路径以支持 Qwen3.5 的 GDN 层。

3. 无竞争异步调度

异步调度被认为是突破 25K tok/s/GPU 阈值的关键特性。vLLM 解决了 KV block 传输中的两个关键竞态条件(PR #48481 和 PR #45357),这些问题此前在启用异步调度时会导致准确率降至零。

性能基准测试

环境与设置

性能测量使用以下配置:

  • 硬件: 通过 NVLink72 连接的 GB200 集群。
  • 模型: Qwen3.5-397B-A17B-NVFP4。
  • 工作负载: ISL/OSL = 8192/1024,带有 random_range_ratio=0.8 的随机数据集。
  • 拓扑结构: 固定 decode 端使用一个带有 DEP8 (Data Parallel + Expert Parallel across 8 GPUs) 的端点,prefill 端配置范围从 4 到 8 个端点(每个使用 DEP2)。

结果

准确率通过 GSM8K 基准测试进行了验证,所有五种测试配置均保持了 88% 的准确率,与聚合 Qwen3.5 运行结果一致。

每 GPU 的总 TPS 达到了 25,000 tokens per second,并发数从 64 扫频至 5,120。由于 decode 端的 KV cache 容量限制,并发数达到了 5,120 的上限;若要进一步增加,则需要在 decode 端点增加额外的 GPU。

部署方案与最佳实践

为了实现这些结果,vLLM 建议采用以下设置:

  • 状态布局: 在解耦服务中进行 conv-state 传输时,VLLM_SSM_CONV_STATE_LAYOUT=DS 是强制性的。
  • 调度: 使用 --async-scheduling 以最大化吞吐量。
  • 缓存优化: 使用 --mamba-ssm-cache-dtype bfloat16 以增加 decode 端点的有效 KV cache 容量。
  • 模型模式: 对于文本工作负载,使用 --language-model-only 以禁用多模态输入并解锁注意力层中的 fused QK-norm + RoPE + gate 路径。
  • Prefill Batching: 在 prefill 端设置 --max-num-batched-tokens 16384 (2× ISL) 以防止 prefill 成为瓶颈,这在高并发下为每 GPU 的总 TPS 带来了约 +8% 的提升。
  • 前端开销: 设置 --stream-interval 100 以减少高并发下的前端开销,尽管这会增加每个 token 的延迟。
  • 监控: 使用 --api-server-count 1 以启用默认统计日志记录,用于识别瓶颈并监控 KV cache 利用率。

Sources

相关