已开启
MindFormers 训练调试能力与 HyperParallel Trainer 差距分析 #305
DavidFFFan创建于  7月25日
DavidFFFan
DavidFFFan成员
7月25日 创建

1. 范围与统计口径

  • 分析快照:MindFormers d38171030(2026-07-18),HyperParallel ee839216(2026-07-24)。
  • MindFormers 静态图:传统 Trainer、mindspore.Model、GRAPH_MODE/training_graph 链路。
  • MindFormers 动态图:mindformers.pynative.trainer.Trainer 的 MindSpore PyNative 链路。
  • HyperParallel:特指 /home/fdw/code/hyper-parallel/hyper_parallel/trainer。它当前实际是 PyTorch eager Trainer;核心并行库存在某项能力,不等于 Trainer 已经接入。
  • 本文只统计训练调试、监控、性能/显存分析和高可用能力,不统计普通训练算法或纯显存优化能力。

状态说明:

  • ✅:Trainer 主链路已经接入,可通过正式配置或 callback 使用。
  • ⚠️:部分支持、依赖特定模型/底层组件,或存在配置接线缺陷。
  • ❌:当前 Trainer 不支持。
  • “使用频率”统一预留为“待补充”,后续可按实际业务情况填写“高/中/低”或使用次数。

2. 精度与训练状态监控

