LLaMA-Factory训练策略:SFT/RM/PPO/DPO/KTO全流程对比
LLaMA-Factory作为易于使用的大型语言模型(LLM)微调框架,支持多种训练策略,包括监督微调(SFT)、奖励模型(RM)训练、近端策略优化(PPO)、直接偏好优化(DPO)和知识微调优化(KTO)。本文将对比这些策略的核心原理、适用场景及实现方式,帮助用户选择合适的训练方案。
训练策略概览
LLaMA-Factory的训练模块结构清晰,各策略对应独立实现。核心训练逻辑位于src/llamafactory/train/目录,包含SFT、RM、PPO、DPO和KTO五个子模块,每个模块均由训练器(trainer.py)和工作流(workflow.py)组成,便于扩展和维护。
策略定位与关系
各策略详解与对比
1. 监督微调(SFT)
原理:使用标注数据直接优化模型参数,使模型学习特定任务的输入输出模式。
适用场景:模型初始化、基础能力构建、特定任务适配。
SFT的核心实现位于src/llamafactory/train/sft/,通过SFTTrainer类定义训练逻辑。关键功能包括:
- 支持LoRA、QLoRA等参数高效微调方法
- 集成多种优化器(如Adam、Galore)和学习率调度器
- 提供自定义损失函数和评估指标
配置示例:
examples/train_lora/llama3_lora_sft.yaml定义了Llama3模型的SFT训练参数,包括数据路径、模型超参和训练配置。
2. 奖励模型训练(RM)
原理:训练模型对回答质量打分,输出奖励值,为后续强化学习提供反馈。
适用场景:偏好对齐、构建评估基准、PPO的前置步骤。
RM训练模块位于src/llamafactory/train/rm/,RMTrainer类实现核心逻辑:
- 采用对比损失(如Pairwise Ranking Loss)
- 支持多轮对话奖励建模
- 集成价值头(Value Head)网络
数据格式:
奖励模型训练需成对样本,示例数据见data/dpo_en_demo.json,包含"chosen"(优质回答)和"rejected"(劣质回答)字段。
3. 近端策略优化(PPO)
原理:结合策略梯度和价值函数,通过与环境交互(生成回答→获取奖励→更新策略)优化模型,平衡探索与利用。
适用场景:强化学习阶段、复杂偏好对齐、动态环境适应。
PPO实现位于src/llamafactory/train/ppo/,包含:
PPOTrainer:定义策略网络和价值网络更新逻辑ppo_utils.py:提供奖励计算、模型替换等工具函数- 支持分布式训练和离线奖励信号
训练流程:
- 策略网络生成回答
- 奖励模型打分
- 计算优势函数和策略梯度
- 执行PPO剪辑更新
4. 直接偏好优化(DPO)
原理:无需奖励模型,直接通过偏好数据优化策略,最小化模型输出与人类偏好的KL散度。
适用场景:数据有限时的偏好对齐、简化训练流程、高效调优。
DPO模块位于src/llamafactory/train/dpo/,DPOTrainer核心功能:
- 实现DPO、IPO、SDPO等变体损失函数
- 支持参考模型(Reference Model)对比
- 兼容LoRA等参数高效微调方式
损失函数示例:
def compute_preference_loss(self, policy_chosen_logps, policy_rejected_logps, reference_chosen_logps, reference_rejected_logps):
# DPO损失计算逻辑
chosen_rewards = (policy_chosen_logps - reference_chosen_logps) * self.beta
rejected_rewards = (policy_rejected_logps - reference_rejected_logps) * self.beta
loss = -F.logsigmoid(chosen_rewards - rejected_rewards).mean()
return loss, chosen_rewards.mean(), rejected_rewards.mean()
5. 知识微调优化(KTO)
原理:结合知识蒸馏和偏好优化,在保留事实知识的同时提升回答质量。
适用场景:知识密集型任务、避免灾难性遗忘、平衡知识与偏好。
KTO实现位于src/llamafactory/train/kto/,KTOTrainer的特点包括:
- 融合KL散度约束(知识保留)和偏好损失(质量优化)
- 支持混合数据训练(事实数据+偏好数据)
- 兼容量化训练(如AWQ、GPTQ)
关键指标对比
| 策略 | 数据需求 | 计算成本 | 训练周期 | 调优目标 | 实现复杂度 |
|---|---|---|---|---|---|
| SFT | 中(标注数据) | 低 | 短 | 任务适配 | 低 |
| RM | 高(成对偏好数据) | 中 | 中 | 偏好打分 | 中 |
| PPO | 高(交互数据) | 高 | 长 | 长期奖励最大化 | 高 |
| DPO | 中(成对偏好数据) | 中 | 中 | 偏好对齐 | 中 |
| KTO | 高(知识+偏好数据) | 中 | 中 | 知识保留+偏好对齐 | 中高 |
最佳实践与工具支持
典型训练流程
- 基础能力构建:使用SFT初始化模型,配置文件示例见examples/train_lora/llama3_lora_sft.yaml。
- 偏好对齐:
- 数据充足时:SFT → RM → PPO
- 数据有限时:SFT → DPO/KTO
- 任务优化:针对特定场景(如知识问答),使用KTO融合领域知识。
工具与资源
- 配置模板:examples/目录提供各策略的完整配置示例,包括LoRA/QLoRA设置、量化参数和分布式训练配置。
- 评估工具:evaluation/目录包含CEval、CMMLU等基准测试,可用于验证训练效果。
- 可视化:训练过程支持TensorBoard和SwanLab日志,通过src/llamafactory/train/trainer_utils.py中的
get_swanlab_callback函数集成。
总结与选择建议
- 快速原型:优先选择SFT+DPO,流程简单且数据效率高。
- 高质量对话:采用SFT+RM+PPO,通过强化学习优化长期奖励。
- 知识密集型任务:SFT+KTO,平衡知识保留与偏好对齐。
- 资源受限场景:QLoRA+DPO,降低显存占用同时保证对齐效果。
LLaMA-Factory通过模块化设计和统一接口,简化了多种训练策略的实现与切换。用户可根据数据规模、计算资源和任务目标,灵活组合策略,快速迭代模型。更多细节参见项目README_zh.md及各模块源码注释。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



