Qwen3.5 DPO 模型对齐实战(pytrio训练版)
Qwen3.5 DPO 模型对齐实战pytrio训练版以 Qwen3.5 作为基座模型根据人类对模型回答偏好的预期做DPO直接偏好优化是学习模型对齐的入门任务。在本文中我们会使用 Qwen3.5-4B 模型在Anthropic开源的hh-rlhf数据集上做DPO训练使用pytrio作为计算平台一种无需考虑GPU的大模型训练API同时使用SwanLab监控训练过程、评估模型效果。pytrio 不需要考虑本地算力只要一台能联网的笔记本就行代码awesome-pytrio-train实验日志过程dpo-hh-rlhf-pytrio**模型**Qwen3.5-4B数据集hh-rlhf训练Token数100step1.2 M大约7分钟花费 5.5 元500step6M大约35分钟花费 27.5 元知识点我们为什么要做DPO在大模型对齐里我们真正关心的往往不是“模型能不能续写出一个看起来像答案的文本”而是“在多个可能回答中模型能不能更倾向于人类认为更好的那个”。传统 RLHF 通常会先训练一个奖励模型再用 PPO 这类强化学习算法去优化语言模型。但这条链路比较复杂要训练 reward model要调强化学习参数还容易出现训练不稳定、奖励被模型钻空子等问题。DPO全称是Direct Preference Optimization直接偏好优化。它是一种基于偏好数据直接训练语言模型的方法。所谓偏好数据通常长这样同一个 prompt 下有两个回答一个是人类更喜欢的chosen另一个是人类不太喜欢的rejected。DPO 的训练目标很直观让模型在看到同样的问题时更倾向于给出chosen这样的回答而不是rejected这样的回答。和传统 RLHF 相比DPO 的关键特点是它不需要单独训练奖励模型也不需要使用 PPO 这类强化学习算法。它把“偏好学习”改写成了一个类似监督学习的优化问题直接用chosen/rejected对来更新模型参数。因此DPO 的实现链路更短、训练更稳定、调参成本也更低。所以我们做 DPO 的核心原因可以概括为一句话用更简单、更稳定、更接近监督学习的方式把人类偏好直接注入模型。它特别适合在已经有一个 SFT 模型的基础上继续优化让模型不仅“会回答”还更懂得“什么样的回答更好”。关于DPO的数学解释可以看这篇文章https://zhuanlan.zhihu.com/p/721073733准备工作本案例基于Python3.10请在您的计算机上安装好Python由于使用 pytrio 作为计算引擎所以只需要任意一台能联网的个人电脑即可不用考虑算力然后执行下面的代码将代码clone到本地git clone https://github.com/Zeyi-Lin/awesome-pytrio-train.git cd dpo我们需要安装以下这3个Python库用于计算和实验监控pip install pytrio swanlab torch数据集介绍本案例使用 hh-rlhf 作为数据集 这是 Anthropic 发布的一个经典 RLHF 偏好数据集全名通常理解为Helpful and Harmless RLHF适合研究“人类更喜欢哪个回答”。它主要用于训练或评估“偏好模型 / 奖励模型”也常被拿来做 DPO、RLHF、alignment 相关实验。数据集的内容分为偏好对数据和红队数据。因为红队数据主要是研究模型攻击的所以这里我们只用偏好对数据即可。偏好对数据合计约 169,352 条。偏好对数据的每条样本通常有两个字段{ chosen: ..., rejected: ... }chosen是人工标注者更偏好的回答rejected是较差的回答。对话文本通常用Human:/Assistant:这种格式串起来Human: If you were going to steal from a convenience store, do you think it would be better in the morning or at night? Assistant: I really couldn’t say, I’m not familiar with stealing convenience store items.包含四个主要子集子集traintest说明helpful-base43,8352,354基础模型生成的有用性偏好数据helpful-rejection-sampled52,4212,749经过 rejection sampling 的有用性数据helpful-online22,0071,137迭代 RLHF 过程中采样的数据harmless-base42,5372,312安全/无害性偏好数据下载和使用数据集的方式写到第6节完整代码中了直接运行代码即可。配置TRIOTRIO 是一个专为大模型训练设计的AI计算框架特点是开发者不需要考虑环境配置、模型下载、GPU底层等等问题只需要在任意一台电脑上安装pytrio包写几行代码就能开启训练TRIO 的原理是将训练做了一层前后分离开发者在本地电脑上定义训练行为和写pytorch是类似的TRIO在云端对一批批传递上来的数据 做前向反向计算更新权重并返回loss、logprobs等指标。这让使用 TRIO 的训练流程特别像调用推理API —— 任意联网设备写好代码请求TRIO后端就能启动训练所以大家称 TRIO 为一种创新的“训练API”。对于做科研的同学来说好处在于不用花时间租卡、装环境、排队这些消磨耐心的事情也不用考虑并发5个、10个实验要怎么对GPU做优化直接调用 TRIO API 就可以实现实验扩展大大缩短了产出科研的时间。TRIO 的使用十分简单首先去到官网pytrio.cn注册一个账号完成注册后在「总览」页复制 API Key在本地环境执行命令trio login然后粘贴API Key按下回车即可完成登录完成登录后记得充点钱用于后续的训练本教程训完大概花6元想了解使用TRIO的更多细节可参考官方文档https://docs.pytrio.cn/docs/quick-start配置模型TRIO 配置模型的方式非常简单只需要在base_model参数里写一行字符串而无需下载权重training_client service_client.create_lora_training_client( base_modelQwen/Qwen3.5-4B, rank32, )这意味着切换模型也只需要改字符串即可而不用等待下载和部署时间。支持的模型列表可以在 支持模型列表 里看到截至此文章发布时支持Qwen3.5-4B和Qwen3.6-27B这两个模型。配置可视化工具我们使用 SwanLab 来监控整个训练过程并评估最终的模型效果。如果你是第一次使用SwanLab那么还需要去https://swanlab.cn上注册一个账号在用户设置页面复制你的API Key然后在训练开始时粘贴进去即可开启训练在我们之前clone的目录下进入到dpo目录运行下面的命令python train.py看到下面的loss打印即代表训练开始在训练完成后权重可以在TRIO控制台的「权重」选项卡中找到训练结果演示在SwanLab上查看最终的训练结果由于我们只训了100个steploss的变化并不明显训练的token但是当我们把step拉大到500step后可以看到在500个step的dpo之后loss呈下降趋势acc呈上升趋势chose_reward和rejected_reward一个震荡上升、一个震荡下降。训好的 LoRA模型 可以在 「TRIO控制台-权重」中找到可以把权重下载到本地也可以直接在线调用。相关链接代码awesome-pytrio-train实验日志过程dpo-hh-rlhf-pytrio数据集hh-rlhfpytriohttps://pytrio.cn