功能点 含义与作用 典型使用场景 MindFormers 静态图 MindFormers 动态图 HyperParallel 使用频率 使能方式与限制
Loss 监控 输出训练 loss,确认收敛趋势和异常跳变 日常训练看盘、版本回归 ✅ ✅ ✅ 待补充 静态图使用 MFLossMonitor;动态图使用 LossCallback;HyperParallel 使用 train.logging.log_steps
学习率监控 输出当前 optimizer learning rate,辅助判断 loss 变化是否符合调度策略 warmup、衰减和断点续训检查 ✅ ✅ ✅ 待补充 三者均随基础训练日志输出
Global grad norm 观察全局梯度规模,定位梯度爆炸、消失和并行规约错误 混合并行训练稳定性检查 ✅ ✅ ✅ 待补充 MindFormers 随 loss callback 输出;HyperParallel 训练循环提供 DTensor-aware global norm
Overflow 状态监控 记录数值溢出状态,辅助定位低精度训练不稳定 fp16 训练出现 loss 抖动或停滞 ✅ ⚠️ ❌ 待补充 静态图 MFLossMonitor 直接输出;动态图基础日志没有与静态图等价的独立 overflow 指标
分项 Loss 分离主 loss、MoE auxiliary loss、MTP loss、indexer loss MoE、MTP、DSA 精度问题归因 ✅ ✅ ⚠️ 待补充 静态图 MFLossMonitor(print_separate_loss=true);动态图 LossCallback;HyperParallel 仅 MoE aux loss 有实现且 MoE callback 配置路径有缺陷
Micro/local loss 记录每个 micro-batch 的局部 loss,定位梯度累积过程中的异常样本或 stage 梯度累积、PP loss 分叉 ✅ ✅ ✅ 待补充 静态图 monitor_config.local_loss_format;动态图 monitor.train_state.local_loss;HyperParallel train.monitor.monitor_on: true、local_loss_format: [log, tensorboard],从 on_substep_end 采集 raw micro loss
Device-local/rank-local 累积 loss 在当前 rank 内按 token 加权汇总一个 step 的 micro loss,识别局部卡异常 单卡正常、多卡 loss 分叉 ✅ ✅ ✅ 待补充 MindFormers 使用 device loss 配置;HyperParallel train.monitor.device_local_loss_format 输出 loss/device_accum_local_loss,当前不做跨 rank 聚合
参数级 local grad norm 在通信规约前按参数记录本地梯度 norm,并支持目标参数筛选 定位具体层梯度爆炸或消失 ✅ ✅ ✅ 待补充 MindFormers 使用 local_norm 配置;HyperParallel train.monitor.local_norm_format,并可配 target 正则和 invert
Device-local/rank-local grad norm 聚合当前设备所有被监控参数的本地梯度 norm 定位 rank 或并行 stage 间精度不一致 ✅ ✅ ✅ 待补充 MindFormers 使用 device norm 配置;HyperParallel train.monitor.device_local_norm_format 输出 grad/device_local_norm,当前不做跨 rank 聚合
Loss/梯度 NaN、Inf 检查 在异常值污染后续权重前终止训练并报告 算子异常、数值不稳定、脏数据 ✅ ❌ ⚠️ 待补充 静态图 check_for_nan_in_loss_and_grad: true;动态图未接入;HyperParallel 已修复 train.debug.check_nan_inf 接线,但只检查 global grad norm,且只有 rank 0 抛异常
Global norm spike 检测 按阈值识别梯度尖峰,可累计异常次数、跳过异常数据或触发错误 偶发脏样本和训练自动治理 ✅ ❌ ❌ 待补充 静态图配置 check_for_global_norm、global_norm_spike_threshold、global_norm_spike_count_threshold
Weight norm 记录参数权重 L2 norm,观察参数漂移或层间异常 loss 正常但权重更新异常 ✅ ❌ ❌ 待补充 静态图 monitor_config.weight_state_format
Optimizer moment norm 记录 Adam 一、二阶矩 norm,排查优化器状态污染或恢复不一致 checkpoint 续训精度不一致 ✅ ❌ ❌ 待补充 静态图 monitor_config.optimizer_state_format
Stable rank/最大特征值 估计矩阵 stable rank 和最大特征值,观察权重退化或表征塌缩 长周期训练稳定性和 MoE expert 退化分析 ✅ ❌ ❌ 待补充 静态图 monitor_config.stable_rank_config,支持参数筛选、聚合和采样周期
Attention max logits 输出逐层、逐 head 的 attention logits 最大值及整体最大值,识别 QK 放大和 softmax 饱和 Attention 数值稳定性、QK clip 调优 ✅ ✅ ❌ 待补充 静态图 monitor_config.max_attention_logit_format;动态图加入 MaxLogitsMonitor(step_interval=N);均依赖模型支持 track_max_attention_logit
Attention mean_sum 记录 attention mean_sum,与 max logits 结合判断整体分布和局部极值 Attention 稳定性趋势分析 ❌ ❌ ❌ 待补充 当前源码没有名为 mean_sum 的指标;MindFormers 两种模式现有的是各层/各 head 最大值的整体 mean,不能直接等同于 mean_sum
MoE max_vio 衡量最热 expert 相对理想均衡负载的最大偏离,常用定义为 max(load_i) / mean(load) - 1,直接反映路由稳定性 Loss-Free Balancing、路由偏置和热点 expert 调优 ⚠️ ⚠️ ⚠️ 待补充 三者均未直接输出名为 max_vio 的指标;静态图可从 expert_load、动态图可从 tokens-per-expert、HyperParallel 可从核心 tokens_per_expert 推导。HyperParallel Trainer 的 MoE callback 还存在配置路径缺陷
Tokens per expert/expert load 记录各 MoE expert 接收的 token 数或负载 路由热点、负载不均和容量规划 ✅ ✅ ⚠️ 待补充 静态图 MoE callbacks;动态图 monitor.moe_monitor.save_tokens_per_expert_interval;HyperParallel 核心能同步计数,但 Trainer callback 错读配置且未输出完整直方图
MoE drop rate 记录容量不足造成的 token drop 比例 MoE 容量因子和路由调优 ✅ ❌ ❌ 待补充 静态图加入 MoEDropRateCallback
Expert 冷热与迁移监控 识别长期冷热 expert,并观察 expert 调整/迁移状态 MoE 长尾负载和热点治理 ✅ ❌ ❌ 待补充 静态图 ColdHotExpertMonitor、ExpertMigrateCallback
TensorBoard 指标落盘 将训练指标写入统一事件文件,支持曲线对齐和实验比较 长训练监控、版本对比 ✅ ✅ ⚠️ 待补充 静态图配置 tensorboard.tensorboard_dir;动态图配置 monitor.tensorboard.output_dir;HyperParallel train.monitor.*_format: [tensorboard] 已能写 local/device loss/norm 和 rank 0 global loss/norm,但通用 TensorBoardCallback 仍是 stub
确定性与复现开关 固定随机种子并打开计算/通信确定性,缩小并行精度问题排查范围 单卡/多卡对齐和回归复现 ✅ ✅ ✅ 待补充 静态图 train_precision_sync: true;动态图使用确定性训练配置;HyperParallel train.debug.deterministic: true

