8、训练启动与日志检查
完成启动前检查后,选择 WebUI 或第 8.3 节的 CLI(命令行)入口,同一轮只启动一次。
8.1 参数预览与启动前检查
在 Train 页面点击“预览命令”。它不会开始训练,而是把刚才的选择转换成训练程序接收的参数。先按三组核对:
- 题目与模型: 模型、模板及训练数据正确,独立验证集已传入,测试集没有参与。
- 训练安排: batch、累积、轮数和精度与第 7 节一致,验证与保存间隔相同。
- 结果位置: 输出到本轮新目录,没有误挂旧 Adapter 或恢复旧检查点。
点击下面的核对表,与页面预览逐项比较;这里检查是否生效,不再重新解释参数原理。
dataset_dir = data/keywords-clean # 数据目录
dataset = keywords_train # 训练集登记名
eval_dataset = keywords_validation # 验证集登记名
val_size = 0 # 不再自动划分验证集
max_samples = 1600 # 最大样本数
per_device_train_batch_size = 4 # 每张卡每个小批次处理的样本数
gradient_accumulation_steps = 8 # 更新前累积的小批次数
num_train_epochs = 3 # 训练轮数
save_steps = 50 # 每隔多少个更新步保存检查点
eval_steps = 50 # 每隔多少个更新步验证一次
load_best_model_at_end = True # 结束时加载最佳检查点
template = qwen3_nothink # 对话模板
enable_thinking = False # 关闭思考模式
fp16 = True # 开启 FP16 混合精度val_size 的默认零值有时不显示,但不能出现非零值。核对完整输出路径与第 7.1 节一致,且没有 adapter_name_or_path、resume_from_checkpoint;参数不符时回页面修正。
下面的命令预览中,上半段是模型与训练数据,下半段是验证集与 LoRA 设置。


先在上半段核对 dataset_dir、dataset 和 fp16,再在下半段核对 eval_dataset、eval_steps 和 lora_target。
开始前确认三件事: 第 3.4 节的实际 GPU 运算已通过;第 6 节上传的文件校验无误;输出目录没有已有训练结果。
本章下文命令都以 keywords-clean 为实验名。复做时若改了输出目录,也要把查看日志、读取检查点和打包命令中的路径一起更改。
8.2 在 WebUI 中启动
- 在页面下方的“配置路径”填写一个新的文件名,例如
keywords-clean-webui-20260907.yaml,再点击 保存训练参数。确认页面出现“训练参数已保存至”及对应路径,不覆盖以前保存的同名文件。 - 确认预览命令正确后,在 Train 页点击一次“开始”。不再同时执行第 8.3 节的启动命令。
- 等待页面日志更新。首次运行可能先下载模型和处理数据,暂时没有 Loss 曲线是正常的。

输出目录存训练结果,配置路径存页面设置。保存后,页面应提示 训练参数已保存至:llamaboard_config/keywords-clean-webui-20260907.yaml,再到 JupyterLab 中确认文件存在。
这里保存的是 供 WebUI 重新加载的页面设置;CLI 启动使用第 8.3 节的课程训练 YAML。本版本启动 WebUI 训练时,还会把解析后的参数写入结果目录的 training_args.yaml。重新加载页面设置后,仍需核对模型路径、输出目录和命令预览。配置保存与启动实现
如果页面日志看不全,可以在另一个 AutoDL 终端读取本轮 WebUI 训练日志:
tail -n 80 /root/autodl-tmp/LLaMA-Factory/saves/Qwen3-0.6B-Thinking/lora/keywords-clean/webui_subprocess.logtail -n 80 显示日志末尾 80 行。文件暂时不存在时,检查页面是否已创建训练进程、输出目录是否改过;CLI 日志位置见下一节。
需要提前结束训练时: 回到 LLaMA-Factory 的 Train 页底部,点击橙色“开始”右边的红色 “中断”,等待日志显示任务中断,训练进度不再增长。这里不是 AutoDL 控制台的关机按钮。

