LLaMA-Factory v1 怎么运行 LoRA DPO 训练
【免费下载链接】LlamaFactoryUnified Efficient Fine-Tuning of 100+ LLMs & VLMs (ACL 2024)项目地址: https://gitcode.com/GitHub_Trending/ll/LlamaFactory
在 LLaMA Factory 的 v1 训练中完成一次 LoRA DPO 训练:以 Qwen3-4B 为底模,用 pair 格式(chosen/rejected)偏好数据训练 LoRA 适配器,并把结果保存到指定输出目录。v1 目前支持 SFT 和 DPO 两种训练方式,DPO 用于对齐人类偏好,无需训练奖励模型。以下内容基于仓库自带的 LoRA DPO 示例配置 和 快速开始文档 整理。
环境准备
按 快速开始文档 给出的依赖表准备环境:
| 必需项 | 至少 | 推荐 |
|---|---|---|
| python | 3.11 | 3.12 |
| torch | 2.7.1 | 2.7.1 |
| torchvision | 0.22.1 | 0.22.1 |
| transformers | 5.0.0 | 5.0.0 |
| datasets | 3.2.0 | 4.0.0 |
| peft | 0.18.1 | 0.18.1 |
可选项:CUDA(NVIDIA GPU)11.6/12.2、deepspeed 0.18.4、flash-attn 2.5.6/2.7.2。文档中对应的安装命令:
# 安装 FlashAttention-2 支持 pip install flash-attn --no-build-isolation # 安装 DeepSpeed 支持 pip install deepspeed在LLaMA-Factory仓库根目录下从源码安装:
pip install -e .查看训练配置
示例配置 train_lora_dpo.yaml 的关键项:
model: Qwen/Qwen3-4B model_class: llm # PEFT Configuration peft_config: name: lora r: 16 lora_alpha: 32 lora_dropout: 0.05 target_modules: all # Kernel Config kernel_config: name: auto # FSDP Config dist_config: name: fsdp2 dcp_path: null ### data train_dataset: data/v1_dpo_demo.yaml ### training output_dir: ./outputs/test_lora micro_batch_size: 1 cutoff_len: 2048 learning_rate: 1.0e-5 max_steps: 10 ### sample sample_backend: hf max_new_tokens: 128几个需要留意的点:
peft_config声明 LoRA 超参(r=16、lora_alpha=32、target_modules: all);dist_config使用 fsdp2 分布式配置,kernel_config为 auto。max_steps: 10是示例中的快速验证值,正式训练时按需调整。train_dataset指向 data/v1_dpo_demo.yaml,内容如下:dpo_zh_demo: path: HuggingFaceH4/orca_dpo_pairs split: train_prefs converter: pair该数据集来自 HuggingFace,运行前需要能联网下载。如果换成自定义数据,文档要求参照 数据准备指南 配置,且 DPO 必须使用 pair 格式数据。
运行训练
在仓库根目录执行(快速开始文档以sft命令演示了同样的启用方式):
export USE_V1=1 llamafactory-cli dpo examples/v1/train_lora/train_lora_dpo.yaml说明:
llamafactory-cli可以用lmf作为快捷命令。也可以在不修改 yaml 的情况下用命令行追加参数覆盖配置,例如 示例文档 中的写法:
llamafactory-cli train examples/train_lora/qwen3_lora_sft.yaml \ learning_rate=1e-5 \ logging_steps=1使用
CUDA_VISIBLE_DEVICES(GPU)或ASCEND_RT_VISIBLE_DEVICES(NPU)选择计算设备;不设置时默认使用所有可见的计算设备。
结果验证
运行过程中的判断依据(均来自 DPO 训练器 dpo_trainer.py 的实际行为):
数据集格式校验:v1 的 DPO 入口会检查数据集首条样本,缺少
chosen_messages/rejected_messages字段时会直接报错:DPO training requires pair-format samples containing chosen/rejected responses. ... Please use pair data (e.g. a dataset with chosen_messages/rejected_messages).看到这个报错说明数据集不是 pair 格式,需要检查数据转换配置。
参考模型复用提示:LoRA 模式下,参考模型的 log-probs 复用底模(关闭适配器)计算,日志中会输出:
LoRA detected — reference log-probs will reuse the base model via disable_adapter().逐步指标:训练过程中会记录
rewards/chosen、rewards/rejected、rewards/accuracies、rewards/margins、logps/chosen、logps/rejected、logits/chosen、logits/rejected等指标,可用于观察训练状态。产物保存:训练跑完
max_steps后,训练器会把模型保存到配置的output_dir,即示例中的./outputs/test_lora,检查该目录下是否生成了训练产物即可。
限制与注意
- DPO 训练器目前只支持
cp_size == 1(源码中对其他取值抛出NotImplementedError)。 - DPO 数据必须是包含 chosen/rejected 的 pair 格式;使用 SFT 风格的普通指令数据会触发上文的数据集校验报错。
- 示例中的
max_steps: 10、micro_batch_size: 1只是快速冒烟测试的取值;cutoff_len、学习率等参数请按自己的显存和数据情况在 yaml 中调整。 - v1 阶段目前支持 SFT 和 DPO 两种训练方法;需要 DeepSpeed、FSDP、FlashAttention-2 等加速特性时安装对应可选依赖。
训练完成并确认outputs/test_lora有产物后,按快速开始文档给出的部署方式可以做推理验证:
llamafactory-cli chat --model_name_or_path path/to/your/model --template qwen其中path/to/your/model替换为实际的模型路径,qwen替换为与底模匹配的模板名。
【免费下载链接】LlamaFactoryUnified Efficient Fine-Tuning of 100+ LLMs & VLMs (ACL 2024)项目地址: https://gitcode.com/GitHub_Trending/ll/LlamaFactory
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考