100 步 GRPO 微调:350M 小模型 IFStruct 得分从 22.6% 升到 29.7%
Hugging Face 博客用约 500 条样本、100 步 GRPO 微调 LFM2.5-350M,把其 IFStruct 结构化输出得分从 22.6% 提升到 29.7%。
Hugging Face 博客发布了一份完全公开、成本极低的教程,目标是让一个 3.5 亿参数的小模型在结构化输出上更可靠。作者使用 TRL 库,通过组相对策略优化(GRPO)对 LFM2.5-350M 进行微调,并在 IFStruct 基准上评测,得分从 22.6% 提升到 29.7%。
整个训练规模刻意压得很小:约 500 条样本、100 个训练步,可以跑在 Colab 或 Kaggle 的免费 16GB GPU 上。相关代码已发布在 GitHub。
基线与奖励函数设计
为了让对比处在同一套推理栈内,作者在 MacBook 上用 llama.cpp 以 BF16 GGUF 格式本地部署模型。IFStruct 发布博客给出 LFM2.5-350M 的成绩是 21.1%,而本地实测为 22.6%,教程以后者作为基线。基准测试使用 2000 条样本。
训练数据来自 nvidia/Nemotron-RL-instruction_following-structured_outputs,其中每条提示都配有目标 JSON Schema 和预期字段数量。由于 Nemotron 的数据分布与 IFStruct 评测不同,作者对提示做了增强,以弥合两者之间的两处差异。
模型上挂载了 LoRA 适配器。由于 LFM2.5 采用注意力与卷积混合架构,配置中针对的是 LFM 专有的模块名称。作者定义了三个奖励函数,取值范围均为 [0, 1],分别评判每条生成结果的结构正确性,并按 1.0、0.5、2.0 的权重加权求和;每个提示组生成 8 条结果。训练过程中三个奖励分量全部上升,与参考模型的 KL 在预热后脱离零值,被截断的生成比例始终接近零。
提升出现在哪里
收益正好落在训练所针对的方向:JSON 通过率从 18.0% 升至 31.9%,YAML 基本没有变化。教程指出,这一成绩仍低于 Qwen3.5-2B 的 33.15%,但说明针对具体任务的轻量微调,可以让小模型接近体量大数倍的模型。
完整流程与 notebook 见 Hugging Face 原文。