前言
LLM 训练通常包含预训练、微调及 RLHF 等环节。DPO 属于 RLHF 中的一种方法,关于 RLHF 主流方法有 PPO、DPO、GRPO 等。 由于 DPO 对硬件的需求最小,显存占用最低,因此我们优先采用 DPO 进行训练。
硬件信息
- 显卡:4070 12G * 2
- 内存:64G
- 操作系统:Ubuntu 24.04
- 模型:QWEN-3vl-2B(因该模型已进行过多模态任务 SFT,故选择 VL 模型;无图片输入需求的同学可下载纯语言模型)
本篇教程仅关于 DPO 训练,请提前配置好环境并下载 LLaMA-Factory。注意:若使用分布式训练,LLaMA-Factory 目前仅支持 DeepSpeed 1.0.0-1.6.0(截至当前版本尚未完成对 DeepSpeed 最新版本的适配)。
STEP 1 从 Hugging Face 下载数据集
这里采用 Hugging Face 中的一个医疗 DPO 数据集。
from datasets import load_dataset
ds = load_dataset("HANI-LAB/Med-REFL-DPO", "reasoning_enhancement")
print(ds['train'][:1])
加载成功后,数据格式如下所示:

STEP 2 数据预处理
由于需要使用 LLaMA-Factory 框架进行 DPO 训练,需要将源 Arrow 格式的文件转换为 LF 能识别的 JSON 格式。官方文档中的规范格式如下:
[ { "instruction": "人类指令(必填)", "input": "人类输入(选填)", "chosen": "优质回答(必填)", "rejected": "劣质回答(必填)" } ]
编写 Python 程序完成格式对齐:


