Zijie Yan and Hongbin Liu
NVIDIA
内存优化 (✓):
通信优化:
计算优化:
提供端到端的可复现示例
幻灯片对比了三个大型语言模型:LLAMA 70B,Mixtral-8x7B和DeepSeek-V3。
LLAMA 70B:
Mixtral-8x7B 47B-A13B:
DeepSeek-V3 671B-A37B:
关键点:
DeepSeek-V3 (DSV3) 模型超参数:
DeepSeek-V3模型引入了多项改变,均已在MCore中得到支持:
静态内存与激活内存:
内存瓶颈: 即使在1024个GPU上使用3D并行,DSV3训练时每个GPU的激活内存仍然超过80GB。
密集的通信:
稀疏计算:
使用MTP进行收敛性测试
DeepSeek-V3 微调的损失曲线:
上图展示了从传统的AlltoAll令牌分发器到简化的DeepEP分发器的演进,分为两个阶段:跨节点通信和节点内通信。右侧表格数据显示,DeepEP显著降低了不同EP规模下的MoE层延迟。
核心思想:将 MoE 层的并行映射与密集层的并行映射解耦。
通信组布局:
[PP x [ DP x CP x TP ]][PP x [ ExpertDP x EP x ExpertTP* ]]接口设计:
DSV3(DeepSeek-V3)用例:
TP2DP64。TP1EP64DP2。图示:下图展示了在4个Rank上,Attention层采用4路张量并行(TP4),而MoE层则采用4路专家并行(EP4),体现了并行策略的解耦。
新的输出丢弃式检查点 (output-discarding checkpointing):
应用范围:
效果: 这些模块的重计算可以显著减少内存使用,且对性能影响有限。
--recompute-granularity selective --recompute-modules [submodules1, submodules2, ...][core_attn, mlp, moe, moe_act, layernorm, mla_up_proj]unpermute操作。对于DeepSeek模型(TopK=8),这个被保存的张量占用了大约25 GB。probs(概率)的乘法操作放入MLP的激活函数中。unpermute的已保存张量可以被释放,并在反向传播中重新计算。性能提升:
格式支持: 支持SBHD和THD格式。
上图右侧展示了Q和KV路径上的RoPE操作被融合成一个单一的核函数。左侧表格量化了融合前后的延迟,显示出显著的加速比。
上表比较了DeepSeek的性能分析数据、cuDNN 9.7和cuDNN 9.11.0.28在Fused Attention上的延迟。结果显示,最新版本的cuDNN性能最佳,实现了1.03倍至1.07倍的性能提升。
pipeline_model_parallel_layout 是一个灵活的 API,用于定义流水线并行分区,这对于非均衡模型的负载均衡至关重要。PP8VPP4(8路流水线并行,4路虚拟流水线并行)时,可以设置如下布局:--pipeline-model-parallel-layout="Et*3|(tt|)*29m|L"布局解析:
embedding + 3个 decoder 层decoder 层mtp 层loss 计算该图表展示了如何将不同数量的层非对称地分配到不同的流水线阶段和GPU上,以实现负载均衡。
以下表格展示了在H100 GPU上,通过一系列优化逐步提升DeepSeek-V3训练性能的过程。
注:基准测试中临时使用了强制路由;仅供技术讨论。
这张幻灯片提供了一系列用于优化 DeepSeek-V3 训练性能的推荐参数配置。
为了方便客户复现性能,MCore 提供了一个模型库。
特点:
现有方法:
操作级重叠 (OP-level overlap): 将 AllToAll 与专家 MLP 计算重叠。
DualPipe (批次级重叠, Batch-level overlap): 重叠不同微批次(micro-batches)的计算和通信。
模型与策略: 下图流程展示了不同模型(如 Deepseek-v3, snowflake arctic, GPT4/Grok-2, Mixtral-8x7B)适用的不同重叠策略。
策略一(上图):
策略二(下图,合并的 FWD-BWD):
关键特性:
该策略因其内存效率而被采纳(由绿色对勾标记)。
设置:
TP2EP64PP1_mbs1gbs2048,在 128 个 H100 GPU上运行。性能数据:
结论:
设置:
TP2EP64PP8VPP4_mbs1gbs8192,在 1024 个 H100 GPU上运行。结果:
图表: A2A 重叠在 DeepSeek-V3-no-MTP 模型上的加速效果。
该图示展示了在1F1B流水线调度中,AllToAll通信与计算的重叠情况。时间线被分为四个部分:
延迟计算公式如下:
(p-1)/v * (F + B)(p(v-1)+1)/v * (F + B)(mv-(p(v-1)+1))/v * (F&B)(p-1)/v * (F + B) + (p(v-1)+1)/v * (F + B) + (mv-(p(v-1)+1))/v * (F&B) = p(F + B) + (m - p)(F&B) + (p-1)/v * (F&B)其中:
* p: 流水线并行大小 (pipeline parallel size)
* v: 虚拟流水线并行大小 (virtual pipeline parallel size)
* F: 流水线并行rank的每个微批次的前向传递时间 (forward time per micro batch of one pipeline parallel rank)
* B: 流水线并行rank的每个微批次的后向传递时间 (backward time per micro batch of one pipeline parallel rank)
* m: 微批次数量 (number of micro batches)
该图示分析了DualPipeV流水线调度中的AllToAll重叠。时间线跨越4个设备,包含以下阶段:
* 预热阶段 (Warmup stage)
* 关键路径上的重叠部分 (Overlapped in critical path)
* 刷新阶段 (Flush stage)
延迟计算公式如下:
(p-1)/2 * F(p + p/2) * F + B/2(m - (p + p/2)) * (F&B) = (m - (p/2 + 1)) * (F&B)B/2 + (p/2) * (B-W) + W/2 = (p+1)/2 * B 如果 W = B/2(p-1)/2 * F + (p + p/2) * F + (p+1)/2 * B + (m - (p/2 + 1)) * (F&B) = (3p)/2 * F + (p+1)/2 * B + (m - (p/2 + 1)) * (F&B)其中:
* p: 流水线并行大小 (pipeline parallel size)
* v: 虚拟流水线并行大小 (virtual pipeline parallel size)
* F: 流水线并行rank的每个微批次的前向传递时间
* B: 流水线并行rank的每个微批次的后向传递时间
* W: 流水线并行rank的每个微批次的wgrad时间 (wgrad time per micro batch of one pipeline parallel rank)
* m: 微批次数量 (number of micro batches)
p(F+B) + (m-p)(F&B) + (p-1)/v * (F&B)(3p)/2 * F + (p+1)/2 * B + (m - (p/2 + 1)) * (F&B)假设没有a2a重叠,F&B=F+B, 且 B=2F
* T_1f1b = m(F+B) + (p-1)/v * (F+B) = 3mF + 3/v * (p-1)F
* T_dualpipe = m(F+B) + (p-1)F = 3mF + (p-1)F
* 当 v>3 时,1F1B比DualPipeV更快。
假设F被B完全隐藏,F&B=B, 且 B=2F
* T_dualpipe - T_1f1b = (p/2 - (2(p-1))/v) * F
* 当 v=2, T_dualpipe - T_1f1b = (1 - p/2) * F < 0, 当 p > 2
* 当 v=4, T_dualpipe - T_1f1b = (p/2 - (p-1)/2) * F > 0
* 当 v=8, T_dualpipe - T_1f1b = (p/2 - (p-1)/4) * F > 0
v=4, T_dualpipe/T_1f1b = (F/2)/( (3p)/2 * F + m*2F) = 1 / (3p+4m),当p和m较大时,延迟差异很小。1F1B与DualPipeV中AllToAll重叠的比较:
* 对于较大的虚拟流水线并行大小,1F1B速度更快。
* 在PP size较大和微批次数量较多的情况下,两种策略之间的差距很小。
* 对于像DeepSeek-V3这样的混合模型,我们需要仔细设计以平衡各个PP阶段的工作负载。
端到端加速 (Speedup) 公式:
Speedup = θ_1f1b-batches * θ_a2a-in-1f1b * γ_gemm-eff * min(t_comp, t_a2a)
公式各部分解读:
重叠批次的比例 (Proportion of overlapped batches):
(num_micro_batches - pp_size) / num_micro_batches1f1b阶段中AllToAll通信的比例 (Proportion of AllToAll comm in an 1f1b stage, prominent at):
SM carveout对gemm效率的影响 (Impact of SM carveout on gemm efficiency):
暴露的AllToAll通信时间 (Exposed AllToAll communication time):
注:详细数据来自对DeepSeek-V3代理模型的性能分析。
EA (Early Access) 代码:
特性 (Features):
进行中的工作 (WIP):
贡献者 (Contributors):
推荐配置:
CUDA_DEVICE_MAX_CONNECTIONS: 32
TORCH_NCCL_AVOID_RECORD_STREAMS: 1
NVTE_ALLOW_NONDETERMINISTIC_ALGO: 1
PYTORCH_CUDA_ALLOC_CONF: expandable_segments:True
NCCL_NVLS_ENABLE: 0
NVTE_FWD_LAYERNORM_SM_MARGIN: 8
NVTE_BWD_LAYERNORM_SM_MARGIN: 8 # 24 for DeepEP
* 将以下标志添加到您的训练脚本中:
--combined-1f1b
--combined-1f1b-recipe ep,a2a
#[optional] only works with TE v2.3.0
--delay-wgrad-compute