主要源码入口:

  • 静态图:mindformers/core/callback/callback.py:348、:805、:993、:1172、:1411、:2853。
  • 动态图:mindformers/pynative/callback/loss_callback.py:33、mindformers/pynative/tools/monitor.py:145、:288、:534、mindformers/pynative/callback/max_logits_monitor.py:38。
  • HyperParallel:hyper_parallel/trainer/callbacks/base.py:156、:679、:758、:1101、:1176,hyper_parallel/trainer/base.py:1023、:1437,hyper_parallel/core/moe_utils.py:37。

3. 性能监控与 Profiler

功能点 含义与作用 典型使用场景 MindFormers 静态图 MindFormers 动态图 HyperParallel 使用频率 使能方式与限制
Step time 记录单步耗时,发现性能回退和周期性抖动 日常性能看盘、版本对比 ✅ ✅ ✅ 待补充 三者均随训练日志输出
Samples/tokens throughput 输出 samples/s 或 tokens/s,衡量端到端训练效率 并行策略和 batch size 调优 ✅ ✅ ✅ 待补充 MindFormers 基础 loss callback;HyperParallel train.logging.report_throughput: true
TFLOPS 按模型 FLOPs 和 step time 估算设备计算吞吐 算力利用率和实现性能比较 ✅ ✅ ⚠️ 待补充 MindFormers 可自动结合模型计算量;HyperParallel 必须手工填写 model_flops_per_token
MFU 计算模型 FLOPs 相对设备理论峰值的比例 判断计算、通信或调度瓶颈 ⚠️ ⚠️ ⚠️ 待补充 MindFormers 可由 TFLOPS 与设备峰值换算;HyperParallel 还需手工填写 peak_tflops
ETA/训练进度 根据近期 step time 估计剩余训练时间 长任务排期和异常停滞发现 ✅ ⚠️ ✅ 待补充 静态图 MFLossMonitor;HyperParallel Progress callback 使用 tqdm
Profiler 按 step 调度 只采集指定训练区间,降低采集开销 warmup 后抓取稳定 step ✅ ✅ ❌ 待补充 MindFormers 配置 start/stop step;HyperParallel ProfilerCallback 目前没有创建或驱动 torch.profiler
Profiler rank 筛选 只在指定 rank 采集,控制多卡 trace 规模 PP stage 或异常 rank 定点分析 ✅ ✅ ❌ 待补充 静态图支持 profile_rank_ids/每 PP stage 取卡;动态图 profiler 支持 rank 配置
CPU/NPU activity 同时采集主机和设备侧执行活动 host launch、数据准备和设备计算关联分析 ✅ ✅ ❌ 待补充 MindFormers Profiler activity 配置
通信性能采集 记录集合通信事件及耗时,定位 DP/TP/PP/EP 通信瓶颈 扩卡效率差、通信等待高 ✅ ✅ ❌ 待补充 MindFormers profiler 打开 profile_communication
DTensor 算子/Collective 通信追踪 记录 DTensor op、模块层级、collective 类型/次数、参数和 sharding 信息,生成层次化调用表 定位某个模型模块引入了哪些隐式通信 ❌ ❌ ⚠️ 待补充 HyperParallel 核心可使用 with CommDebugMode(model) as mode,再调用 generate_comm_debug_tracing_table() 或 get_comm_counts();支持 Torch/MindSpore,但尚未接入 Trainer 配置和按 step/rank 调度
Profiler 显存事件 将分配释放事件写入 trace,关联算子和显存峰值 显存峰值和泄漏定位 ✅ ✅ ❌ 待补充 MindFormers profiler 打开 profile_memory
Profiler level 通过 Level 0/1/2 控制采集粒度和开销 快速概览与深度根因分析切换 ✅ ✅ ❌ 待补充 MindFormers 配置 profiler_level
Python stack 记录事件对应 Python 调用栈 将热点算子映射回模型代码 ✅ ✅ ❌ 待补充 MindFormers profiler 打开 with_stack
MSTX 标记 写入训练 step、模块或用户区间标记,改善时间线可读性 复杂并行时间线分段 ✅ ✅ ❌ 待补充 MindFormers profiler 打开 MSTX 相关配置
数据简化 删除大体积冗余 trace 数据,降低落盘与解析开销 大规模多卡 profiler ✅ ✅ ❌ 待补充 MindFormers profiler 使用 data_simplification
并行策略 metadata 将 DP/TP/PP/CP/EP 等并行信息随 trace 保存 分析通信事件属于哪个并行维度 ✅ ✅ ❌ 待补充 MindFormers profiler/Trainer 自动补充并行 metadata
吞吐基线与线性度 对比基准吞吐,判断当前吞吐是否异常及扩卡是否线性 持续性能回归和扩卡验收 ✅ ❌ ❌ 待补充 静态图 TrainingStateMonitor 配置 throughput baseline/linearity
数据等待时间 单独统计 dataloader/取数等待,区分数据瓶颈和计算瓶颈 step time 抖动、设备空闲 ❌ ❌ ❌ 待补充 三套 Trainer 当前没有统一的一等指标,需新增 step 分段计时
PP bubble/stage imbalance 统计 pipeline bubble 和各 stage 前后向耗时差异 PP 切层、micro-batch 数量调优 ❌ ❌ ❌ 待补充 可从 trace 人工分析,但尚无直接汇总指标