“中断”不保证额外保存一次检查点,已经保存了哪些文件要到输出目录确认;不要把当前进度直接当成已保存进度。若训练是按下一节在终端启动的,则到启动该训练的 AutoDL 终端按 Ctrl+C,不是在这个页面点“中断”。
8.3 使用 YAML 启动(可选)
使用课程训练 YAML 案例与源码-4-微调/configs/keywords_clean_train.yaml,按下面的步骤上传、检查并运行。
先在 AutoDL 终端准备配置和日志目录:
cd /root/autodl-tmp/LLaMA-Factory
source .venv/bin/activate
mkdir -p configs logs在 JupyterLab 左侧打开 LLaMA-Factory/configs/,上传本机 案例与源码-4-微调/configs/keywords_clean_train.yaml。如果同名文件已经存在,先打开比较,不直接覆盖。
上传后查看内容,重点核对模型、数据路径、验证集和输出目录:
sed -n '1,100p' configs/keywords_clean_train.yaml如果前面改用了本地模型路径,就在这份 YAML 的 model_name_or_path 中同步修改;页面上的修改不会自动写回这份文件。确认后,在同一个 AutoDL 终端运行:
(
set -e
if [ -e saves/Qwen3-0.6B-Thinking/lora/keywords-clean ] ||
[ -e logs/keywords-clean-train.log ]; then
printf '输出目录或日志已经存在,请先核对;本次不启动训练。\n'
exit 1
fi
OMP_NUM_THREADS=4 USE_MODELSCOPE_HUB=1 \
llamafactory-cli train configs/keywords_clean_train.yaml \
> logs/keywords-clean-train.log 2>&1
printf '训练命令正常结束,请继续检查日志和输出文件。\n'
)前面的判断避免覆盖同名实验。USE_MODELSCOPE_HUB=1 指定模型下载来源,OMP_NUM_THREADS=4 设置 CPU 线程数;> ... 2>&1 把运行输出和报错一起写进日志。括号让这段检查在单独的子 shell 中执行,失败时不会关闭你的终端。
训练期间这个终端会等待,不一定持续显示文字,因为输出已经写入文件。保持它运行,在另一个 AutoDL 终端查看:
tail -n 80 /root/autodl-tmp/LLaMA-Factory/logs/keywords-clean-train.log需要持续观察时,可把 -n 80 换成 -f;在查看日志的终端按 Ctrl+C 只会退出查看,不会停止另一个终端中的训练。本例没有使用后台启动,训练终端不要关闭;如果没有出现“训练命令正常结束”,先打开日志末尾查错。
8.4 启动日志与训练进度
启动后,按日志检查模型加载、数据处理与训练进度。自己的日志、检查点和下一章加载的 Adapter,都以第 7.1 节的本轮目录为准。 下方 WebUI 截图和 CLI 数字来自分别保存的两次演示,不能把它们混成自己的一次运行。
<details> <summary>示例文件对应关系</summary>文字日志、独立 Loss 图和第 32 章评估对应 CLI 示例 keywords-clean;WebUI 页面截图对应 keywords-clean-webui-20260908。两次示例使用相同数据与核心参数,各训练 150 步,但输出目录和 Adapter 分别保存。
配套文件均在 案例与源码-4-微调/results/ 下。自己跟做时,始终使用第 7.1 节设置的输出目录;可在配套文件说明中查找示例资料。
| 日志所处阶段 | 这时在做什么 | 主要看什么 |
|---|---|---|
| 模型下载、加载 | 准备基础权重和分词器 | 模型是不是 Qwen3-0.6B,是否有下载或依赖错误 |
| 数据读取、预处理 | 读取登记文件并处理样本 | 训练文件是不是 keywords_train,是否有格式错误或样本被丢弃 |
| 训练启动统计 | 汇总本轮训练安排 | 样本数、LoRA 参数量、batch、梯度累积、总步数 |
| step 开始增长 | 正在更新参数 | 进度、Loss、学习率、耗时和预计剩余时间 |
先看启动统计。
Num examples = 1,600
Num Epochs = 3
Num update steps per epoch = 50
Instantaneous batch size per device = 4
Total train batch size (w. parallel, distributed & accumulation) = 32
Gradient Accumulation steps = 8
Total optimization steps = 150
Number of trainable parameters = 5,046,272核对样本数 1,600、总步数 150、有效批次 32,以及 LoRA 可训练参数量。同一日志记录的可训练参数比例约为 0.8395%。
WebUI 演示:启动与训练进度。

页面日志中也应出现这些统计,随后 step 与 Loss 持续更新。
若总步数与预期不符,检查选中的数据、验证比例、序列打包和实际保留的样本数。
进度条中的 当前步数/总步数 表示完成了多少次更新;时间区域一般同时显示已用时间与预计剩余时间。开始几步还在预热,速度可能不稳定,稍后再判断耗时。s/it 是每次迭代花费的秒数,it/s 则是每秒完成的迭代数,要连单位一起看。
本章每 5 步记录日志,每 50 步验证和保存;到验证步骤时,进度会暂缓,等待验证完成后继续。

图中的输出目录标明当前实验,Running 50/150 表示已完成 50 次参数更新,右侧显示已记录的训练 Loss。
8.5 Loss 曲线与结束状态
确认结束状态。 页面应显示“训练完毕”,再检查 trainer_state.json 中的完成步数、最佳检查点和输出目录中的 Adapter 文件。下图示例完成 150 步,选择了 checkpoint-150:

在自己的结果目录中打开 training_loss.png 和 training_eval_loss.png,分别查看训练和验证损失;具体读法见第 30 章的日志与曲线说明。数值记录在同目录的 trainer_log.jsonl 和 trainer_state.json 中。
再看 Loss 图与结束统计。


| 统计项目 | 示例结果 |
|---|---|
| 完成步数 | 150 |
| 最佳检查点的验证 Loss | 1.5880 |
| Trainer 记录的训练耗时 | 519.8399 秒,约 8 分 40 秒 |
| 最佳检查点 | checkpoint-150 |
表中耗时仅指 Trainer 统计的训练过程,不含安装、上传和备份。日志到达 150/150 后,还要加载最佳检查点、保存最终 Adapter,并完成验证;评估汇总保存在 eval_results.json。
完成检查: 进度到达末尾,日志给出结束与保存信息,再按第 9 节确认产物完整。关键词抽取效果留到第 32 章检查。
<details> <summary>出现绘图指标缺失或显存分配告警时</summary>No metric eval_accuracy to plot:表示没有eval_accuracy可供绘图;课程按eval_loss验证,不要求一定生成准确率曲线。检查实际记录的指标与训练结束状态。memory allocation failed with OOM:核对后续步数是否增长、进程是否继续运行,以及验证和保存是否完成。只看这一行不能判断整次训练是否中止;若进度停住或进程异常退出,按第 33 章排查。
若在处理训练批次时显存不足,可先将 batch 改为 2、梯度累积改为 16,维持有效批次 32;若在权重加载时就不足,检查模型大小、精度及已有占用。第 30 章计算器的 9.8 GB 仅为估算,自己的资源占用需按第 33 章的方法观察。
</details>