DeepSeek V4 MegaMoE Kernel 深度解析

前言 经典 MoE 的计算过程 在深入 MegaMoE 之前,先梳理一下经典 MoE(Mixture of Experts)层的完整计算流程。以一个具体配置为例: T = 8 # 当前 batch 中的 token 数 H = 7168 # hidden size I = 2048 # intermediate size(每个 expert 的 FFN 中间维度) E = 256 # 总 expert 数量 K = 6 # 每个 token 激活的 expert 数(top-K) 第一步:路由(Routing) 输入 hidden_states 形状为 [T, H](即 [8, 7168])。 通过 Gate 线性层: gate = hidden_states @ W_gate^T # W_gate: [E, H] → gate: [T, E] = [8, 256] # 每个 token 对每个 expert 的得分 对每个 token 施加 scoring 函数(如 softmax 或 sqrt(softplus)),然后取 top-K: ...

June 2, 2026 · 9 min · 1851 words

DeepSeek V4 MoE 量化技术详解

前言 本文整理自一次围绕 vLLM 代码库中 DeepSeek V4 MoE 模块的技术讨论,内容涉及 MXFP4 与 NVFP4 的量化方案对比、Block Quantized GEMM 的设计原理、FP4 packed 存储格式、以及 DeepGEMM 库中 FP8×FP4 在 Blackwell 硬件上的具体实现。 一、DeepSeek V4 MoE 核心优化概览 DeepSeek V4 的 MoE 模块在 vLLM 中的实现包含了大量优化: 优化 说明 DeepGEMM MegaMoE 融合 EP dispatch + L1 GEMM + SwiGLU + L2 GEMM + EP combine 为单 mega-kernel,NVLink 通信与计算重叠 FP4 (MXFP4/NVFP4) 权重量化 4-bit 浮点权重 + UE8M0 block scale Expert Parallelism 多后端 DeepEP、FlashInfer NVLink、MORI、NIXL 等多种 all-to-all 策略 Fused TopK Bias Routing sqrt(softplus) 得分函数、e_score_correction_bias、hash MoE EPLB 每层跟踪 expert 负载,动态重新分配 Fused MLA Kernel Q-norm + RoPE + KV quant + cache insert 融合为单 CUDA 核 MTP (Multi-Token Prediction) 共享 MoE 架构的 speculative decoding 二、MXFP4 与 NVFP4 的区别 DeepSeek V4 Flash 使用 FP4 权重,有两个可选方案:MXFP4 (OCP 开放标准) 和 NVFP4 (NVIDIA 私有格式)。切换由 HuggingFace config 中的 moe_quant_algo 字段控制。 ...

June 2, 2026 · 6 min · 1088 words

DeepSeek-v2 Routed Scaling Factor 应用时机详解

背景 DeepSeek-V2/V3 系列模型采用了 MoE(Mixture of Experts)架构,其中 routed_scaling_factor 是一个重要的超参数,用于缩放 routed expert 的输出。该系数来自模型 config,在 DeepseekV2MoE.__init__ 中初始化: self.routed_scaling_factor = config.routed_scaling_factor 默认值通常为 1.0,但 DeepSeek-V2 系列(如 deepseek-v2、deepseek-coder-v2)设置的典型值是 2.5 或 1.0,取决于具体子模型。 控制开关 在 vLLM 的 deepseek_v2.py 中,关键代码如下: apply_routed_scale_to_output = not self.is_rocm_aiter_moe_enabled routed_scaling_factor=self.routed_scaling_factor, apply_routed_scale_to_output=not self.is_rocm_aiter_moe_enabled, 这个 bool 值决定了 routed_scaling_factor 由谁处理——是 kernel 内部还是 runner 外部。 ...

June 1, 2026 · 2 min · 280 words

DeepSeek MLA 在 DCP 分布式环境中的 Prefill 阶段解析

