vLLM 首日支持 Thinking Machines 的 Inkling 2 Small
Inkling 2 Small on vLLM: Day-0 Support
vLLM 宣布在 Inkling 2 Small 发布当天提供支持,这是一个文本与视觉输入的多模态 MoE 模型,总参数 594B、激活参数 17B,上下文最长 1M tokens。
原文给出 vLLM 对 Inkling 2 Small 的 Day-0 支持细节,读者可了解混合精度 MoE 与投机解码在推理框架中的落地方式。

vLLM 在发布当天即支持 Thinking Machines 的 Inkling 2 Small。这是一个多模态(文本和视觉)MoE 模型,总参数 594B、激活参数 17B,上下文长度最高 1M tokens。该模型还自带原生 DSpark 推测器。vLLM 以优化后的性能支持它(在 TP4 下最高 630 TPS/用户,接受长度 3.5),并且也支持 LoRA。
TL;DR
- 总参数 594B,激活参数 17B,上下文 1M。 一个 48 层 MoE,含 384 个专家(top-8),接收图像和文本并输出文本。
- 相对 Inkling 的架构升级。 块注意力残差、注意力汇、门控注意力,以及 ViT 图像编码器。
- 混合精度 MoE。 MoE 使用 NVFP4(第 0–39 层)和 MXFP8(第 40–47 层),因此模型可在单节点上部署。
- 原生 DSpark 推测器。 带 RNN 头的 DSpark 每步草拟 7 个 token。
- 大量优化。 内核融合、PDL、高度调优的 Gluon 注意力内核,以及序列并行,在 GB200 上以 TP4 达到最高 630 TPS/用户、接受长度 3.5。
- RL 与 LoRA 支持。 vLLM 为该模型支持 RL(通过 SkyRL)和 LoRA。
你可以这样部署该模型:
vllm serve thinkingmachines/Inkling-2-Small \
--tensor-parallel-size 8 \
--reasoning-parser inkling --tool-call-parser inkling --enable-auto-tool-choice \
--speculative-config '{"method":"dspark","num_speculative_tokens":7,"draft_sample_method":"probabilistic"}'模型架构
图 1. Inkling 2 Small 架构。金色标记表示相对 Inkling 新增或变更的部分。
| Inkling | Inkling 2 Small | |
|---|---|---|
| 层数 | 66(55 滑动窗口 + 11 全注意力) | 48(40 滑动窗口 + 8 全注意力) |
| 残差路径 | 残差流 | 块注意力残差(8 个块,每块 6 层) |
| 注意力 | 带相对偏置的 GQA,无 RoPE | 相同 |
| 头数(查询 / KV) | 64 / 8 全注意力,64 / 16 滑动窗口 | 所有层均为 48 / 8 |
| 滑动窗口 | 512 | 1,024 |
| 注意力输出 | 普通 | sigmoid 门控和逐 token 汇 |
| 短卷积 | 每层 4 个(K、V、注意力输出、MLP 输出),卷积核大小 4 | 相同 |
| MoE | 256 路由(top-6)+ 2 共享专家汇,前 2 层为稠密 | 384 路由(top-8),无共享专家,所有层均为 MoE |
| 专家精度 | NVFP4 | NVFP4(第 0–39 层),MXFP8(第 40–47 层) |
| 模态 | 文本、图像、音频输入;文本输出 | 文本、图像输入;文本输出 |
| 图像编码器 | 40×40 图块上的 4 层 hMLP | 20×20 图块上的 23 层 ViT(宽 1,024) |
| 推测解码 | 8 个链式 MTP 头 | DSpark 草稿,每步 7 个 token |
Inkling 骨干 + 近期进展。 Inkling 2 Small 保留了 Inkling 的骨干:滑动窗口与全注意力 5:1 的配比、用学习到的相对偏置替代 RoPE 的 GQA、每层四个短卷积,以及 sigmoid 路由的 MoE。在此基础上,它加入了近期进展。块注意力残差取代了残差流,因此在每个子层之前,一个学习到的查询会混合此前 6 层块的输出。门控注意力在每个头的输出上加入 sigmoid 门控,并配合逐 token 的注意力汇。它用 23 层 ViT 取代了 hMLP 图像编码器。
采用 Four-Over-Six NVFP4 的混合精度 MoE。 在 Inkling 2 Small 的 48 层中,前 40 层的专家使用 NVFP4,后 8 层的专家使用 MXFP8。NVFP4 激活使用逐 token 全局缩放加双候选块缩放(Four Over Six):对于每个 16 元素块,量化器尝试将块最大值缩放到 6 和 4,并保留重建误差(MAE)更低的那一个。
带 RNN 头的 DSpark 推测器。 检查点还附带一个 DSpark 草稿,取代 Inkling 的 8 个链式 MTP 头。该推测器有 5 层,每步草拟 7 个 token。该头是 DeepSeek 的 DSpark 论文所描述的 RNN 变体。
vLLM 集成与优化
图 2. 一个解码器层中的内核,用于解码和大规模预填充。
内核融合与 PDL。 vLLM 将子层之间的集合通信和内存受限操作激进地融合为单个内核。对于注意力残差,每个边界都需要一次 all-reduce、一次短卷积、一次残差更新、注意力残差混合以及一次 RMSNorm:在同一份隐藏状态上执行五个内存受限步骤。融合内核 allreduce_conv_mix(图 2 中的金色部分)通过 NVLink 多播执行 all-reduce,并将其后的所有内容保留在寄存器中。GEMM、注意力、路由和激活内核使用程序化依赖启动(PDL)启动,因此每个内核的前导部分会与上一个内核的尾部重叠,这在小批量大小下很重要,因为此时一个解码步骤是一长串短内核。
带融合激活量化的 MoE。 vLLM 在产生专家激活的内核内部对其进行量化(NVFP4 或 MXFP8,与每一层匹配),因此没有单独的量化过程会触及隐藏状态:路由内核在 gate/up 投影之前对 token 进行量化,而带 softcap 的 SwiGLU 在 down 投影之前对其输出进行量化。专家 GEMM 运行在 TensorRT-LLM 的 batched-GEMM 内核上,随 FlashInfer 一起提供。
预填充的序列并行。 在普通张量并行下,每次 all-reduce 之后,每个 GPU 都要对所有 token 运行短卷积、注意力残差混合和 RMSNorm:同样的工作在每个 rank 上重复执行。这在解码中开销很低,但在预填充中代价高昂。vLLM 通过序列并行(图 2 中的紫色和金色部分)消除了这种冗余。每个 GPU 执行 reduce-scatter,仅在其 token 切片上运行一个融合的 conv_mix 内核来执行短卷积、残差更新、注意力残差混合和 RMSNorm,然后 all-gather 结果以供下一个 GEMM 使用。这在 TP4 下将 8K token 的预填充步骤缩短了 22%,在 TP8 下缩短了 26%,并为每个 GPU 释放了 1.3–1.9 GiB 的 KV 缓存空间。
为解码优化的 Gluon 相对注意力内核。 Inkling 的 FlashAttention-4 解码路径对 Inkling 2 Small 来说很慢:6:1 的 GQA 比例会静默禁用 GQA 打包。为了解决这个问题,我们编写了一个 warp 专用的 Gluon 内核,用于解码和验证,它将 6 个头打包到一个 64 行的 tile 中并只读取一次 KV:一个 TMA warp 流式传输 KV,一个 tcgen05 warp 运行 MMA,四个 softmax warp 应用相对偏置。在 100K 上下文下,batch-1 解码步骤从 15.1 ms 降至 4.8 ms。预填充保留 Inkling 的 sheared-bias FlashAttention-4 路径。
性能
我们在 TP8(两个 4-GPU 节点)下,使用 DSpark(概率性起草)和前缀缓存,在代理工作负载上对 Inkling 2 Small 进行了基准测试。每个会话保持长上下文,并且在每一轮中追加先前的答案和约 2K token 的工具输出,因此每轮只有约 3K token 是新的;然后每轮在温度 1.0 下开启推理生成 1,024 个 token。该表给出了在每个用户获得 100 tokens/s 的并发度下,每个 GPU 的输出吞吐量。
| 会话上下文 | 每个 GPU 在 100 tok/s/用户下的输出 tok/s | 并发会话数 | 前缀缓存命中率 | 接受长度 |
|---|---|---|---|---|
| 32K | ~1,070 | ~84 | 91% | 3.3 |
| 64K | ~915 | ~72 | 95% | 3.4 |
| 128K | ~700 | ~55 | 98% | 3.5 |
| 256K | ~450 | ~37 | 99% | 3.5 |
对于 TP4 下的单个用户,模型以约 630 tok/s 的速度解码,接受长度为 3.5。
准确率评估
vLLM 保留了参考实现的数值特性:每一步使用相同的数据类型,FP32 注意力输出和路由器,以及相同的 NVFP4/MXFP8 激活量化,仅归约顺序和 all-reduce 的 BF16 部分有所不同。端到端方面,我们在启用 DSpark 的情况下,使用 inkling-verify 在最高 1M token 的 NIAH、MMMU-Pro 和 HLE 上验证了准确率;得分与我们未使用投机解码的运行结果一致。
致谢
我们感谢 Thinking Machines 团队在 vLLM 中集成和优化 Inkling 2 Small 过程中的密切合作。该工作由 Aurick Qiao(Thinking Machines)和 Woosuk Kwon(Inferact)领导。
来源:vLLM Blog · vllm.ai