主要源码入口:

  • 静态图:mindformers/core/callback/callback.py:348、:805、:2264,mindformers/trainer/trainer.py:1115。
  • 动态图:mindformers/pynative/tools/profiler.py:40、mindformers/pynative/trainer/trainer.py:884。
  • HyperParallel:hyper_parallel/trainer/callbacks/base.py:156、:592,hyper_parallel/trainer/config.py:293,hyper_parallel/core/dtensor/debug/_comm_debug_mode.py:47。

4. 显存分析

本节只统计显存观测和问题定位能力,不统计降低显存占用的训练策略。

功能点 含义与作用 典型使用场景 MindFormers 静态图 MindFormers 动态图 HyperParallel 使用频率 使能方式与限制
Profiler memory trace 采集分配、释放和峰值相关事件,并与执行时间线关联 显存峰值来源和生命周期分析 ✅ ✅ ❌ 待补充 MindFormers profiler 设置 profile_memory: true;HyperParallel memory profiler 未实现
算子/调用栈显存归因 结合 memory trace 和 stack 将显存事件定位到算子与 Python 代码 找出高占用算子或模块 ✅ ✅ ❌ 待补充 MindFormers 同时打开 profile_memory 和 with_stack
Current allocated/reserved 周期输出当前已分配和已预留显存,观察常驻占用和碎片趋势 长训练疑似泄漏、reserved 持续增长 ❌ ❌ ❌ 待补充 MindFormers 只能通过重型 profiler 间接分析;HyperParallel MemoryMonitorCallback 为 stub
Step peak allocated/reserved 每 step 记录峰值并 reset,快速关联突增 step 动态 shape、长序列或偶发 batch 引发峰值 ❌ ❌ ❌ 待补充 三者均缺少轻量级逐 step peak monitor
Rank 间显存对比 汇总各 rank 峰值,定位 PP/EP 切分不均或单卡热点 某个 rank OOM、其他 rank 空闲 ❌ ❌ ❌ 待补充 可分别抓 profiler 后人工对比,但没有训练期统一聚合指标
显存碎片指标 输出 allocated、reserved、inactive split 等碎片信息 有空余但申请失败、运行时间越长越易 OOM ❌ ❌ ❌ 待补充 当前无 Trainer 级轻量指标
OOM 自动诊断包 捕获 OOM 时保存最近 step 指标、显存摘要、快照和相关配置 难复现的长训练 OOM ❌ ❌ ❌ 待补充 三者均没有完整自动化链路
Memory snapshot/timeline 保存可离线查看的分配调用栈、生命周期和对象关系 深度分析泄漏和生命周期过长 ⚠️ ⚠️ ⚠️ 待补充 MindFormers profiler 能提供 trace 级信息;HyperParallel 新增离线 memory_analysis.html,可读取 block CSV 展示无碎片/理论/含碎片显存曲线,但 Trainer 不负责采集和自动打开
峰值解释与激活点差异分析 查看峰值时存活内存块,按维度解释峰值,并比较两个时间点的新增、释放和共同存活块 查找峰值构成、生命周期过长和显存净增长来源 ⚠️ ⚠️ ⚠️ 待补充 HyperParallel 使用 hyper_parallel/tools/memory_visualizer/memory_analysis.html 离线导入 block CSV;支持峰值明细、解释器、A/B diff 和 CSV/JSON 导出,但尚未接入 Trainer/OOM 自动诊断链路

