
Soup在线DPO详解如何把评委模型放进训练循环让偏好对齐效果更稳【免费下载链接】SoupFine-tune LLMs from one YAML. Layer streaming trains an 8B model on a 4 GB laptop GPU.项目地址: https://gitcode.com/GitHub_Trending/soup12/SoupSoup 是一个一份 YAML 微调 LLM的开源项目soup train一条命令跑通全流程。它的Online DPOtask: online_dpo任务把 LLM 评委模型直接放进训练循环每一步由模型自己现场生成两个回答再让评委或奖励模型当场打分决出胜负——不再依赖人工标注的静态偏好数据这正是在线偏好对齐相比离线 DPO 的核心升级。为什么要把评委放进训练循环传统离线 DPO 的训练数据是事先写死的prompt / chosen / rejected三元组可参考 examples/data/dpo_sample.jsonl 中的示例。这意味着模型只在别人挑好的题上练习存在两个固有问题对比项离线 DPOSoup 在线 DPO数据来源静态人工偏好对模型每步现场生成两个回答训练分布与推理分布逐渐脱节始终 on-policy与当前模型行为一致标注成本需要大量人工标注只需 prompt评委自动选胜负数据格式prompt/chosen/rejected仅 prompt与 GRPO 相同在线 DPO 的循环是生成 → 评委裁决 → 胜者为 chosen、败者为 rejected → 计算 DPO 损失 → 更新模型。评委闭环让偏好信号始终来自模型当下的水平训练和推理看到的数据分布不再漂移这是效果提升的关键来源。评委闭环是怎么工作的Soup 的在线 DPO 由 src/soup_cli/trainer/online_dpo.py 中的OnlineDPOTrainerWrapper实现底层封装 TRL 的OnlineDPOTrainer。每个训练步大致经历四件事现场生成对每条 prompt用当前策略模型生成两个回答online_dpo_max_new_tokens控制长度默认 64评委裁决Soup 内置的JudgeEvaluatorsrc/soup_cli/eval/judge.py对两个回答打分或两两比较构造偏好对胜者作为 chosen、败者作为 rejected即时送入 DPO 损失支持sigmoid/ipo两种损失类型闭环更新dpo_beta默认 0.1控制偏离参考模型的强度模型向评委眼里的更好回答靠拢。值得注意的一个细节Soup 对评委做了**交换去偏swap-debiased**处理——只有把 A、B 顺序交换后两次比较结果一致才记录胜负有效降低评委因位置偏好产生的误判。同时数据侧很省心任何格式含{messages: [...]}多轮对话都会被自动抽取为纯 prompt多轮上下文完整保留。快速上手一份 YAML 跑通 Online DPO无需手写任何代码改几行配置即可官方文档见 docs/training.md 的 Online DPO 一节base: HuggingFaceTB/SmolLM2-135M-Instruct task: online_dpo data: train: ./data/prompts.jsonl # 只需 prompt无需标注偏好 training: online_dpo_judge: ollama://llama3.1 # 评委本地 Ollama 模型 online_dpo_loss_type: sigmoid online_dpo_max_new_tokens: 64 dpo_beta: 0.1 lora: { r: 8, alpha: 16, target_modules: auto }⚙️ 评委信号有两条路径二选一配置校验器会强制拦截都不填或都填的情况LLM 评委online_dpo_judge填一个 OpenAI 兼容端点ollama://、http://localhost均可零训练成本本地小模型即可当裁判奖励模型reward_model指向一个已训练的标量奖励模型适合已有 RLHF 流水线、追求稳定打分的场景。仓库内置了可直接运行的最小配方online-dpo-smollm2-135m见 src/soup_cli/recipes/catalog.py135M 参数的小模型就能完整验证生成 → 裁决 → 训练机制适合新手先在 CPU/小显存上把流程跑通再平移到 7B 的正式模型。显存与资源为什么小显存也能跑在线 DPO 因为每步要现场生成单样本显存开销约为离线 DPO 的 2 倍Soup 做了针对性处理batch_size: auto时会自动估算可承载的批次再额外减半避免生成阶段 OOM支持 LoRA 4bit/8bit 量化加载配合 Soup 招牌的 layer streaming分层流式加载8B 模型可在 4 GB 笔记本 GPU 上完成训练QLoRA 场景自动处理 k-bit 加载模型的稳定性问题fp32 LayerNorm 等这部分是 TRL 原生路径不会帮你做的。如何确认评委信号真的生效了一个常见的坑评委配了却没被真正调用。Soup 的冒烟测试 tests/test_issue300_online_dpo_train.py 就是专门验证这件事的——它跑真实的训练步并断言日志中出现rewards/chosen、rewards/rejected、rewards/accuracies、rewards/margins等指标。你在正式训练时同样可以观察这些rewards/*指标chosen 奖励应稳定高于 rejected两者的 margin分差逐渐拉大就是评委信号在起效的直观证据。适合谁、注意事项 在线 DPO 当前约束transformers后端 纯文本模态配置加载阶段即校验不会到训练中途才报错。官方文档也明确其验证状态为机制验证用合成评委在小模型上跑通闭环大规模生产级验证仍在社区推进中——建议正式使用前先跑online-dpo-smollm2-135m小配方确认评委端点连通、奖励指标正常再放大投入。相关入口速查训练器实现src/soup_cli/trainer/online_dpo.py官方训练文档Online DPO 章节docs/training.md端到端冒烟测试tests/test_issue300_online_dpo_train.py偏好数据格式参考examples/data/dpo_sample.jsonl【免费下载链接】SoupFine-tune LLMs from one YAML. Layer streaming trains an 8B model on a 4 GB laptop GPU.项目地址: https://gitcode.com/GitHub_Trending/soup12/Soup创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考