已关闭
【实践文档】Qwen3-VL Megatron 后端训练性能优化实践 #482
Ruiyu_Qiu创建于 7月5日关闭于 18 小时前
7月7日 关联了看板:MindStudio ISSUE管理
7月8日 关联了里程碑:MindSpeed 26.2.0
yeqm
7月14日 评论:
7月14日 评论:
感谢您对 MindSpeed-MM 社区的贡献!相关实践文档及关联 PR 已收到,后续将由社区 Maintainer 进行审核,请关注评审意见并及时更新。


18 天前 issue状态由 TODO 改变为 DONE
18 天前 关闭了 issue
18 天前 添加了label:resolved
ascend-robot
4 天前 评论:
4 天前 评论:
您好,当前Issue标记为resolved且有一段时间未进一步更新,因此我们将其标记为'stale'(闲置)状态。若您认为这是误操作,可通过添加任意评论来去除'stale'标签。标记为stale的Issue在4天内无更新活动将自动关闭。


4 天前 添加了label:stale
18 小时前 关闭了 issue
18 小时前 issue状态由 TODO 改变为 CLOSED
Qwen3-VL-8B Megatron 后端训练性能优化实践
概述
本文以
Qwen3-VL-8B-Instruct的组件式 Megatron 训练为例,记录一次梯度通信重叠的性能对照:先从已跑通的配置建立基线,采集 Profiling,再尝试开启--overlap-grad-reduce,比较训练耗时和 loss。模型接入、权重转换和数据配置见 开发实践,通用接口见 [Megatron 后端迁移指南]https://gitcode.com/Ascend/MindSpeed-MM/pull/2773)。本文使用同一模型和图文数据,不重复接入步骤。
基线配置
基线使用开发实践中的完整模型、原始权重和冻结范围。已有的 Flash Attention、融合 RMSNorm/SwiGLU 和分布式优化器保持开启,以这套能够正常训练的配置作为对照。
overlap_grad_reduce=False,overlap_param_gather=False性能计时单独运行 200 步,关闭 Profiling 和输入指纹审计,不保存检查点。第 21—200 步用于统计,避开初始化和前 20 步的 warmup;优化配置也使用相同窗口和样本顺序。
基线计时结果如下:
样本吞吐按统计窗口内的样本数除以总耗时计算。变长图文数据的实际 token 数不同,这里不使用序列长度上限估算 tokens/s。当前结果为单次运行;如果后续差异较小,应重复测量。
Profiling 与通信开销
通过
--mm-tool指向独立的工具配置,采集全部 8 个 rank 的数据。当前 CP=1,Profiling 元数据中的dp_cp组就是本例的 DP 组。rank0 在采集的 3 步内记录到:这些是操作累计时间,包含等待,不能相加当作单步耗时,也不能直接换算成可获得的加速比例。它们说明 DP 通信值得检查;结合时间线中的计算、通信和等待区间,再判断能否通过重叠减少暴露的通信时间。
CPU 统计还记录了较多标量读取和
copy_等待。对应等待可能来自设备执行或其他同步,不能全部归因于数据加载。本篇先测试 DP 梯度通信重叠。开启梯度通信重叠
本例采用分布式优化器,梯度归约使用 ReduceScatter,基线未开启梯度通信重叠。本实验尝试在一批参数的梯度就绪后异步发起归约,使这部分通信与后续反向计算重叠。
在原训练命令中增加一个参数:
--use-distributed-optimizer是基线已有参数,新增项只有--overlap-grad-reduce。启动后检查日志中的DistributedDataParallelConfig,确认overlap_grad_reduce=True。对照配置如下:
模型、权重、数据、冻结范围、TP/SP、batch、优化器和学习率调度均保持一致。两边从相同初始权重独立起训,所有训练设定保持一致。
对照方法
开启重叠后,同样完成 200 个优化器更新步,比较第 21—200 步的平均耗时和样本吞吐。
精度检查逐步核对学习率、consumed samples、loss 和梯度有限性,记录相对 loss 偏差。
结果记录
以下为第 21—200 步的计时结果,两组均完成 200 个优化器更新步:
本次测量记录的平均耗时比基线低 9.24%,样本吞吐高 10.19%。
200 步的学习率、consumed samples 和 global batch size 逐步一致,loss 在日志精度上逐步一致,梯度有限,无 NaN 或跳步。