3、批量预测与结果保存
3.1 认识两份预测配置
一条条复制文章适合初步观察;面对 200 条测试数据,可以让程序依次读取输入、调用模型,再把回答写入文件。这就是批量预测,不需要重新训练。
测试数据已在第 31 章上传到 AutoDL:
/root/autodl-tmp/LLaMA-Factory/data/keywords-clean/keywords_test.jsonl它的登记名是 keywords_test。本轮比较期间,题目、参考答案和数据划分保持不变,这就是固定测试集。
在本地课程目录的 案例与源码-4-微调/configs/ 中,查看这两份预测配置:
- 基线预测配置:
keywords_clean_predict_base.yaml。 - Adapter 预测配置:
keywords_clean_predict_lora.yaml。
这里的两份配置只生成回答,不更新模型参数。
<details> <summary>查配置时展开:为什么命令名含 train,却只做预测</summary>先确认决定任务行为的三个开关:
| 配置字段 | 中文含义 | 两份配置中的安排 |
|---|---|---|
do_train | 是否执行训练 | 不启用,不更新模型参数 |
do_predict | 是否执行预测 | true,读取指定数据并运行预测 |
predict_with_generate | 预测时是否生成回答 | true,让模型生成文本,供后续关键词评分 |
配置中的 stage: sft 指定所用任务流程,是否实际训练仍由上述开关决定。llamafactory-cli train 中的 train 也是统一入口的名称;这两份配置交给它时执行的是预测。
再看两组配置的关键差别:
| 配置项 | 基线预测 | Adapter 预测 |
|---|---|---|
model_name_or_path | Qwen/Qwen3-0.6B | 相同 |
adapter_name_or_path | 不填写 | saves/Qwen3-0.6B-Thinking/lora/keywords-clean |
output_dir | 末级目录为 keywords-clean-test-base | 末级目录为 keywords-clean-test-lora |
两组只改变是否加载 Adapter,回答分别保存。配套条件为同一测试集、同一模板、FP16、每批 4 条、关闭采样、最多生成 256 个 token;完整字段如下,执行前逐项核对即可。
<details> <summary>跟做时核对:两组共同使用的预测设置</summary>基础模型不变,第二组多加载一个 Adapter,并把结果写入另一处,避免两组回答混在一起。两份文件中的其余主要设置相同:
| 配置项 | 值 | 用途 |
|---|---|---|
eval_dataset / max_samples | keywords_test / 200 | 使用已登记的完整测试集 |
template / enable_thinking | qwen3_nothink / false | 保持对话组织方式一致 |
cutoff_len | 2048 | 数据预处理的长度上限 |
per_device_eval_batch_size | 4 | 两组均每批处理 4 条;200 条共 50 批 |
infer_dtype / fp16 / bf16 | float16 / true / false | 明确写入精度设置 |
fp16_full_eval | true | 纯预测时将模型参数转换为 FP16 |
do_sample / max_new_tokens | false / 256 | 关闭采样,限制回答长度 |
repetition_penalty / seed | 1.0 / 42 | 保持重复惩罚与种子一致 |
生成长度应足够容纳关键词列表。换成自己的任务时,先在验证集检查回答是否经常被截断,再选定两组共同使用的上限。本次预测脚本还会检查实际参数精度,确认两组都以 FP16 运行。
这里用两份 YAML 保存完整条件。离开 Chat 页后,需要在预测配置中明确填写模板和生成参数,Chat 页的设置不会自动完整传入批量任务。
<details> <summary>选读:预测精度与页面设置的核对</summary>fp16 是混合精度开关;fp16_full_eval 用于本次不训练的评估过程,将模型参数转换为 FP16。课程所用版本的模型加载器会按权重文件自动选择初始精度,因此除配置中的 infer_dtype: float16 外,还需要读取预测时的实际参数精度。
固定种子便于复查本次设置,但跨硬件、跨推理框架仍可能产生输出差异。生成长度也应在验证阶段选定,测试期间保持两组相同。
LLaMA-Factory 的 **Evaluate & Predict(评估与预测)**页也能发起批量任务。页面参数与 CLI 的关系见第 31 章;具体传递过程可查看课程所用版本的 WebUI 参数组装代码。
</details>3.2 在 AutoDL 运行预测
先在 Chat 页卸载模型,释放显存。打开 AutoDL 的 JupyterLab 终端,进入项目、激活训练环境,并准备存放预测配置的目录:
cd /root/autodl-tmp/LLaMA-Factory
source .venv/bin/activate
mkdir -p configsconfigs/ 是本课程额外准备的目录;只按第 31 章 WebUI 路线操作时,它可能还不存在。mkdir -p 可以创建目录,目录已存在时会保留其中的文件。
在 JupyterLab 左侧文件面板进入 LLaMA-Factory/configs/,上传本机案例目录中的 keywords_clean_predict_base.yaml 和 keywords_clean_predict_lora.yaml;再回到 LLaMA-Factory/ 根目录,上传 audit_keywords_prediction.py。已经上传则核对 YAML 是否包含本节的 fp16_full_eval 和 batch 设置;若 Adapter 目录名不同,先修改第二份配置的 adapter_name_or_path。
保持终端位于 LLaMA-Factory/,检查三个文件都在预期位置:
ls configs/keywords_clean_predict_base.yaml configs/keywords_clean_predict_lora.yaml audit_keywords_prediction.py正常时会列出三个文件路径。如果出现 No such file or directory,先按报错路径检查上传位置和文件名,再继续。
先运行原始模型:
USE_MODELSCOPE_HUB=1 python audit_keywords_prediction.py configs/keywords_clean_predict_base.yaml确认第一组没有报错并正常结束,再运行 Adapter 组,不要同时启动两份 GPU 任务:
USE_MODELSCOPE_HUB=1 python audit_keywords_prediction.py configs/keywords_clean_predict_lora.yaml这个脚本调用 LLaMA-Factory 生成回答,并将实际参数精度、预测条数和数据核对结果保存为 prediction-evidence.json。输出目录已存在或条件不符时,脚本会停止。
3.3 保存与下载预测文件
运行成功后,分别查看下面两个位置:
saves/Qwen3-0.6B-Thinking/lora/
├── keywords-clean-test-base/generated_predictions.jsonl
└── keywords-clean-test-lora/generated_predictions.jsonlgenerated_predictions.jsonl 保存逐条输入、模型生成的回答和参考标签。先在日志中确认任务成功结束,再检查文件是否包含本次结果。
通过 JupyterLab 左侧文件面板进入对应目录,右键下载各自的 generated_predictions.jsonl。在本机案例目录中新建自己的实验目录,例如下面的 keywords-my-run-1,把文件分别放进去:
案例与源码-4-微调/results/keywords-my-run-1/
├── base/generated_predictions.jsonl # 原始模型回答
└── lora/generated_predictions.jsonl # 加载 Adapter 后的回答用父目录 base 和 lora 区分这两份同名文件。自己的实验使用新目录;课程附带的 results/keywords-clean/ 保持原样。下一节将读取这里下载的预测,核对条数并评分。
课程附带的原始模型预测 案例与源码-4-微调/results/keywords-clean/base/generated_predictions.jsonl 和 LoRA 预测 案例与源码-4-微调/results/keywords-clean/lora/generated_predictions.jsonl,各有完整的 200 条结果。它们使用同一份 keywords_test.jsonl,实际参数均为 FP16,预测 batch 均为 4;模板、输入长度和生成设置也保持一致。LoRA 使用本次 keywords-clean 数据训练后选出的 checkpoint-150,不是其他数据版本的 Adapter。
下载自己的预测结果时,同时保留实际配置、数据指纹和完成条数,方便核对比较条件。配套目录中的 prediction-evidence.json 展示这些检查项;下一节使用原始回答评分。