Skip to content

Kimi K3 ​

Kimi K3 在 93 个 Attention Layers 中组合 69 层 Kimi Delta Attention(KDA)与 24 层 Gated MLA。KDA 用固定大小的 Recurrent State 处理大部分层,Gated MLA 周期性读取逐 token 的全局 KV Memory,从而在长上下文效率与精确回看能力之间折中。

text
93 Attention Layers
  ├─ 69 × KDA
  │    ├─ Short Convolution State
  │    └─ Fixed-size Recurrent State
  └─ 24 × Gated MLA
       ├─ Token-addressable Latent KV Cache
       └─ Output Gate

整体比例接近 3 × KDA + 1 × Gated MLA,但实际层位置由模型配置中的 kda_layers 与 full_attn_layers 指定,不应在推理实现中只用层号取模代替配置。

Kimi Delta Attention ​

KDA 属于 Linear Attention。它不为每个历史 token 保存独立 K/V,而是把历史持续写入固定大小的状态矩阵 St。其核心沿用 Delta Rule:先从旧状态读取 Key 地址上已有的 Value,再只写入预测误差。

设 αt 是细粒度遗忘门,βt 是写入强度。可将状态更新概括为:

S~t−1=Diag(αt)St−1v^t=S~t−1⊤kt,δt=βt(vt−v^t)St=S~t−1+βtkt(vt−S~t−1⊤kt)⊤,yt=St⊤qt

等价地,KDA 的状态转移矩阵可以写成 Diagonal-Plus-Low-Rank 形式:

St=(I−βtktkt⊤)Diag(αt)St−1+βtktvt⊤

与为每个 Head 使用单一衰减系数的粗粒度门控相比,KDA 的 αt 可以对状态通道施加不同衰减强度。状态大小不随 Sequence Length 增长,但历史已经聚合,单个旧 token 无法像 KV Cache 一样被独立寻址。

KDA 还维护 Q/K/V 的短卷积状态。Prefill 使用 Chunk-wise Parallel Kernel,单 token Decode 使用 Recurrent Kernel;两条路径必须产生一致的状态更新语义。

📄 Kimi K3:KDA Prefill 与 Decode Kernel
python
g = self.f_b_proj(self.f_a_proj(hidden_states))
g = rearrange(g, "... (h d) -> ... h d", d=self.head_dim)
beta = self.b_proj(hidden_states).float()

if mode == "chunk":
    output, recurrent_state = chunk_kda(
        q=q,
        k=k,
        v=v,
        g=g,
        beta=beta,
        initial_state=recurrent_state,
        output_final_state=True,
        use_gate_in_kernel=True,
        use_beta_sigmoid_in_kernel=True,
    )
else:
    output, recurrent_state = fused_recurrent_kda(
        q=q,
        k=k,
        v=v,
        g=g,
        beta=beta,
        initial_state=recurrent_state,
        output_final_state=True,
    )

cache_params.recurrent_states[self.layer_idx] = recurrent_state

Gated MLA ​

Gated MLA 保留 DeepSeek V3 MLA 的核心结构:每个 token 缓存低维 Latent KV,并执行能够精确读取历史位置的全局 Softmax Attention。Kimi K3 在 Attention Output 上增加输入相关的门控:

gt=σ(Wght)yt=gt⊙MLA(ht)

门控与 Attention Output 逐元素相乘,再进入 Output Projection。它让模型按 token 和特征维度调节全局 Attention 信息进入 Residual Stream 的强度。

📄 Kimi K3:MLA Output Gate
python
attn_output, _ = attention_interface(
    self,
    query_states,
    key_states,
    value_states,
    attention_mask,
    scaling=self.scaling,
)

attn_output = attn_output.reshape(batch_size, seq_length, -1)
if self.use_output_gate:
    gate = self.g_proj(hidden_states).sigmoid()
    attn_output = attn_output * gate
attn_output = self.o_proj(attn_output)

Hybrid Attention 的 Cache ​

两类层维护不同状态:

LayerCache / State是否随上下文长度增长能否精确读取旧 token
KDARecurrent State + 短卷积状态否否,历史已聚合
Gated MLA逐 token Latent KV是是

因此,Kimi K3 整机的 Cache 仍会随上下文增长,但只有 Gated MLA Layers 产生逐 token KV Cache。KDA Layers 承担大部分序列建模计算,Gated MLA Layers 周期性补充全局、可寻址的历史读取。

参考 ​

  1. Kimi K3: Open Frontier Intelligence
  2. Kimi K3 官方模型卡
  3. Kimi K3 官方配置
  4. Kimi K3 Attention 实现
  5. Kimi Linear: An Expressive, Efficient Attention Architecture