Kimi K3 模型结构(7):结构决定系统

Kimi K3 模型结构(7):结构决定系统

💡 原文中文,约9300字,阅读约需22分钟。
📝

内容提要

本文总结Kimi K3模型结构对训练与推理系统的影响。KDA采用三种执行形态(FlashKDA、设备内上下文并行、状态回滚)处理固定大小状态;上下文并行通过可结合前缀扫描分解,避免直接加和;Block AttnRes优化内存通信;Stable LatentMoE融合GEMM与token中心解码;混合架构前缀缓存解耦粒度,支持512-token边界复用;视觉编码器动态并行并填充流水线气泡。核心是将固定权重累加转为数据相关选择。

🔎

延伸解读

KDA 状态回滚:用重放代替快照

投机解码被拒绝时,KDA 状态无法简单回滚。若为每个 draft 位置存快照,状态流量会成倍增长,在线服务大 batch 下成本过高。K3 的做法是只缓存比状态小得多的投影输入,在片上重放重建被接受 token 的状态,与同期 ReplaySSM 思路一致。重放与验证、bonus token 共用一个融合内核,验证延迟随验证 token 数次线性增长,低于快照基线。

上下文并行:KDA 状态不能直接相加

普通线性注意力状态更新是加法,各段贡献可线性叠加,上下文并行只需传递固定大小状态。但 KDA 的 delta rule 更新依赖进入状态,从零状态算出的本地状态不足以确定真实效果。KCP 通过可结合前缀扫描分解,每个 rank 交换本地转移矩阵和零初始状态片段,代价仅一次固定大小 all-gather,计算随长度线性扩展,使百万 token 训练可行。

前缀缓存:解耦粒度实现 512-token 复用

K3 混合架构中,MLA 的 KV 随长度增长,KDA 状态固定大小,缓存前缀需两者边界对齐。若按物理块哈希,粒度粗至 1024-6144 token,短请求无法复用。K3 将前缀哈希细化为 512-token 哈希块,KDA checkpoint 仅存于哈希端点,命中点可为任意 512-token 边界,达到与全注意力模型相同的通用性,并处理了并发调度下的一致性。

视觉编码器:动态并行与气泡填充

长上下文多模态训练中,大图和长视频导致编码器计算不均。K3 采用动态上下文并行,沿 patch 维切分大图,通过 gather-KV 计算注意力,并将多图均衡分配到子组。同时利用 1F1B 流水线中文本前后向的空隙,提前或延迟执行 ViT 前反向,将大部分视觉计算藏进气泡,使编码器有效开销基本消失。

Q&A

Kimi K3 的 KDA 在训练和 prefill 阶段使用什么内核?

KDA 在训练和 prefill 阶段使用 FlashKDA,这是一个基于 CUTLASS 的 chunkwise 内核,将块内计算和跨块的状态传播重叠,以隐藏状态传播时的 SM 空闲。

为什么 KDA 的上下文并行不能直接将各 rank 的状态相加?

因为 KDA 的更新包含依赖 token 的矩阵乘法(delta rule),一段序列的效果取决于进入时的状态,从零状态算出的本地状态不足以确定最终状态,所以不能直接相加。

Kimi K3 如何处理 KDA 在投机解码中的状态回滚问题?

K3 不缓存完整状态快照,而是只缓存被接受 draft token 的投影输入,并在片上重放这些投影输入来重建状态,从而避免状态流量成倍增长,降低验证延迟。

Block AttnRes 在训练时如何优化内存和通信?

训练时,块代表在边界层生成一次并留在 GPU 上共享,AttnRes 计算整体包进 activation checkpointing,不增加激活内存;流水线并行采用 cache-based 通信,只增量传输新生成的块,达到内存占用下界。

Kimi K3 的 Stable LatentMoE 在解码时如何设计内核以提高效率?

解码内核基于 WarpDecode 的 token 中心设计,每个 warp 负责一个输出神经元,并细分为 lane team 处理不相交的 expert 子集,权重布局离线重排以减少 MXFP4 反量化开销。

Kimi K3 如何实现混合架构下的前缀缓存,支持 512-token 边界复用?

K3 将前缀哈希和物理块粒度解耦:MLA 页内使用 512-token 的细哈希块进行前缀匹配,KDA 状态 checkpoint 只存在于 MLA 哈希端点的稀疏子集上。查找时先匹配 MLA 链式哈希,再检查 KDA checkpoint,命中点可以是任意 512-token 边界,从而支持细粒度复用。

Kimi K3 的视觉编码器如何优化长上下文多模态训练?

视觉编码器采用动态上下文并行:大图沿 patch 维切分到多个设备,通过 gather-KV 计算注意力,并将多张大图负载均衡分配到子组;同时将 ViT 计算填充到流水线气泡中,隐藏大部分视觉编码开销。

🏷️

标签

➡️

继续阅读