前言 DeepSeek 提出的 MLA(Multi-head Latent Attention)通过将 KV 压缩到低维 latent 空间,大幅降低了推理时的 KV cache 开销。但在 DCP(Decode Context Parallel,即上下文并行)分布式环境下,MLA 的 prefill 阶段设计与 decode 阶段有显著差异。本文从实现角度展开分析。 什么是 DCP DCP(Decode Context Parallel)是一种将 KV cache 按序列维度切分到多个 GPU 的分布式策略。每个 rank 只持有完整 KV cache 的 1/dcp_world_size,从而减少单卡显存占用,支持更长的上下文。 与更常见的 DP(Data Parallel,扛并发)和 EP(Expert Parallel,分摊 MoE 参数显存)不同,DCP 解决的是单请求长上下文场景下 KV cache 放不下的问题。 MLA Prefill vs Decode:两条不同的路径 MLA 在 prefill 和 decode 阶段走了截然不同的计算路径: Prefill (forward_mha) Decode (forward_mqa) KV 形态 完整 MHA(N 头) Latent(1 头) Head dim P+R(~192) Lkv+R(~576) 计算特性 Sq ≈ Skv,计算密集 Sq ≪ Skv,避免显存搬运 Prefill 走 MHA 路径:kv_c 通过 W_UK/W_UV 解压成完整多头 K/V(N 个头),然后做标准的多头注意力。因为 prefill 时新 token 数和 context 长度在同一量级,展开 KV 做计算密集的 attention 是划算的。 ...

June 1, 2026 · 3 min · 557 words

DeepSeek Attention 中为什么除以 √d_k — 从代码到数学

引言 在 Transformer 的 Scaled Dot-Product Attention 中,有一个看似简单却至关重要的操作: scores = Q @ K^T / math.sqrt(d_k) 这个 ÷√d_k 几乎出现在每一个 Attention 实现中。DeepSeek 的 MLA(Multi-head Latent Attention)也不例外。本文从 DeepSeek V4 的 vLLM 实现代码出发,深入探讨这个缩放因子的数学动机、工程实现,以及 DeepSeek 特有的优化变体。 标准 Attention 中的缩放因子 Softmax 的"饱和"问题 原始 Attention 计算公式为: Attention(Q, K, V) = softmax(QK^T / √d_k) V 设 Q、K 的每个元素是独立同分布、均值为 0、方差为 1 的随机变量。对于向量 q 和 k(维度为 d_k),其点积的均值和方差为: E[q·k] = Σ E[q_i·k_i] = 0 Var(q·k) = Σ Var(q_i·k_i) = d_k 即点积的方差正比于 d_k。当 d_k 较大时(如 128、512),点积的绝对值会很大,导致 softmax 进入梯度极小的饱和区: 当某个 x_i 远大于其他值时,e^{x_i} 会主导分母,softmax 输出接近 one-hot,梯度趋近于 0,训练难以收敛。 ...

June 1, 2026 · 4 min · 721 words

DeepSeek MLA 中 QKV Head Dimension 的处理差异

引言 Multi-head Latent Attention(MLA)是 DeepSeek-V2/V3 系列模型中最核心的架构创新之一。它在标准 Multi-Head Attention(MHA)的基础上引入了低秩压缩,大幅降低了 KV cache 的显存占用,同时保持了与 MHA 相当的模型质量。 本文从 QKV head dimension 处理差异 这一视角切入,深入分析 MLA 的设计原理、vLLM 中的具体实现,以及这种设计带来的性能收益。 1. 标准 MHA 回顾 在标准 MHA 中,给定输入序列 X ∈ ℝ^{S×D},Q、K、V 通过三个独立的线性变换得到: Q = X @ W_Q → [S, H, d_head] K = X @ W_K → [S, H, d_head] V = X @ W_V → [S, H, d_head] 其中 d_head = D / H,三者完全相等。注意力计算为: Attention(Q, K, V) = softmax(Q @ K^T / √d_head) @ V → [S, H, d_head] 输出再经 W_O 映射回 D 维。这种 Q/K/V 共享同一 head dim 的设计深入人心,以至于很多人默认这是注意力机制的"必须要求"。 ...

June 1, 2026 · 5 min · 909 words

DeepSeek V3 MoE 模块计算与通信逻辑详解

概述 DeepSeek V3 的 MoE(Mixture of Experts)模块是其核心组成部分,采用 Shared + Routed Expert 架构。本文基于 vLLM 代码库,深入分析其计算流程、通信模式、量化方案以及性能优化策略。 ...

June 1, 2026 · 6 min · 1086 words