主要源码入口:

  • MindFormers:mindformers/core/callback/callback.py:2264、mindformers/pynative/tools/profiler.py:40。
  • HyperParallel:hyper_parallel/trainer/callbacks/base.py:1197、hyper_parallel/trainer/config.py 的 MemoryMonitorConfig、hyper_parallel/tools/memory_visualizer/memory_analysis.html。

5. 高可用、快速恢复与 Checkpoint

功能点 含义与作用 典型使用场景 MindFormers 静态图 MindFormers 动态图 HyperParallel 使用频率 使能方式与限制
周期 checkpoint 按 step 保存模型和训练状态,限制故障回退长度 常规长训练保护点 ✅ ✅ ✅ 待补充 静态图 CheckpointMonitor;动态图 checkpoint config;HyperParallel train.checkpoint.save_steps
Final checkpoint 正常训练结束时保存最终状态 确保最后一次更新可交付 ✅ ✅ ✅ 待补充 三者 callback 均支持训练结束保存
异步 checkpoint 将写盘放到后台执行,降低保存阻塞时间 checkpoint 较大、共享存储较慢 ✅ ✅ ⚠️ 待补充 MindFormers 配置 async save;HyperParallel 线程只浅拷贝 state,仍读取 live model/optimizer,存在跨 step 一致性风险
去冗余保存 不重复保存可由其他 shard 恢复的数据,降低容量和写盘量 大规模分布式 checkpoint ✅ ✅ ⚠️ 待补充 MindFormers 支持 remove redundancy;HyperParallel 依赖 DCP shard,但没有等价的 Trainer 策略配置
Checkpoint 数量保留 自动删除过旧 checkpoint,控制存储增长 高频保存和长期训练 ✅ ✅ ❌ 待补充 MindFormers keep_checkpoint_max/save_max;HyperParallel 无 keep-max
模型与 optimizer 恢复 恢复参数和优化器状态,保持更新轨迹连续 手工重启、抢占恢复 ✅ ✅ ✅ 待补充 三者通过 checkpoint load path 恢复
Global step/scheduler 恢复 恢复 step 和学习率调度位置 避免 warmup 或衰减阶段错位 ✅ ✅ ✅ 待补充 HyperParallel 独立保存 scheduler/step;MindFormers 恢复 common info
RNG 状态恢复 恢复随机数状态,保证 dropout、采样等序列连续 精确复现和无损续训 ⚠️ ⚠️ ✅ 待补充 HyperParallel 显式保存 Python/NumPy/Torch RNG;MindFormers 依赖训练框架及 checkpoint 状态,需按模型链路验证
Dataloader 游标恢复 恢复已消费数据位置,避免重复或漏数 大数据集精确续训 ✅ ✅ ✅ 待补充 MindFormers 按 consumed samples/step 跳数;HyperParallel 保存 StatefulDataLoader
动态 GBS 续训 global batch size 改变后仍按已消费样本恢复数据 扩缩卡或 batch 配置变化 ⚠️ ✅ ❌ 待补充 动态图 Trainer 有专门 consumed-sample 处理;其他链路需固定数据语义
新格式 checkpoint 完整性校验 校验 metadata 引用的 safetensors 文件是否齐全,拒绝明显残缺目录 写盘中断、文件丢失 ✅ ✅ ❌ 待补充 MindFormers 新格式 loader 自动调用 verify_ckpt_valid
Metadata 原子更新 临时文件完成后原子替换 metadata,降低读到半写文件的概率 进程或存储中断 ✅ ✅ ❌ 待补充 MindFormers 新格式 metadata 使用临时文件与 replace;HyperParallel 无 Trainer 完成 manifest
完成 manifest/hash 显式标记整个 checkpoint 完成并校验内容,避免把半 checkpoint 当作恢复点 多 shard 部分写入成功 ❌ ❌ ❌ 待补充 三者均缺少完整的内容 hash、失败回滚和完成协议
Online reshard 根据源、目标 ShardedTensor metadata 在线重切分,支持并行策略变化后加载 DP/TP/PP/FSDP 切分变化 ✅ ⚠️ ⚠️ 待补充 静态图 checkpoint.reshard_worker_num;动态图复用 loader,但 load_worker_number 未传入,worker 实际仍为默认值;HyperParallel DCP 能处理部分 world-size 变化,缺少 Trainer 级显式流程和验收
Balanced load 在 rank 间平衡 checkpoint 文件读取任务,缓解存储热点 shard 数量不均、共享存储瓶颈 ✅ ✅ ❌ 待补充 MindFormers checkpoint.load_balanced: true
Weights-only load 只加载模型,不恢复 optimizer,并正确处理 master weight 微调、切换优化器、权重转换 ✅ ✅ ⚠️ 待补充 动态图 checkpoint.no_load_optim: true;HyperParallel 可通过状态选择实现,但无完整用户配置
Exception checkpoint 普通训练异常时尝试额外保存一次 Python 异常或可控错误减少丢步 ✅ ❌ ❌ 待补充 静态图 CheckpointMonitor.exception_save: true
健康 checkpoint 标记 根据 loss、global norm 等健康指标标记可恢复权重,避免从污染点继续训练 NaN、梯度尖峰和精度劣化后的回退 ✅ ❌ ❌ 待补充 静态图健康 checkpoint 配置与选择链路已接入;动态图只有 HealthCheckpointConfig 声明,没有运行时消费
Latest healthy 自动选择 启动时自动选择最近且健康、完整的 checkpoint 无人值守故障恢复 ✅ ❌ ❌ 待补充 静态图 tools/resume_ckpt.py 参与筛选;其他 Trainer 需显式路径
TFT 统一故障恢复接入 向底层容错框架注册同步 save/load hook,协调故障发现、重启和恢复 节点、进程、通信故障 ✅ ❌ ❌ 待补充 静态图 TrainFaultTolerance,通过 MS_ENABLE_TFT 打开相应能力
进程级快速恢复 ARF 单进程或节点内进程故障后快速拉起并重建训练状态 局部进程退出、节点内恢复 ✅ ❌ ❌ 待补充 静态图 MS_ENABLE_TFT 含 ARF:1,并配置同步 checkpoint
UCE 故障恢复 对接底层 UCE 检测与恢复流程,从可用 checkpoint 重建状态 NPU UCE 故障 ⚠️ ❌ ❌ 待补充 静态图设置 UCE:1;检测和故障处置依赖 MindSpore/TFT
临终遗言/故障现场保存 在可控故障退出前尽量保存最后训练现场 缩短相邻周期 checkpoint 之间的回退步数 ⚠️ ❌ ❌ 待补充 静态图 exception save/TFT save hook 可覆盖部分故障;致命硬件或进程故障不保证成功
TRE 联动 global norm 异常同步后抛出可被恢复框架识别的错误 精度异常自动回退 ✅ ❌ ❌ 待补充 静态图 MS_ENABLE_TFT=TRE:1 配合 global norm health 配置
SDC SilentCheck/CheckSum 检测静默数据损坏并通过跨 rank 校验确认异常 长训练无显式报错但精度漂移 ⚠️ ❌ ❌ 待补充 静态图 MindSpore ≥2.7,设置 NPU_ASD_ENABLE=1、MS_SDC_DETECT_ENABLE=1 并加入 SDCMonitor;当前主要告警,未形成自动恢复闭环
硬件压力检测 周期执行硬件精度/电压压力检测,发现亚健康设备 长时间大规模集群训练 ⚠️ ❌ ❌ 待补充 静态图 StressDetectCallBack/StressTestModelMonitor,属于实验能力
弹性成员变化 rank 成员变化后重新 rendezvous,并重建 mesh、模型、optimizer 和 dataloader 节点替换、动态扩缩容 ❌ ❌ ❌ 待补充 三套 Trainer 当前均无完整弹性训练闭环
Checkpoint 失败策略 保存或加载失败时 fail-fast、降级或告警,避免无保护运行或假恢复 存储不可用、权限和容量异常 ⚠️ ⚠️ ⚠️ 待补充 HyperParallel 当前捕获异常后仅 warning 并继续,风险最高;建议策略化并默认 fail-fast

