跳转至

1-Distributed Parallelism

Ascend DeepEP V2 Elastic Dispatch

导言

理解 elastic dispatch,需要把 Python 接口、native 调用链、对称内存申请和 device kernel 放在同一条执行路径中阅读。本页基于源页面收录的 cf9f87a51854ac20d608f683979171cb1fc65c69 版本证据,通过交互式 DAG、函数下钻和源码定位建立这些层次之间的对应关系。

核心边界是:host 路径与容量预算不代表 device 数据搬运已经实现。页面保留占位 kernel、缺失的数据布局与同步风险提示,帮助读者辨认已有实现和待补齐部分。

Ascend DeepEP Dispatch Code Walkthrough

导言

阅读 4357 行 deepep_moe_dis_dispatch.h 时,最大的困难不是找到某个函数,而是持续维护 E2E 阶段、函数调用和具体源码行之间的对应关系。静态长文适合建立概念框架,却不便于在多条并行执行路径之间反复定位。

本页将同一份 Ascend C 参考实现组织为三轨联动工作区:左侧展示 Full-Mesh dispatch 的端到端执行 DAG,中间拆解当前函数的调用和分段逻辑,右侧保留完整源码。读者可以从阶段进入函数、从调用跳转到被调函数,也可以通过搜索和行号反向追踪同步协议与数据流。

Ascend DeepEP Ref Dispatch SIMT

导言

MoE dispatch 的困难并不只是把 token 从一张卡搬到另一张卡,而是要在 Top-K 路由运行时才确定的前提下,同时解决槽位分配、跨核协作、远程写入、完成通知和接收端连续排布。如果只盯着某个拷贝循环,很容易忽略控制面和同步协议才是这份实现的骨架。

本文以 deepep_moe_dis_dispatch.h 的 4357 行 Ascend C 参考实现为对象,从 SIMT 线程模型和 Full-Mesh 通信窗讲起,沿“本地打包 → 生成并提交 URMA WQE → doorbell 触发 → flag/count 对账 → 前缀和定位 → 输出重排”还原完整执行路径。页面把关键函数、内存布局、时序约束和可验证的优化方向放到一张连续地图中,帮助初学者建立从源码行号到通信机制的对应关系。

Ascend DeepEP MoE Dispatch Optimization

导言

我面对的是一个很具体、也很容易被“理论带宽”带偏的问题:Ascend DeepEP 的 MoE dispatch 吞吐只有硬件理论值的一半,128P 跨机场景尤其明显,而且系统里还有两层路由。麻烦在于,我既不熟悉 MoE dispatch 的接口与数据协议,也没写过典型 URMA/UDMA 算子,更不知道应该在哪里计时、打印和判断瓶颈。

这篇文章不从零散优化技巧出发,而是沿一条 token 的真实旅程,依次读懂 Python 接口、Host 侧 workspace/notify、Device 侧 AIV/UDMA/QP、目标 rank 的接收布局与反向 combine;再把 ascend_deepep、海思 hierarchy 和 MoonEP 的 peer 调度放进同一张拓扑图。最终目标不是立即猜出一个“神奇参数”,而是建立一条可证伪的优化路线:先区分数据面、控制面和同步面,再判断 128P 下真正撞到的是字节带宽、WQE 提交率、P 维路由扫描、拓扑扇出还是最慢 rank 的尾延迟。

Attention Cache and Sequence Parallelism

导言

KV cache 最容易造成的误解,是把所有名为 K/V 或 state 的张量都看成同一种“缓存”。事实上,训练时为反向传播保留的 K/V activation、推理时跨 decode step 存活的 KV cache、GDN 跨 token 改写的固定状态,生命周期和分布式处理都不同。

本文从一次 token 生成开始,逐对象解释 MHA、DSA 与 GDN 保存什么,再讨论 CP、USP 切开长序列后,临时 activation 和持久 cache 分别需要怎样的通信。

DeepSpeed Memory and Parallelism

导言

“显存不够”不是一个足够精确的诊断。可能是优化器状态常驻 GPU,可能是 ZeRO-3 跨节点通信暴露,也可能是单层矩阵本身无法放进一张卡。ZeRO-Offload、ZeRO++、MixZ++ 和 AutoTP 分别处理这四类问题,不能把它们当成同一开关的不同档位。

Kimi K3 NPU Training

导言

Kimi K3 的 NPU 适配不是给现有 MLA-MoE 模型换一组配置。它同时引入 Kimi Delta Attention(KDA)、Block Attention Residuals(AttnRes)和 Stable LatentMoE,分别改变层内状态、跨层残差和专家通信。

截至 2026 年 7 月 20 日,官方已确认 K3 是 2.8T 参数、原生多模态、1M 上下文、896 专家激活 16 个,并采用 3× KDA + 1× Gated MLA;但完整权重、精确 config 和技术报告仍待发布。因此本文严格区分 已确认事实、组件证据、工程推导和发布后必验项,目标是形成可执行的 NPU bring-up 与性能优化计划,而不是制造一份猜测配置。

VeRL Backend Parallelism

导言

判断并行能力不能只搜索配置名。一个并行轴至少要经过 配置校验、process group/device mesh、模型计算、loss/backward 和目标训练流程,才能算后端支持。

截至本文固定的 verl commit,结论最明确的一项是:原生 FSDP2 支持 Ulysses Sequence Parallel(USP),但不支持 Expert Parallel(EP)和 Context Parallel(CP)。如果希望 FSDP2 同时使用 EP,应选 VeOmni;如果需要 TP、PP、EP、CP 的完整模型并行组合,应选 Megatron。

XTuner Domino EP

导言

XTuner 的 Domino EP 不是一种新的 EP 通信算子,而是位于 MoE 层内部的跨微批调度方法:把多个原本独立做梯度累积的 micro-batch 一起送入模型,用异步通信流把一个 micro-batch 的 token dispatch/combine 与另一个 micro-batch 的专家计算重叠。

普通 EP 定义专家如何切分;All-to-All、DeepEP、AGRS 决定 token 如何搬运;Domino EP 决定多个 micro-batch 如何交错;MC2 则把相邻通信和矩阵乘融合进一个算子。只有先分清这些层次,才能正确讨论它们的优劣和组合关系。

HybridEP 论文进一步提出了一个更上游的问题:跨数据中心带宽太低、通信已经无法完全隐藏时,是否还应坚持“专家不动、所有 token 都跨域搬运”?它通过比例 \(p\)token All-to-All压缩 expert AllGather 之间选择,改变的是通信对象与专家放置,而不是给 DeepEP 或 MC2 换一个名字。

2026 年 8 月的增量观察再补两层:MoonEP 与 UltraEP 都根据当前 micro-batch 的真实路由结果复制热点 expert,但 MoonEP 自己拥有 dispatch/combine 并追求每 rank 固定 S×K 行,UltraEP 则把配额规划、跨层副本 buffer 和权重/梯度同步做成独立运行时,继续复用外部 dispatcher 与 Grouped GEMM。HyperParallel-MoE 则在 Ascend A3 上把 Dispatch、两次 GMM、SwiGLU 和 Combine 编译成 AIC/AIV 瓦片任务流。这些路线分别回答“热点怎么摊平”和“单个 MoE-FFN 怎么细粒度交错”,都不是 XTuner 当前已有开关。