多模态微调实战(06):全量训练的后台、断点与监控
演示集跑通后,才进入全量。全量意味着:时间以「天」计、必须可中断、必须可续训、必须能看懂进度。这一篇讲长时训练的运维细节。
这是「多模态微调实战」的第 06 篇。从「几十分钟」跨到「数天」,运维方式要随之升级。
一、规模与时间预期
| 项目 | 量级 |
|---|---|
| 训练样本 | 约 37 万 |
| 验证样本 | 约 4 万 |
| epoch | 3(可调) |
| 单卡 16GB | 常见要数天;具体取决于分辨率、I/O、实现细节 |
| 显存 | 约 9~11GB 量级(冻结 ViT + LoRA) |
不要相信「一定 30 小时」这种绝对数字;以你机器上稳定后的 s/it 估算:
1 | 剩余小时 ≈ 剩余 step × 每 step 秒数 / 3600 |
二、启动方式:前台 vs 后台
前台
适合调试:
1 | bash script/train_lora_full.sh |
关掉终端,训练一般也会停。
后台(推荐)
1 | bash script/train_lora_full_bg.sh |
典型实现要点:
nohup ... &写入日志;- 记录 PID;
- 提供
status/stop子命令。
查看:
1 | bash script/train_status.sh |
停止:
1 | bash script/train_lora_full_bg.sh stop |
注意:若训练在
docker run里,只杀宿主机 bash 可能不够,需要同时停掉对应容器,否则 GPU 仍被占着。
三、超参:与演示集尽量一致
全量阶段建议先复用演示集已验证的超参,只替换数据路径与输出目录,例如:
--dataset .../train_full.jsonl--val_dataset .../val_full.jsonl--output_dir .../ocr_plate_lora_full--eval_steps 500 --save_steps 500(全量可加大间隔,减少 I/O)
保持一致的好处:出问题时容易判断是「数据」还是「超参」导致。
四、断点续训
ms-swift / Transformers 风格续训:
1 | swift sft \ |
含义:
- 恢复模型(LoRA)权重;
- 恢复优化器 / 随机状态(完整 resume);
- 从对应 global step 继续,而不是从头数 epoch。
脚本层可以做成:默认自动找最新 checkpoint-*;FRESH_START=1 强制从头。
重要: 中途手动停掉时,如果还没到下一个 save_steps,内存里多跑的那几百 step 不会落盘。以磁盘上的 checkpoint 为准。
五、监控看什么
5.1 过程指标
logging.jsonl 里常见字段:
loss、token_acc、learning_rateglobal_step/max_stepsepochtrain_speed(s/it)remaining_time(框架估算,早期可能偏乐观/悲观)
5.2 系统层
1 | nvidia-smi |
确认:没有其他大模型服务占显存;利用率不是长期 0(除非在做超大数据预处理)。
5.3 验证指标
周期性 eval_loss / eval_token_acc。经验上可能出现:
- 验证 loss 最优不在最后一个 step;
- 后半段 loss 略回升,但 token_acc 仍缓升或持平。
因此「业务用哪个 checkpoint」不要只看最终 step,见下一节与合并篇。
六、如何选 checkpoint
假设训练结束后还留着 checkpoint-93000(验证 loss 最优)与 checkpoint-140001(最终 step)。对比示例(脱敏后的量级):
| Checkpoint | eval_loss | eval_token_acc |
|---|---|---|
| 约 93k(最优 loss) | 更低 | 已经很高 |
| 最终 step | 略高一点 | 可能略高或持平 |
建议:
- 先看框架记录的
best_model_checkpoint; - 再用你的 Exact Match 脚本对候选 checkpoint 各评一次;
- 业务上两者差距很小时,选更稳或更方便部署的那个。
七、训练完成后发生什么
日志走到 global_step == max_steps 后,往往还会:
- 再跑一轮(或两轮)全量验证——数万条可能要十几~几十分钟;
- 保存
checkpoint-<final>; - 打印
train_runtime/train_loss; - 容器退出,显存释放。
所以「step 到 100%」不等于「进程已退出」,别太早杀进程。
八、小结
全量训练完成标志:
- 最终 checkpoint 已写出;
- 日志出现完成标记 /
train_runtime; - GPU 空闲;
- 你已选定(或待评测选定)业务 checkpoint。
多模态微调实战第 06 篇完。下一篇:把 LoRA 合并回基座,得到一份独立完整的模型。











