已关闭
[Bug]: PyNative 续训时 global_batch_size 变化导致训练 0 步静默退出且无任何提示 #2590
Java不加糖创建于 9月10日关闭于 9月10日
lanshaozuishuai
9月10日 评论:
9月10日 评论:
该问题已由上游问题单 https://gitcode.com/mindspore/org-issues/issues/43350 跟踪,本 issue 与其重复,关闭。修复 PR 见 !8802,已改为关联 org-issues #43350。


9月10日 关闭了 issue
MindSpore-Bot
9月10日 评论:
9月10日 评论:
9月10日 重新打开了 issue
9月10日 关闭了 issue
MindSpore-Bot
9月10日 评论:
9月10日 评论:
9月10日 重新打开了 issue
MindSpore-Bot
9月10日 评论:
9月10日 评论:
9月10日 重新打开了 issue
9月10日 issue状态由 TODO 改变为 CLOSED
9月10日 关闭了 issue
MindSpore-Bot
9月10日 评论:
9月10日 评论:
Checklist
🐞 问题详细描述
PyNative 断点续训时,若本次训练的
training.global_batch_size与 checkpoint 中记录的不一致,训练会不报任何错、以 0 退出码静默结束,且一步都没有训练。
根因在
mindformers/pynative/trainer/trainer.py:Trainer._load_checkpoint在恢复优化器状态时,会按ckpt_gbs / current_gbs缩放恢复出的global_step,以保持已消耗样本数的语义不变:if common_info.global_batch_size and common_info.global_batch_size != self.global_batch_size: global_step = int( common_info.global_step * (common_info.global_batch_size / self.global_batch_size) ) logger.info(f"Scaled global step: {common_info.global_step} -> {global_step} ...")但
training.steps不会跟随缩放。_inner_train_loop的循环条件是:logger.info("Start training loop...") step = self.state.global_step with Profiler(self.config.profiler) as prof: while step < self.state.max_steps: # max_steps = training.steps当缩放后的
global_step >= training.steps时,循环体一次都不执行,直接走到on_train_end并正常退出。日志中只有一句Start training loop...,之后再无任何输出,也没有任何告警。
复现步骤:
training.global_batch_size: 64、training.steps: 1000启动 PyNative 训练,训练到第 500 步及以后保存权重(
checkpoint.no_save_optim: false)。training.global_batch_size改为32,training.steps保持1000,checkpoint.no_load_optim: false,从上一步的权重续训。global_step被缩放为500 * (64 / 32) = 1000,达到max_steps,训练 0 步后静默退出。
期望行为:至少给出明确的告警日志,说明本次训练将执行 0 步及其原因;当前没有任何提示,
排查成本很高。
日志中唯一的线索是 info 级别的
Scaled global step,在大规模多卡日志中很容易被淹没:详细的环境信息描述
context.mode: 1),seq_length 4096,dp4 / tp4 / pp4 / ep16 / cp1,
local_batch_size: 1,优化器 Muoncheckpoint.no_load_optim: false(断点续训),training.steps: 1000,首次训练global_batch_size: 64,续训global_batch_size: 32其他辅助信息
该问题与具体模型、并行配置无关,属于
Trainer通用续训路径的问题:只要续训时global_batch_size变小到使缩放后的global_step达到training.steps,就会触发。相关代码位置:
mindformers/pynative/trainer/trainer.pyTrainer._load_checkpoint(global_step缩放)mindformers/pynative/trainer/trainer.pyTrainer._inner_train_loop(while step < max_steps)版本信息
master 分支,commit 876658938(
!8795 fix(pynative): ignore forced FSDP runtime params)。