前言
LLM 训练通常包含预训练、微调及 RLHF 环节。DPO 作为 RLHF 的一种主流方法,相比 PPO 和 GRPO,对硬件资源的需求更低,显存占用更优,适合入门实践。
环境准备
本教程基于以下配置:双卡 RTX 4070 (12G)、64G 内存、Ubuntu 24.04。模型选用 QWEN-3vl-2B(若无需多模态功能,可切换为纯语言模型)。
关于系统选择,虽然 Windows 也能运行,但在多卡训练及显存稳定性上,Linux 具有显著优势。建议长期投入大模型学习的朋友直接部署 Linux 环境,减少排查底层报错的时间成本。
注意:LLaMA-Factory 目前对 DeepSpeed 的最新版本适配可能滞后,若需分布式训练,请确认版本兼容性。
步骤一:加载数据集
我们使用 Hugging Face 上的医疗 DPO 数据集。通过 datasets 库即可快速加载。
from datasets import load_dataset
ds = load_dataset("HANI-LAB/Med-REFL-DPO", 'reasoning_enhancement')
print(ds['train'][:1])
执行后可见数据正常加载,结构清晰。
步骤二:数据预处理
LLaMA-Factory 需要特定的 JSON 格式。我们需要将源数据转换为包含 instruction, input, chosen, rejected 字段的结构。
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('arrow', data_files=dataset_path)
else:
dataset = load_dataset(dataset_path, name='reasoning_enhancement')
train_dataset = dataset['train']
output_data = []
for item in train_dataset:
if 'instruction' in item and 'chosen' in item and 'rejected' 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)

