
tensorflow/models 训练中断后如何从 checkpoint 继续训练并避免学习率曲线偏移【免费下载链接】modelsModels and examples built with TensorFlow项目地址: https://gitcode.com/GitHub_Trending/mode/models在 TensorFlow Model Gardentensorflow/models仓库里用official/vision的 TFM 训练框架跑图像分类、语义分割等任务时训练作业可能因 TPU 抢占、作业被手动停止等原因中断。恢复的关键只有一条让新作业落在同一个model_dir并且不要改动原来的步数与学习率调度配置。本文基于仓库内的 FAQ、优化文档、运行时配置文档 和 训练驱动源码给出中断后继续训练的操作路径以及学习率LR曲线发生偏移的原因与规避方法。中断点在哪里checkpoint 保存在 model_dirTFM 的 checkpoint 机制由 train_lib.py 管理训练器把 checkpoint 写入model_dir并通过tf.train.CheckpointManager按配置里的trainer.checkpoint_interval每多少步存一次周期保存。因此中断发生后model_dir里最新的那份 checkpoint 就是恢复训练的起点不需要额外导出或拷贝权重。多 worker 场景有一个前提要注意运行时配置文档 说明worker_hosts只有第一个 host 会写 TensorBoard Summaries 并保存 checkpoint恢复时确认作业仍由该节点承担保存职责。最短路径同一 model_dir 重跑原命令恢复训练的最小操作是用原配置原样重跑训练命令。FAQ 中对已经跑了 30k 步、想从断点继续的场景给出的方案是model_dir设为原训练目录直接重跑即生效或init_checkpoint设为最后一次保存的 checkpoint换目录时使用见下文可选分支。以仓库 starter 示例展示的本地训练命令为模板重跑时只要求--experiment、--config_file、--model_dir与中断前一致# 假设当前位于 official/vision/examples 目录下 python3 starter/train.py \ --experimenttf_vision_example_experiment \ --config_file${PWD}/example/example_config_local.yaml \ --modetrain \ --model_dir/tmp/tfvision_test/命令中的${PWD}是文档原样给出的 shell 变量取当前工作目录--experiment和--model_dir按你自己实验的注册名和实际目录替换。用official/vision/train.py正式驱动时参数形式相同必填项为experiment、mode、model_dir配置经--gin_file/--gin_params传入。如果中断的原因是 TPU 抢占train.py 内置了恢复循环捕获到抢占导致的tf.errors.OpError后打印Some TPU workers had been preempted ... retarting training from the last checkpoint...并自动从最后一个 checkpoint 重启训练无需人工干预作业整体挂掉后按上面的命令重跑即可走同一条恢复路径。可选分支换新 model_dir用 init_checkpoint 指回旧 checkpointFAQ 明确指出一个边界在同一个 model_dir 继续训练会覆盖旧运行的 checkpoint——因为只保留最后 5 个。所以 FAQ 的建议是如果打算在旧 checkpoint 上做微调类实验开一个新的 model_dir并用以下 task 级配置指回旧 checkpointFAQ Q2/Q3task: init_checkpoint: 旧 model_dir 中最后一次保存的 checkpoint 路径 init_checkpoint_modules: allinit_checkpoint_modules取all时加载 checkpoint 的全部权重对检测和分割任务还可以只加载backbone或decoder其余权重从头初始化。该分支适合旧实验保留原样、新实验在其之上继续的诉求单纯想接着跑完原定训练步数时优先使用上一节的同目录重跑。避免学习率曲线偏移保持步数与调度配置不变LR 偏移的根因在 FAQ Q15 里说得很直接After you modify the training steps, the LR curve will change.——修改训练步数后LR 曲线会跟着改变。优化文档 进一步解释了机制学习率调度以step为输入返回值支持stepwise、polynomial、exponential、cosine、power及constant并给出两条必须遵守的约束Batch size改变 batch size 通常需要同步调整学习率数值和训练步数Train stepstrain_steps与调度字段如 cosine/exponential 的decay_steps强相关Changing one without changing the other might result in undesired behavior只改其一可能导致非预期行为。因此恢复训练时的操作规则是trainer.train_steps和trainer.optimizer_config下的调度字段一个都不要改。这些字段的形态可以对照 runtime_configurations.md 给出的 ImageNet 示例trainer: optimizer_config: learning_rate: type: exponential exponential: initial_learning_rate: 0.256 decay_steps: 780 decay_rate: 0.94 staircase: true warmup: type: linear linear: warmup_steps: 1560上例数值取自文档中global_batch_size: 4096的配置组仅用于展示字段结构。恢复训练时原样保留这些值只有当文档建议的场景成立——例如加速器数量变化需要按 runtime_configurations.md How to adjust according to different runtime configurations 一节同步调整 batch size、步数和学习率——才成套修改且必须同时改decay_steps等关联字段不要只动train_steps。验证看 learning_rate 的 summary 是否按原调度走恢复后有两个文档明确给出的观测点LR 曲线本身优化文档 说明学习率数值会按trainer.summary_interval周期写入 summary。恢复训练后在 TensorBoard 中查看该标量序列对照 YAML 里的调度参数initial_learning_rate、decay_steps、warmup_steps等确认曲线仍按原计划衰减而不是在重启处出现跳变或重新 warmup。文档同时提醒若warmup_steps小于summary_intervalwarmup 阶段的数值不会出现在 summary 里不要把它误判为异常。恢复路径是否生效TPU 抢占恢复时会输出retarting training from the last checkpoint...日志原文如此手动重跑后则确认新作业的 checkpoint 仍写入同一model_dir且按checkpoint_interval继续产生新 checkpoint。限制说明同一model_dir只保留最后 5 个 checkpoint继续训练会滚动覆盖旧运行的 checkpointFAQ Q15需要长期保留旧运行产物时走新 model_dir init_checkpoint分支。FAQ 中修改训练步数后 LR 曲线会变化是机制性警告文档没有给出重算decay_steps的公式因此恢复场景的正确做法就是不改步数而不是改完步数再人工补偿调度。若希望训练过程中按指标自动导出最优 checkpoint可在配置中使用best_checkpoint_eval_metric属性config_definitions.pyFAQ Q25它指定 trainer 监控的评估指标用于导出 best checkpoint这与断点恢复是独立的可选配置。【免费下载链接】modelsModels and examples built with TensorFlow项目地址: https://gitcode.com/GitHub_Trending/mode/models创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考