主要源码入口:

  • 静态图:mindformers/core/callback/callback.py:1604、:1630、:2792、:3360,mindformers/trainer/base_trainer.py:1120、:1434,mindformers/version_control.py:241。
  • 动态图:mindformers/pynative/callback/checkpoint_callback.py:31、mindformers/pynative/trainer/trainer.py:779。
  • 共享新格式 checkpoint:mindformers/checkpoint/checkpoint.py、reshard.py、fully_parallel.py、utils.py:314。
  • HyperParallel:hyper_parallel/trainer/callbacks/base.py:259、:285、:374、:420。

6. HyperParallel 主要能力欠缺

P0:修复已有能力的真实可用性

  1. 统一剩余 callback 配置访问路径为 args.train.*。TrainingStateMonitor 和 GradientHealth 已正确接线;Profiler、通用 TensorBoard、Memory、MoE、GC、Eval 等仍读取错误层级。
  2. 实现 Profiler callback:按 step/rank 调度 CPU/NPU、通信、显存、stack、MSTX trace,并保存并行策略 metadata。
  3. 实现轻量 Memory monitor:current/peak allocated/reserved、逐 step peak reset、rank 聚合,以及 OOM 自动诊断包。
  4. 实现 TensorBoard callback,并复用现有 logging event,确保终端日志和 TensorBoard 指标同源。
  5. 扩展现有 NaN/Inf health callback:除 global grad norm 外同时检查 loss 和 local/device norm;异常时所有 rank 协同退出。
  6. 修复异步 checkpoint 一致性:optimizer step 后创建不可变 CPU staging,再异步写盘;增加临时目录、完成 manifest 和失败策略。

