DeepSeek-V4 端到端推理 Pipeline 走读:多流残差、MQA 压缩与哈希路由

2026-07-29 基于 HF modeling_deepseek_v4.pyDeepseekV4Config 源码分析

DeepSeek-V4 不是 V3 的增量升级。这是一次根本性的架构重构——几乎每个组件都换了:

维度 DeepSeek-V3 DeepSeek-V4
隐藏维度 7168 4096(减半)
注意力机制 MLA(128 头,低秩 KV 压缩) MQA(1 个 KV 头,K==V 共享)+ CSA/HCA 时域压缩
每头维度 192(128 nope + 64 rope) 512(2.67×,nope 448 + rope 64)
残差连接 标准 residual: h = x + f(x) mHC 多流残差(4 条并行流,Sinkhorn-Knopp 双随机矩阵)
层数 61 43
前几层 Dense MLP(前 3 层) Hash-MoE(前 3 层,冻结路由)
每 token 激活专家 8/256 + 1 shared 6/256 + 1 shared
输出投影 标准 Linear Grouped Output Projection(8 组低秩压缩)

V4 的设计方向很明确:用一半的隐藏维度、更少的层数,通过更复杂的每层计算,在相同参数预算下获得更强的性能。 本文以 V4-Flash(285B 参数)的标准配置为舞台,跟踪一个 decode token 穿越 43 层 V4 的完整旅程。注意 V4-Pro(1.6T 参数)有 61 层(30 CSA + 31 HCA),架构设计相同但层数和参数规模更大。已有文章(DeepSeek 注意力架构进化)附录中的 61 层配置是针对 V4-Pro 的。

已有专文覆盖 DeepSeek 注意力从 MLA 到 CSA/HCA 的演进(DeepSeek 注意力架构进化)。本文聚焦于 forward pipeline 的完整数据流——各组件以什么顺序被调用、什么形状的 tensor 在传递、数据依赖关系如何——不重复展开注意力机制的数学推导。


一、舞台设定:DeepSeek-V4 的模型拓扑

单个 decode token 穿越 43 层 V4 的完整路径:

token_id: (1,)
  │
  ▼
Embedding: nn.Embedding(129280, 4096)      → hidden_states: (1, 4096)
  │
  ▼
  ┌─ 扩展为 hc_mult=4 条并行残差流 ────────────────────────┐
  │  hidden_states: (1, 4, 4096)                            │
  └─────────────────────────────────────────────────────────┘
  │
  ▼
┌─ Layer 0 (Hash-MoE + HCA, compress_rate=128) ──────────────┐
│  attn_hc → Attention(sliding 128 + HCA compressor) → mix   │
│  ffn_hc  → HashMoE(frozen routing)               → mix     │
└───────────────────────────────────────────────────────────┘
  │
  ▼
  ... Layers 1–2 (Hash-MoE + HCA) ...
  │
  ▼
┌─ Layer 3 (MoE + CSA, compress_rate=4) ─────────────────────┐
│  attn_hc → Attention(sliding 128 + CSA compressor+Indexer)│
│  ffn_hc  → MoE(top-6 from 256)                            │
└───────────────────────────────────────────────────────────┘
  │
  ▼
  ... Layers 4–42 (CSA/HCA interleaved, MoE) ...
  │
  ▼
  ┌─ 折叠 hc_mult 条流 → 1 条流 ────────────────────────────┐
  │  hidden_states = hyper_head(hidden_states) → (1, 4096)   │
  └─────────────────────────────────────────────────────────┘
  │
  ▼
Final RMSNorm                                 → hidden_states: (1, 4096)
  │
  ▼
LM Head: nn.Linear(4096, 129280)             → logits: (1, 129280)
  │
  ▼
Sampler                                       → next_token_id: (1,)

以上是整个模型的宏观流水线。下面是一层 CSA(c4a)decode 的微观视角——vLLM 官方博客的算子图展示了一次 attention forward 中所有算子的调用顺序、融合边界(彩色轮廓)和 CUDA 多流分区(蓝色=默认流,琥珀色=索引器流):


