vLLM Kimi K3 支持

vLLM Kimi K3 支持

vLLM 已宣布为 Kimi K3 提供高效的 day-0 支持,Kimi K3 是一个 2.8 万亿参数的开放权重多模态混合专家(MoE)模型。此集成使得 Kimi K3 的独特混合架构能够高性能服务,在使用 16 块 NVIDIA GB300 NVL72 GPU 进行 DSpark 投机解码时,每用户可达到最高 370 标记/秒。

Kimi K3 架构概览

Kimi K3 是一个 2.8T 参数模型,每个标记激活 896 个专家中的 16 个。它专为长上下文效率而设计,通过以下几项关键创新支持多达 100 万标记的窗口:

  • Kimi Delta Attention (KDA): 一种混合堆栈,交错线性注意力层(保持固定大小的循环状态)与周期性全注意力层,以保持全局召回。
  • 注意力残差 (AttnRes): 一种机制,用深度注意力替换标准残差累积,使用学习得到的伪查询来加权前置块的残差状态。
  • 稳定 LatentMoE: 一种设计,将激活投射到更窄的潜在维度以进行路由专家计算,利用量均衡根据路由器得分分位数分配专家。
  • 原生 MXFP4: 模型在 MoE 路径上使用原生 4 位权重以降低带宽需求。

vLLM 对 Kimi K3 的服务优化

为了应对 Kimi K3 与标准 Transformer 架构的偏离,vLLM 实施了几种专门的服务机制:

混合 KV-Cache 管理

vLLM 使用单一混合 KV-cache 管理器来处理全注意力层的分页 KV 块以及 KDA 层的紧凑循环状态块。为了在该混合设计中启用前缀缓存,vLLM 将物理 KDA 状态块与细粒度前缀匹配解耦,使得共享提示可以重用 KDA 状态和分页 KV。

融合内核和元数据优化

  • 注意力残差: vLLM 使用融合的 Triton 和 CUDA 内核在一次操作中计算深度注意力 logits、softmax 和隐藏状态聚合,从而减少内存流量。
  • KDA 解码: 一个专用的 CUDA 内核将因果卷积、循环更新和 RMSNorm 融合为一次启动,以避免中间张量和重复的状态流量。
  • KDA 预填充: vLLM 集成了 FlashKDA 及随后的社区优化(Flash-Flash-KDA)以加速预填充阶段。
  • 元数据构建器: 一个专门的 Kimi K3 KDA 元数据构建器用融合的 Triton 内核替换急切的 PyTorch 操作,在批量大小为 1 时将元数据准备延迟降低 96%(从 870°s 降至 34°s)。

低延迟计算

vLLM 使用 skinnyGEMM 进行低批量大小设置,绕过共享内存数据暂存,使端到端延迟降低约 10%。此外,LatentMoE 尾融合优化减少了线性投影阶段的冗余计算,带来 7°8% 的端到端加速。

生产能力和性能

使用 DSpark 的投机解码

vLLM 支持 DSpark,一种基于块扩散的投机解码算法。使用在 vLLM 和 TorchSpec 上训练的 DSpark 投机器,vLLM 对单用户请求实现了 3.14× 的加速,吞吐量从 118 tok/s 提升至 370 tok/s。接受率在低熵任务(编码)时为每步 4.73 个标记,在高熵任务(创意写作)时为每步 2.61 个标记。

预填充/解码分离

对于高吞吐环境,vLLM 支持预填充/解码(PD)分离。NIXL 连接器管理在独立的预填充和解码副本之间传输 token 级 MLA 缓存和请求级 KDA 状态。

智能体缓存保留策略

为了管理长上下文智能体工作负载中 KDA 状态的内存占用,vLLM 实施了两种保留策略:

  • 基于间隔的保留: 在固定间隔(例如每 32K 标记)检查点 KDA 状态,并在提示边界自动进行。
  • Marconi 风格的选择性保留: 一种需求驱动的方法,仅在前缀第二次命中时缓存 KDA 状态,确保只有频繁共享的前缀消耗缓存容量。

基准测试和硬件要求

性能指标

在 GB300 NVL72 GPU 上,vLLM 在批量大小为 1 时实现以下单用户解码吞吐量:

配置 标准解码 DSpark 投机解码
TP8 111 tok/s 331 tok/s
TP16 118 tok/s 370 tok/s

准确率

Kimi K3 在 vLLM 上在 GSM8K 上得分 0.976,在 GPQA-Diamond 上得分 0.939,在 OCRBench 上得分 0.889,在 MMMU Pro Vision 上得分 0.818(在最大推理努力下)。

硬件要求

服务 Kimi K3 需要至少 8× B300(或 GB300 NVL72)GPU 或 16× B200 GPU。支持 NVIDIA(Hopper 和 Blackwell)和 AMD(MI355X)硬件。

部署指南摘要

要运行 Kimi K3,vLLM 建议以下配置:

  • 前缀缓存: 必须通过 --enable-prefix-caching 显式启用。
  • MoE 后端: 在分散/专家并行(DEP)环境中使用 deep_gemm_mega_moe,在 TP > 1 时使用 flashinfer_trtllm
  • 全连接后端: 对于 NVLink 使用 flashinfer_nvlink_one_sided,对于 RDMA 使用 deepep_v2
  • Rust 前端: 通过 VLLM_USE_RUST_FRONTEND=1 启用。

Sources