Colab 运行时回收后,内存中的模型、优化器和临时磁盘文件都可能丢失。LoRA 训练想从上次进度接着跑,需要把完整 checkpoint 保存在持久化存储中,并在新运行时重新加载同一基础模型和训练配置。
下载完整 Colab LoRA 断线续训 Notebook。通过 Colab 的“文件 → 上传笔记本”打开,选择 GPU 运行时,按单元格顺序执行。Notebook 自带模型载入、训练样本、保存、恢复、文件校验和重新加载 adapter 推理流程。
验证日期为 2026 年 11 月 7 日。本站用 CPU 微型 Qwen2 + LoRA 模型,在两个独立 Notebook 内核中验证了第 2 步保存、重启后恢复至第 4 步,以及 adapter 重新加载推理。Colab GPU 和 Google Drive 挂载未在该验证环境中执行。
先分清 adapter 与训练 checkpoint
| 保存内容 | 用途 | 续训需要检查 |
|---|---|---|
| LoRA adapter 权重与配置 | 配合原基础模型做推理 | adapter_model.safetensors、adapter_config.json |
| Trainer 状态 | 恢复进度与调度 | trainer_state.json、optimizer.pt、scheduler.pt、随机状态及训练参数 |
| 实验配置 | 重新构建相同实验 | 模型快照、依赖版本、数据校验值、LoRA 和训练参数 |
PEFT 的 adapter 文件主要保存适配器参数,载入时还需要基础模型。Trainer checkpoint 在此基础上保存继续训练所需的状态。文件格式可对照PEFT checkpoint 文档,恢复入口可对照Transformers Trainer 文档。
Notebook 的默认训练配置
示例采用公开的 Qwen2.5-0.5B-Instruct,LoRA rank 为 8,目标模块为 q_proj、v_proj,序列长度 256,单卡 FP16,每设备 batch 为 1,梯度累积 4 次,演示训练 16 个 optimizer steps。8 条自编问答仅用于验证流程,训练样本中的用户提示和 padding 均从 loss 中屏蔽。
这组配置方便先完成一次短训练。扩大任务时,先准备自己的数据并选择新的运行目录,再调整长度、batch 和训练步数。显存使用还取决于模型、实现与运行时,遇到 OOM 可以先缩短序列,再检查 batch 和其他显存占用。
Notebook 固定 transformers 4.57.6、peft 0.18.1、accelerate 1.12.0,并检查 PyTorch 至少为 2.6。首次训练记录实际 PyTorch 版本与模型 commit。新运行时使用同一份保存的配置,版本不一致时先恢复原环境。GPU 选择与资源入口见本站Colab GPU 使用指南。
首次运行时做什么
- 上传 Notebook,切换 GPU,运行依赖单元格。
- 挂载自己的 Google Drive,并确认运行目录。默认位于 MyDrive/tbr8-lora/qwen25-05b-lora-resume-v1。
- 载入固定快照的基础模型并添加 LoRA,检查可训练参数和样本数。
- 启动训练,观察每 4 步保存完成的提示。
- 检查 Drive 中 checkpoint 目录里的 COMPLETE.json,再继续长任务。
默认直接把较小的 LoRA checkpoint 写入 Drive,适合本文的短演示。更大的任务可以将本地保存与后台复制分开,但需要额外验证复制完成和文件一致性。Drive 的空间、配额和 I/O 会影响保存,相关限制见Colab FAQ。
保存中断时怎样选恢复点
最后一个 checkpoint 目录可能只写完一部分文件。Notebook 在 Trainer 保存结束后,计算文件 SHA-256,最后写入 COMPLETE.json。重连时逐个核对清单、必需文件和 global_step,再按步数选出最新的完整版本。目录编号更大但未通过校验时,会选择之前的有效 checkpoint。
保存策略使用 save_only_model=False,保留两个近期 checkpoint。校验值用于发现文件不完整或损坏,仍应只加载自己生成、来源可信的训练状态。若所有目录均不完整,Notebook 会停止,保留现场供检查。
1 2 | latest = last_complete_checkpoint() trainer.train(resume_from_checkpoint=latest) |
完整 Notebook 已定义上面的查找函数和 Trainer。恢复参数传给 train()。恢复前会重新载入基础模型并创建相同 LoRA 结构,由 Trainer 读入保存的 adapter、优化器、调度器和进度。
断线后从头运行,保持原目录
重连一个新的 GPU 运行时后,重新安装固定依赖、挂载相同 Drive,再按顺序运行全部单元格。基础模型文件可能需要重新下载,训练状态则来自持久化目录。不要把恢复时的 output_dir 指向新的空目录。
Notebook 会输出 start_step 与 final_step。若上次保存到第 8 步,恢复后应从保存的进度继续向 16 步推进。checkpoint 之间尚未保存的工作需要重新计算。不同 GPU、内核或随机实现可能影响数值,恢复训练状态并不保证跨硬件得到逐位一致的结果。
达到设定步数后,同一目录再次运行会提示训练已经完成。需要改变数据、模型或训练参数时,使用新的 RUN_NAME 建立新实验,便于保留两组配置和结果。
恢复后再做一次独立加载验证
Notebook 最后一节释放训练模型,按保存的 revision 重新载入基础模型,再通过 PeftModel.from_pretrained() 加载持久化 checkpoint 中的 adapter,进行简短生成。这样能检查保存结果是否可以独立读取。小样本演示的文本输出用于确认链路,不作为任务质量评测。
| 遇到的问题 | 建议检查 |
|---|---|
| 重连后找不到 checkpoint | Drive 账号、挂载目录和 RUN_NAME 是否与上次一致 |
| 训练又从 0 开始 | 是否使用了空目录,是否只保存了 adapter,是否真正传入恢复路径 |
| run_config 不一致 | 依赖、模型、数据和训练参数是否被修改 |
| 最新 checkpoint 校验失败 | 最后一次写入是否中断,之前的完整版本是否可用 |
| Drive 报 I/O 或配额错误 | 可用空间、文件数量与读写配额 |
确认恢复流程后,再投入较长训练。保存间隔可以按“可接受损失的训练时间 ÷ 每步耗时”估算,再结合存储写入耗时调整。训练结束后保存完整目录和配置,方便之后复查。
汤不热吧