引言
LLM 训练通常包含预训练、微调和 RLHF 环节。DPO(Direct Preference Optimization)属于 RLHF 中的一种主流方法,相比 PPO 和 GRPO,DPO 对硬件资源需求更低,显存占用更少,适合在有限资源下进行偏好对齐训练。
环境准备
建议使用 Linux 系统(如 Ubuntu),Windows 环境下多卡训练可能遇到显存不稳定等问题。
硬件参考:双显卡(如 RTX 4070 12G*2)、64GB 内存。 模型示例:Qwen-VL-2B(支持多模态,纯语言任务可选用对应语言模型)。
注意:LLaMA-Factory 目前对 DeepSpeed 版本有兼容性要求,若使用分布式训练,请确认当前版本支持的 DeepSpeed 范围。
STEP 1 从 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 需要特定的 JSON 格式数据。源数据为 Arrow 格式,需转换为如下结构:
[
{
"instruction": "人类指令",
"input": "人类输入",
"chosen": "优质回答",
"rejected": "劣质回答"
}
]
编写 Python 脚本完成转换:
import json
from datasets import load_dataset
import os
def convert_arrow_to_json(dataset_path, output_json_path):
if os.path.exists(dataset_path):
dataset = load_dataset(, data_files=dataset_path)
:
dataset = load_dataset(dataset_path, name=)
train_dataset = dataset[]
output_data = []
item train_dataset:
item item item:
json_item = {
: item[],
: item.get(, ),
: item[],
: item[]
}
output_data.append(json_item)
(output_json_path, , encoding=) f:
json.dump(output_data, f, ensure_ascii=, indent=)
()
__name__ == :
arrow_file_path =
output_json_path =
convert_arrow_to_json(arrow_file_path, output_json_path)



