<aside>
本文由 AI 翻译得来
</aside>
原文:SGLang and Miles Add Day-0 Support for Kimi K3
作者:SGLang Team
日期:2026 年 7 月 27 日
翻译说明:正文、表格、图注与脚注均按原文完整翻译。为便于核验,模型名、算法名、命令行参数和并行缩写保留英文。所有标成「技术解读」的段落均为结合 SGLang
kimi-k3分支源码所作的补充,不属于原文。
我们很高兴地宣布,SGLang 和 Miles 已在首日支持 Kimi K3。K3 是首个进入 3 万亿参数级别的开源模型,其混合架构几乎在服务栈作出假设的每一个地方都偏离了惯例。SGLang 与 Moonshot AI 和 NVIDIA 团队合作,在发布当天完整覆盖 K3:SGLang 负责推理,Miles 负责 RL 训练。本文介绍实现这一目标所需的工作。
亮点
启动命令和针对不同工作负载的配置建议见 Kimi K3 cookbook。
Kimi K3 是首个进入 3 万亿参数级别的开源模型:2.8T 参数、100 万 token context window,并原生支持视觉理解。它的前代 K2.5 在架构上与 SGLang 已能良好服务的模型十分接近,因此现有栈的大部分能力都可以直接应用。K3 则不同——它同时在多个相互独立的方面偏离了惯例:
| Kimi K2.5 | Kimi K3 | |
|---|---|---|
| 规模 | 约 1T 参数 | 2.8T 参数 |
| 注意力 | 全部为 MLA,共 61 层 | 混合架构:69 个 KDA 线性注意力层 + 24 个 MLA 层,共 93 层 |
| Attention Residuals | 无 | 保存每个注意力输出,并在每个 block 中聚合 |
| MoE | 384 个 expert,top-8 | LatentMoE:896 个 expert,top-16,在 3584 维 latent space 中运行 |
| Expert 激活函数 | SwiGLU | SiTU |
| Vision tower | MoonViT | MoonViT3d,一套面向 K3 的新栈 |
表中每一行都是一个服务问题。混合注意力栈使 100 万 token context 在成本上变得可行,但这也意味着服务器必须同时保存两种状态:每个请求一份固定大小的 KDA 状态,以及 MLA 按 token 保存的 KV;下文的内存管理章节讨论的正是这个问题。Attention Residuals 让一个注意力输出 bank 贯穿整个栈,这破坏了 SGLang 标准 layer plumbing 的假设,并迫使 DP attention 等位置引入 K3 专用路径。LatentMoE 在降维后的 latent space 中,从 896 个 expert 里路由 16 个,并使用 SiTU 激活函数而非 SwiGLU,因此现有 MoE kernel 无法直接适用。视觉路径——tower、projector、processor 和 Kimi 的 XTML 媒体格式——也完全从头构建。下文各节都建立在这些启动工作之上。
技术解读:为何它不能只被当成一个更大的 K2.5。
kimi-k3分支把这些差异直接编码成独立模型,而不是只改一份 config。模型文件开头明确列出 Attention Residual、Latent MoE、SiTU、MLA output gate 和 full-rank KDA gate 五条 K3 专用语义;KimiK3MoE先把 hidden state 投影到routed_expert_hidden_size,再在 latent space 中执行 top-k expert,最后投影回原维度。换句话说,896 个 expert 的主要计算发生在 3584 维空间,服务端既要支持新的权重布局,也要让路由、量化、EP 通信和激活 kernel 使用同一套 latent-space 契约。源码见kimi_k3.py的架构声明和KimiK3MoE。
K3 的 KDA 与 MLA 混合架构带来两个内存管理难题。第一个难题是如何安全、高效地对可变的 KDA 循环状态使用 prefix caching。第二个难题是如何在 KDA 状态与 MLA KV 之间动态共享容量。
Attention KV 只会追加。一旦计算完成,它就不再改变,因此 scheduler 可以安全地让多个请求共享 radix tree 中缓存的 prefix。KDA 状态则不同。每一层都维护一个固定大小的循环 buffer,并且该 buffer 会在每个 token 上被原地覆盖,因此 prefix caching 管理的是可变状态,不是不可变 KV。