训练跑到一半报 No space left on device,检查发现每个 epoch 存了三个完整权重,磁盘只剩不到 2G。
这类报错背后常见的原因有几处,逐个排除就行。默认保存全部 checkpoint,没有数量上限;每个 checkpoint 都包含优化器状态,体积翻倍;同时保存了 adapter 与完整权重;旧实验的产物没有清理。
限制保留的 checkpoint 数量
TrainingArguments(output_dir='./out', save_total_limit=2)
只保存模型不保存优化器状态
TrainingArguments(output_dir='./out', save_only_model=True)
训练前清理历史产物
python -c "import shutil,glob;[shutil.rmtree(d) for d in glob.glob('./out/checkpoint-*')]"
监控磁盘剩余空间
Get-PSDrive C | Select-Object Free
中间停过一次,把已经改的东西回滚干净,再重新来一遍。
同样的操作我在测试机上先走了一遍,线上只做验证过的部分。
这台环境是别人交接的,不少默认值被动过,只能一项项核。
别只看报错消失,验证要多做一步。磁盘占用稳定在可控范围,训练能完整跑完,最后只保留最近两个检查点。
提醒一点。只保存模型后无法精确续训,因为优化器状态丢了,需要断点续训的实验不能开这个选项。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。