检查点
Checkpoint
Checkpoint(检查点)是模型训练过程中定期保存的模型权重快照,可用于断点续训、模型评估或版本回滚。
详细解释
Checkpoint(检查点)是深度学习训练中的「存档点」。由于大模型训练成本极高(一次完整训练可能耗费数百万美元和数周时间),如果中途机器故障、数据错误、或者效果不佳,没有 Checkpoint 就意味着灾难性损失。
一个完整的 Checkpoint 通常包含:
- 模型权重(model.safetensors):训练得到的参数
- 优化器状态(optimizer.pt):Adam 的动量、二阶矩等
- 学习率调度器状态:当前 epoch、step 数
- 随机数种子:保证可复现
- 分词器配置:vocab.json、merges.txt
- 训练元数据:loss 曲线、超参数
Checkpoint 策略
| 策略 | 说明 | 适用场景 |
|---|---|---|
| 每 N 步保存一次 | 防止 OOM 后丢失进度 | 通用训练 |
| 只保存最优 | 监控 val_loss,只在更低时保存 | 微调、RLHF |
| Top-K 保留 | 仅保留最近 K 个,删除更早的 | 长期训练 |
| LoRA 增量保存 | 只保存 adapter 权重(KB 级) | 7B+ 大模型微调 |
微调中的 Checkpoint 实战
使用 HuggingFace Transformers 训练时:
from transformers import TrainingArguments
args = TrainingArguments(
output_dir="./checkpoints",
save_strategy="steps",
save_steps=500, # 每 500 步保存一次
save_total_limit=3, # 只保留最近 3 个
evaluation_strategy="steps",
load_best_model_at_end=True, # 训练结束自动加载最优
metric_for_best_model="eval_loss"
)
trainer = Trainer(model=model, args=args, ...)
trainer.train()
常见问题
LoRA 也需要 Checkpoint 吗?
需要,但 LoRA 权重通常只有几 MB-几十 MB,可以更频繁地保存(每 100 步)。唯元智创控制台提供 LoRA 训练托管,自动管理 Checkpoint 生命周期。
如何从 Checkpoint 恢复训练?
把 Trainer 的 resume_from_checkpoint 参数设为 True,或手动传入 checkpoint 路径。