P1:补齐大模型精度与性能诊断

  1. 在已有 micro/local/device loss 和 local/device grad norm 基础上,补充跨 rank 对比/聚合、weight norm、optimizer moment norm,并完成 DP/TP/PP/FSDP 语义验收。
  2. 增加 Attention max_logits 和 mean_sum。若 mean_sum 的业务定义不同于现有 MindFormers 的 max_attention_logit/mean,需先固定公式、聚合维度和跨 TP/CP 规约语义。
  3. 增加 MoE max_vio 一等指标;基于同步后的 tokens-per-expert 计算并输出 layer 级、全局最大值和趋势,同时保留原始直方图。
  4. 增加 global norm spike 检测、连续异常次数、跳数据和健康 checkpoint 联动。
  5. 自动计算 FLOPs/token、TFLOPS 和 MFU;增加数据等待、PP bubble/stage imbalance、吞吐基线和扩卡线性度。

P2:建立高可用闭环

  1. 增加 checkpoint keep-max、完整性验证、完成 manifest/hash、latest complete/healthy 自动选择。
  2. 定义 on_exception 生命周期和 last-words checkpoint;诊断包包含配置、日志、最近指标、显存摘要和 profiler 环形缓冲。
  3. 接入进程/节点故障恢复:rendezvous、重建 process group/device mesh、模型、optimizer 和 dataloader,并建立故障注入测试。
  4. 建立 health checkpoint、UCE/SDC 检测和自动回退之间的统一状态机。
  5. 将 Trainer 平台化:分别提供 PyTorch eager 和 MindSpore PyNative adapter;若需要 MindSpore 静态图,再单独建设 graph Trainer adapter。

7. 建议验收矩阵

维度 最低验收标准
精度 单卡及 DP/TP/PP/FSDP 下 loss、global/local/device norm 语义一致;max_vio、attention max_logits/mean_sum 有明确公式和并行规约;注入 NaN/Inf 后全 rank 有界退出
性能 指定 step/rank 能生成可解析 trace;通信、显存、stack、MSTX 开关有效;持续指标包含 tokens/s、TFLOPS、MFU、数据等待和 PP stage 信息
显存 每 step current/peak 可观测并可跨 rank 对比;构造 OOM 能自动生成诊断包;监控关闭时开销可忽略
高可用 覆盖 kill 单进程/单节点、写盘失败、半 checkpoint、异常 loss 四类故障;只从完整且健康的 checkpoint 恢复;恢复后的数据、RNG 和 loss 与无故障基线一致
Trainer 后端 PyTorch eager、MindSpore PyNative、MindSpore GRAPH 分别列能力并独立验收,不能将核心库支持误报为 Trainer 支持
likedislike