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

vLLM PCP/DCP 技术笔记

背景 vLLM 中引入了两个上下文并行维度——Prefill Context Parallel (PCP) 和 Decode Context Parallel (DCP)。本文是源码分析记录,覆盖配置入口、进程组初始化、通信模式、KV cache 布局、LSE 合并机制、各 attention backend 支持情况,以及一些数学推导。 ...

June 2, 2026 · 11 min · 2163 words

vLLM SP/AsyncTP/Quant 技术笔记

背景 vLLM 中实现了多种并行策略与编译优化。本文聚焦三条密切关联的技术线:Sequence Parallelism (SP)、Async Tensor Parallelism (AsyncTP) 与 量化 (Quantization) 的协同工作方式,涵盖概念辨析、GEMM-通信融合原理、量化感知改写以及配置细节。 ...

June 2, 2026 · 4 min · 787 words

vLLM GPU UBatchWrapper 中的 Barrier 机制解析

背景:什么是 UBatchWrapper 在 vLLM 的 GPU 推理引擎中,UBatchWrapper(位于 vllm/v1/worker/gpu_ubatch_wrapper.py)是一个模型包装器。它拦截对原始模型的调用,在内部将一次大 batch 的 forward 拆分成多个 micro-batch(ubatch),并利用多线程 + CUDA stream 实现计算与通信的重叠。 核心目标:解决 MoE 模型中 all2all 通信开销大的问题——让一个 ubatch 在做计算时,另一个 ubatch 的通信已经在背后并行执行。 线程模型与同步原语 threading.Barrier:集结号 UBatchWrapper 在初始化时创建一个 threading.Barrier: self.ready_barrier = threading.Barrier(num_ubatches + 1) threading.Barrier 不关心具体有哪些线程,只计数。内部维护一个计数器,每当有线程调用 barrier.wait(),计数器就 +1。当总数达到构造时指定的 parties 值(这里是 num_ubatches + 1),所有正在 wait() 的线程同时被释放,计数器归零。 这里的 +1 包含了 N 个 ubatch 线程 + 1 个主线程。 ready_barrier.wait() 在三处被调用: 文件 行号 调用方 gpu_ubatch_wrapper.py 261 主线程 在 _capture_ubatches 中 gpu_ubatch_wrapper.py 325 主线程 在 _run_ubatches 中 ubatching.py 56 每个 ubatch 线程 在 UBatchContext.__enter__ 中 少一个线程到达,所有人全部卡住。 ...

June 1, 2026 · 4 min · 776 words

mhc_pre_torch 的数学公式与 CUDA 代码解释

背景 mHC(multi-Head Combinatorial)是 DeepSeek V4 模型中引入的一种多头残差混合机制。它将传统 Transformer 中单一的残差向量扩展为 $M$ 个并行的残差副本(multi-head residual),并在每个 block 前后通过可学习的门控和组合矩阵对多头残差进行变换。 本文以 mhc_pre_torch 为核心,从数学公式出发逐行对照 PyTorch 代码,并延伸至 mhc_post_torch 和整个 mHC 流水线,帮助读者完整理解这一算子的设计思路与实现细节。 ...

June 1, 2026 · 5 min · 993 words