c4a decode 路径:算子图与算子融合及多流分区(来源:vLLM 博客

关键配置(来自 DeepseekV4Config):

参数 含义
hidden_size 4096 隐藏维度
head_dim 512 每头维度(远大于 V3 的 192)
num_hidden_layers 43 总层数
num_attention_heads 64 Q 头数
num_key_value_heads 1 KV 头数(MQA:所有 Q 头共享 1 个 KV 头)
q_lora_rank 1024 Q 低秩投影维度
sliding_window 128 滑动窗口大小
hc_mult 4 mHC 并行残差流数量
hc_sinkhorn_iters 20 Sinkhorn-Knopp 迭代次数
o_groups / o_lora_rank 8 / 1024 分组输出投影:8 组 × 1024 维
n_routed_experts 256 路由专家总数
n_shared_experts 1 共享专家数
num_experts_per_tok 6 每 token 激活的专家数
routed_scaling_factor 1.5 路由权重缩放因子
moe_intermediate_size 2048 每个专家的 FFN 中间维度
compress_rates CSA=4, HCA=128 压缩率:CSA 每 4 token 压 1 条,HCA 每 128 token 压 1 条
index_n_heads 64 Lightning Indexer 头数(CSA 专用)
index_head_dim 128 Indexer 每头维度
index_topk 512 Indexer 每 query 保留的 top-k 压缩条目数
max_position_embeddings 1048576 最大上下文长度 1M
num_nextn_predict_layers 1 MTP 头数量

二、第一阶段:Embedding — 从 token ID 到 4096 维向量

把 token ID 想象成图书馆的索书号。Embedding 层是一张 129280 行的对照表,每个索书号对应一个 4096 维向量。V4 的隐藏维度是 V3 的一半(4096 vs 7168)——这不是”省钱”,而是”用更紧凑的空间表达更丰富的语义”。配合 mHC 的 4 条并行残差流,有效残差容量反而扩展到了 4 × 4096 = 16384 维。

# modeling_deepseek_v4.py
# Embedding: 129280 × 4096
self.embed_tokens = nn.Embedding(config.vocab_size, config.hidden_size)
hidden_states = self.embed_tokens(input_ids)  # → (1, 4096)

TP>1 时,embedding 按词表维度切分——129280 词表在 TP=8 下每个 rank 持有 16160 行——查表后通过 all-reduce 还原。


三、第二阶段:Hyper-Connection — 用 Sinkhorn 矩阵替代标准残差

这不是标准 Transformer 的残差连接。V4 的每一层不接收一个 (1, 4096) 的向量,而是接收 4 条并行的残差流 (1, 4, 4096)。进入第一层之前,embedding 输出被扩展为 4 条完全相同的流——它们从此分道扬镳,在 43 层旅程中被 mHC 持续混合、重组。

mHC 的直觉:标准残差 y = x + f(x) 中,所有前置层的贡献权重都是 1——无论那一层对当前任务有没有用。mHC 让每层学习一个 4×4 的双随机矩阵(行和=1,列和=1),决定第 j 条残差流中的信息有多少流入第 i 条流——类似于把残差连接变成了一个可学习的路由器。

3.1 mHC 的三输出:pre、post、comb

DeepseekV4HyperConnection.forward() 接收 4 条流 [B, S, 4, 4096],返回三个量(实际签名为 → (post, comb, collapsed)):

输出 形状 作用
post [B, S, 4] 将子层输出分配到 4 条流(权重范围 [0, 2])
comb [B, S, 4, 4] 4×4 混合矩阵(Sinkhorn-Knopp 投影到双随机流形)
collapsed [B, S, 4096] pre 加权折叠 4 条流 → 1 条,供子层使用(pre 是内部变量)
# modeling_deepseek_v4.py, DeepseekV4HyperConnection.forward() (simplified)
hc = self.hc_mult  # = 4
flat = self.input_norm(hidden_streams.flatten(start_dim=2).float())
pre_w, post_w, comb_w = F.linear(flat, self.fn).split([hc, hc, hc*hc], dim=-1)
pre_b, post_b, comb_b = self.base.split([hc, hc, hc*hc])
pre_scale, post_scale, comb_scale = self.scale.unbind(0)

pre = torch.sigmoid(pre_w * pre_scale + pre_b) + self.hc_eps
post = 2 * torch.sigmoid(post_w * post_scale + post_b)
comb_logits = comb_w.view(*comb_w.shape[:-1], hc, hc) * comb_scale + comb_b.view(hc, hc)
comb = torch.softmax(comb_logits, dim=-1) + self.hc_eps
comb = comb / (comb.sum(dim=-2, keepdim=True) + self.hc_eps)  # 初始列归一化
for _ in range(self.hc_sinkhorn_iters - 1):   # 共 20 步(含初始列归一 + 19 轮)
    comb = comb / (comb.sum(dim=-1, keepdim=True) + self.hc_eps)
    comb = comb / (comb.sum(dim=-2, keepdim=True) + self.hc_eps)

collapsed = (pre.unsqueeze(-1) * hidden_streams).sum(dim=2).to(hidden_streams.dtype)
return post, comb, collapsed

3.2 mHC 如何嵌入每一层

每一层有两次 mHC 调用——attention 之前(attn_hc)和 FFN 之前(ffn_hc)——各自有独立的可学习参数。以 attention 为例(DeepseekV4DecoderLayer.forward()):

# 步骤 1:mHC 折叠 → attention → mHC 展开
post, comb, collapsed = self.attn_hc(hidden_states)        # 4流→1流
attn_output = self.self_attn(self.input_layernorm(collapsed))
hidden_states = post * attn_output + comb.T @ hidden_states # 1流→4流

# 步骤 2:mHC 折叠 → FFN → mHC 展开(同上结构)
post, comb, collapsed = self.ffn_hc(hidden_states)
mlp_output = self.mlp(self.post_attention_layernorm(collapsed))
return post * mlp_output + comb.T @ hidden_states

对比标准残差 h = h + attn(norm(h)),mHC 的版本是 h = post ⊙ attn(norm(collapse(h))) + comb.T @ hpostcombcollapsed 的权重不是固定的——它们是 hidden_states 的可微函数。mHC 本身是一个微型神经网络,每层学习如何路由和混合信息。 参数开销:单个 HC 的 fn 矩阵为 (2+hc_mult)×hc_mult × hc_mult×hidden = 24 × 16384 ≈ 393K params(~768 KB BF16),每层 attn_hc + ffn_hc 共约 ~1.5 MB——43 层合计约 65 MB,不到 V4-Flash 总参数量的 0.01%。


四、第三阶段:Attention — MQA + 双支路(滑动窗口 + 压缩)

V4 的注意力彻底告别了 MLA。它回到 MQA(Multi-Query Attention,1 个 KV 头,64 个 Q 头共享),但用一个全新的压缩机制解决 KV cache 问题。每层 attention 包含两条并行支路:

  • 滑动窗口支路:保留最近 128 个 token 的完整 KV(标准 MQA,不做压缩)
  • 压缩支路:将更早的 token 按固定间隔压缩为紧凑的”摘要条目”

两条支路的 KV 拼接起来构成完整的 attention 上下文——当前 token 既能精确关注邻居,又能通过压缩摘要高效回顾历史。

4.1 Q 的低秩投影

V4 的 Q 仍然使用低秩投影——这点继承了 V3/MLA 的思路,但实现不同。q_lora_rank=1024head_dim=512

# DeepseekV4Attention.__init__()
q_residual = self.q_a_norm(self.q_a_proj(hidden_states))      # 4096 → 1024
q = self.q_b_proj(q_residual)                                 # 1024 → 64×512=32768
q = q.view(1, 64, 512)                                        # 64 heads, 512 dim each
q = self.q_b_norm(q)
q = apply_rotary_pos_emb(q, cos, sin)

对比 V3:V3 的 Q 低秩维度是 1536,每头 192 维(128 nope + 64 rope),V4 是 1024 → 每头 512 维(448 nope + 64 rope,仅 rope 部分参与 RoPE)。V4 的每头维度大得多——这是 V4 降低头数(128→64)但扩大每头维度(192→512)的设计选择。

4.2 KV 的 MQA 投影

与 V3/MLA 最大的不同:V4 没有 kv_lora_rank、没有 kv_b_proj、没有 kv_c 压缩态。 它直接用标准 MQA:

# 单次投影,共享 K 和 V:4096 → 512(唯一 KV 头)
self.kv_proj = nn.Linear(config.hidden_size, self.head_dim, bias=False)

因为只有 1 个 KV 头且 K==V 共享同一个张量(源码 modeling_deepseek_v4.py:824 注释:”sliding where K==V”),KV cache per token 就是 512 × 2 bytes = ~1 KB。对于滑动窗口(128 token),精确 KV 部分只占用 ~128 KB——极小的固定开销。长程信息交给压缩支路处理。

4.3 滑动窗口支路

每层 attention 始终保留最近 sliding_window=128 个 token 的完整 KV。当前 token 在 (1, 64, 512) 的 Q 与窗口内的 K (128, 1, 512)(MQA,1 个 KV 头)做标准 attention。窗口内的注意力是精确的、密集的——不损失任何信息。

# 滑动窗口:Q 关注窗口内所有 token
# 窗口内 KV: (128, num_kv_heads=1, head_dim=512)
# Q: (1, 64, 512), K: (128, 1, 512) → broadcast to 64 Q heads
# score: (64, 1, 128)

4.4 压缩支路:CSA 与 HCA

每层有 3 种 attention 类型之一(由 config.layer_types 逐层指定,43 个元素的列表)。注意命名约定的对应:论文中的 CSA = vLLM 源码中的 c4aHCA = c128a,本文使用论文命名但标注了压缩率以消除歧义:

类型 压缩率 索引器 默认使用情况
sliding_attention 无压缩 可选,但默认配置中不使用
HCA 128:1 默认配置的前 2 层,后续与 CSA 交替
CSA 4:1 Lightning Indexer 默认配置中与 HCA 交替

滑动窗口(128 token)是所有类型的公共基础——即使是 HCA/CSA 层也保留窗口内的完整 KV。HCA/CSA 在窗口之上增加了压缩支路:HCA 每 128 token 压 1 条摘要,CSA 每 4 token 压 1 条并用 Indexer 做稀疏检索。默认配置中前 3 层为 HCA(前 2 层 bootstrap + 交替以 HCA 起始),后续 CSA 与 HCA 交替排列。

以下动画演示了 CSA(c4a)注意力处理 13 个 token 的过程——压缩 token(彩色方块)如何覆盖滑动窗口外的历史,Indexer 如何选出最相关的几条参与注意力计算:


c4a 注意力动画:压缩 token(彩色方块)与滑动窗口(灰色方块)的协作(来源:vLLM 博客

HCA(heavily_compressed_attention,compress_rate=128)

每 128 个 token → Compressor(kv_proj + gate_proj)
  → 1 条压缩摘要 (head_dim=512 的 K 和 V)
  → 追加到 compressed_kv buffer
  → sliding window (128) + compressed buffer (seq_len/128 条) → attention

HCA 的压缩率极高——1M 上下文下压缩条目仅 ~8000 条(vs 1M 条原始 token)——内存节省 99.2%,同时保留了全局视野。

CSA(compressed_sparse_attention,compress_rate=4): CSA 在 HCA 基础上增加了 Lightning Indexer——这是一个辅助注意力模块,负责从全部压缩条目中找出与当前 query 最相关的 top-512 条,实现稀疏检索:

每 4 个 token → Compressor 产 1 条压缩摘要 + indexer KV
Indexer: 64 头 × 128 维,对全部压缩条目做注意力
  → 选 top-512 条最相关的压缩条目
  → 滑动窗口 (128) + 选中的 512 条压缩摘要 → attention

CSA 的压缩率适中(4:1),配合 Indexer 的精准检索,在精度和效率之间取得平衡。在默认配置中 CSA 与 HCA 交替排列,两者数量相当。

4.5 分组输出投影

Attention 输出 (1, 64×512=32768) 不是直接投影回 4096,而是先按 8 组做分组低秩投影:

# 8 groups,每组 64/8=8 heads
# 每组内:8×512=4096 → o_a_proj → 1024 → o_b_proj → 4096
# o_a_proj (per-group): 4096 → 1024, total 8×4096×1024 params
# o_b_proj: 8×1024=8192 → 4096
grouped = attn_output.view(1, 8, -1)      # (1, 8 groups, 4096 per group)
grouped = self.o_a_proj(grouped).flatten(2) # (1, 8192)
output = self.o_b_proj(grouped)             # (1, 4096)

分组输出投影的核心假设:不同组的注意力头在输出空间中是近似解耦的——组内 heads 共享一个低秩瓶颈,组间独立。这比 V3 的全局 O 投影参数量更少(8×4096×1024 + 8192×4096 ≈ 67M vs 32768×4096 ≈ 134M),参数量减半。

4.6 KV Cache:V3 与 V4 的对比

V3 用低秩压缩(每 token ~1.15 KB),V4 用 MQA + 时域压缩:

V3: kv_c (512) + k_rope (64) = 576 dim/token → ~1.15 KB/token
    → 61 层 × 1M token = ~70 GB(1M 上下文)

V4: MQA K==V 共享,每 token 512 dim → ~1 KB/token
    滑动窗口 128 token = ~128 KB 精确 KV
    + HCA 压缩条目 (1M/128 ≈ 8000 条 × 512 dim × 2 bytes) ≈ 8 MB 压缩 KV
    → 43 层 × (~128 KB + ~8 MB) ≈ 350 MB(1M 上下文)

V4 的 KV cache 不再是每 token 独立存储——在长序列下,压缩摘要主导了存储。上述计算采用纯 HCA 层的简化估算(43 层约 350 MB);若计入 CSA 层(c4a indexer + 4:1 压缩主 KV,1M 上下文下每层约 320 MB),实际总量在 GB 级别。完整数据见 vLLM 博客附录:V4-Pro(61 层混合配置)1M 上下文下 BF16 KV cache 约 9.62 GiB。生产部署中对滑动窗口使用 FP8(~584B/token)并对索引器使用 FP4,可进一步缩减。

Prefill 的差异:输入形状从 (1, 4096) 变为 (N, 4096)。滑动窗口支路逐 token 追加 KV(同标准 MQA);压缩支路每 compress_rate 个 token 触发一次 compressor forward,产出一条压缩摘要。CSA 的 Indexer 在 prefill 末尾对整个压缩库做一次全局 top-512 检索,建立首 token 的稀疏注意力索引。


五、第四阶段:从 Hash-MoE 到 MoE

V4 的 FFN 有两种类型,由 config.mlp_layer_types 逐层指定:前 3 层 hash_moe,后续 40 层 moe

5.1 Hash-MoE:冻结的哈希路由

Hash-MoE 的路由不依赖 hidden_states——它直接查表:

# 根据 input_ids 查哈希表得到专家 ID
# tid2eid: [vocab_size] → expert_id(从 checkpoint 加载,冻结)
expert_id = self.tid2eid[input_ids]  # 每个 token → 1 个专家

为什么前 3 层用 Hash-MoE? 浅层 hidden_states 语义分化不够,标准 MoE 的路由信号不可靠(和 V3 的前 3 层 dense 同样的问题)。但 V4 的解决方案不是退回到 dense MLP,而是用 Hash-MoE——将路由决策绑定到 token 本身而非 hidden_states。同一个 token(如”巴黎”)在所有上下文中始终路由到同一个专家——这让专家学到的是”token 级知识”(词法、常见搭配),而非”语义级知识”(需要上下文判断)。后 40 层标准 MoE 专注于后者。

Hash-MoE 的专家计算与标准 MoE 完全相同(gate_proj → up_proj → SiLU → down_proj),只是路由方式不同。

5.2 标准 MoE:6/256 路由

后续 40 层的路由是经典的 top-k MoE:

hidden_states (1, 4096) → gate → router_logits (1, 256)
  → 直接 top-6(scoring_func="sqrtsoftplus",无分组路由)
    → 6 个专家各自 gate_up → SiLU → down(每专家中间维度 2048)
      → 路由权重乘以 routed_scaling_factor=1.5
        → 加权和 + shared_expert(hidden)

与 V3 的关键差异:V4 激活 6 个专家(而非 8 个),routed_scaling_factor=1.5(而非 2.5),每专家计算量相同(中间维度 2048)。总激活计算量约 6 × 2048 + 2048 ≈ 14336,略低于 V3 的 8 × 2048 + 2048 ≈ 18432——这与 V4 隐藏维度减半(7168→4096)的设计一致:更小的模型、更少的每层计算、但 256 倍的参数容量不变。


六、第五阶段:Hyper-Head 折叠 → LM Head

6.1 Hyper-Head:4 流 → 1 流

经过全部 43 层后,hidden_states 仍是 4 条并行流 (1, 4, 4096)。进入 final norm 和 lm_head 之前,需要折叠为 1 条流。这由 DeepseekV4HyperHead 完成——一个专门的 mHC 模块,负责终局融合:

# 最后一个 mHC,将 4 流融为 1 流
hidden_states = self.hc_head(hidden_states)  # (1, 4, 4096) → (1, 4096)

6.2 Final Norm + LM Head

折叠后的 hidden_states 经过最后一次 RMSNorm,然后进入标准 LM Head:

hidden_states = self.norm(hidden_states)          # (1, 4096)
logits = self.lm_head(hidden_states)              # (1, 129280)

采样出的 next_token_id 成为下一轮 decode 的输入——同时也是下一轮 Hash-MoE 层的路由输入(前 3 层用 input_ids 做哈希路由)。


七、第六阶段:MTP — Self-Speculation

MTP 的原理已有专文(MTP 多 Token 预测),这里简化为它在 V4 forward pipeline 中的位置。

DeepSeek-V4 配置 num_nextn_predict_layers=1(1 个 MTP 模块)。MTP forward 发生在主模型 forward 之后、采样之前,读取多个中间层的 hidden states 来预测后续 token:

Step T:   主 forward → sampled token t_{T+1}
          → MTP forward → 一批 draft token 候选 d1...dk

Step T+1: 输入 [..., t_T, t_{T+1}, d1...dk](draft tokens 拼接进输入)
          主 forward → 并行验证 d1...dk,同时产生 t_{T+2}

MTP 在 V4 中的作用与 V3 相同——通过 self-speculation 在低熵场景下实现约 1.5× 的吞吐提升。V4 的 MTP 模块需要适配 mHC 多流架构和 CSA/HCA 压缩 cache 的状态管理,但其核心 speculative decoding 流程与 V3 一致。


八、完整时间线:一个 token 的延迟拆解

以下基于 H100 单卡的近似 profile(受 batch size、序列长度、EP 通信等因素影响):

一个 decode token 的完整旅程(~8ms,H100, TP=1):

  Embedding:           ~0.05ms  ▏
  mHC (attn+ffn, ×2):  ~0.02ms  ▏ (每层各 2 次 Sinkhorn)
  Layer 0-2 (Hash-MoE+HCA/CSA):  ~0.12ms × 3 ≈ 0.36ms   ▌
  Layer 3-42 (MoE+CSA/HCA):     ~0.18ms × 40 ≈ 7.2ms   ▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌
  Hyper-Head:          ~0.02ms  ▏
  Final Norm + LM:     ~0.1ms   ▌
  Sampling:            ~0.1ms   ▌
  ─────────────────────────
  总计 ~7.9ms

每层内部延迟分配(以 CSA 层为例):

  attn_hc (Sinkhorn 20 iters):  ~10μs   ▏
  Q 投影 (q_a + q_b):           ~10μs   ▏
  KV 投影 (MQA K==V, 1 head):     ~2μs   ▏  ← V3 的 MLA 投影 ~25μs
  Sliding window attention:     ~15μs   ▌
  CSA compressor + indexer:     ~25μs   ▌▌  ← V4 独有的压缩开销
  Grouped output projection:    ~10μs   ▏
  ffn_hc (Sinkhorn):            ~10μs   ▏
  MoE FFN (6 experts):         ~110μs   ▌▌▌▌▌▌▌▌▌
  ─────────────────────────
  总计 ~190μs / CSA layer

延迟热点仍然是 MoE FFN(~58%),但 V4 增加了两个新的显著开销:CSA compressor/indexer(~13%)和 mHC Sinkhorn 迭代(~10% 合计)。这反映了 V4 的设计权衡——用更多每层计算换取更少的层数(43 vs 61)。


九、总结

回顾一个 token 穿越 43 层 V4 的旅程:

  • Embedding:token ID → 4096 维,扩展为 4 条并行残差流
  • mHC(每层 2 次):学习 4×4 双随机矩阵 → 折叠 4 流为 1 → attention/FFN → 展开回 4 流。这是 V4 区别于所有 Transformer 变体的核心创新——残差连接不再是 x + f(x),而是一个可学习的多流路由器。
  • Attention(MQA K==V + 双支路):Q 低秩投影(4096→1024→64×512),K 和 V 共用同一个 512 维 MQA 头。滑动窗口(128 token)提供精确注意力,压缩支路(CSA 4:1 + Indexer top-512,HCA 128:1)覆盖全部历史。
  • Hash-MoE(前 3 层)→ MoE(后 40 层):哈希路由绑定 token→专家(token 级知识),标准 top-6 路由依赖 hidden_states(语义级知识)。
  • Hyper-Head + LM Head + MTP:4 流折叠为 1 流 → final norm → 129280 logits → 采样。MTP 在主 forward 后预测 draft tokens。

V4 的设计哲学是 “少即是多”。隐藏维度减半(4096)、层数减少(43)——但通过三个机制将容量和表达能力补回来:mHC 的 4 条并行残差流(有效残差容量 ×4),MQA + 时域压缩的 KV cache 管理(1M 上下文 ~350 MB),以及 Hash-MoE 的 token 级知识专业化。与 V3 的 MLA 解决”KV cache 存储”问题不同,V4 的 CSA/HCA 解决的是”KV cache 检索”问题——历史 token 太多,无法全部精确查找,但可以通过压缩摘要 + 稀疏索引找到最有价值的那一小部分。


延伸阅读