直接偏好优化¶
本教程支持多种直接偏好优化(DPO)风格的微调技术。 这些技术旨在引导(或对齐)模型朝着某些期望的行为发展。 例如,一个常见的目标是训练语言模型以生成安全和诚实的输出, 或者使其有益且无害。
要在这个配方中获得最佳效果,可能有必要先通过监督微调(SFT)对模型进行微调,以确保您的模型处于您感兴趣的领域内。要做到这一点,请查看我们在配方概览中的其他微调配方,这些配方支持多种SFT范式。
监督微调后,以下是使用 Llama 3.1 8B 进行 DPO 的示例:
注意
您可能需要获得访问您感兴趣的Llama模型的权限。有关访问受限制仓库的详细信息,请参阅 此处。
tune download meta-llama/Meta-Llama-3.1-8B-Instruct \
--ignore-patterns "original/consolidated.00.pth"
--HF_TOKEN <HF_TOKEN>
# run on a single device
tune run lora_dpo_single_device --config llama3_1/8B_lora_dpo_single_device
# run on two gpus
tune run --nproc_per_node 2 lora_dpo_distributed --config llama3_1/8B_lora_dpo
您可以轻松地使用您选择的数据集开始这个配方,包括自定义本地数据集和来自 Hugging Face 的数据集, 查看我们关于 偏好数据集 的入门指南 了解如何操作。
对于此配方,我们包含多种 DPO 风格的损失函数:
Direct Preference Optimization(DPO) 损失 [1]。DPO 损失函数通过增加偏好响应相对于非偏好响应的相对对数概率,同时使用参考模型的对数概率来防止训练过程中策略退化。与 RLHF 一起,这是最常用的对齐技术,并被用于训练越来越多的最先进的大型语言模型,例如 Llama3.1、Gemma 2、Qwen2 等。这是一个对齐微调的良好起点。Statistical Rejection Sampling Optimization(RSO) 或“铰链”损失 [2]。 RSO 基于支持向量机和 DPO 的概念,采用基于间隔的方法,惩罚低质量的响应,同时确保选择和未选择的对数概率之间存在显著差距。
要使用其中任何一个,只需通过 torchtune 命令行界面 使用 loss 配置条目或标志:
tune run lora_dpo_single_device --config llama2/7B_lora_dpo_single_device \
loss=torchtune.modules.loss.RSOLoss \
gamma=0.5
若要更深入地了解使用此配方时可调整的各项参数,请参阅我们支持的各类 PEFT 训练范式的文档:
我们的其他许多内存优化功能也可以在这个配方中使用。您可以在我们的 内存优化概览 中了解更多关于所有内存优化功能的信息。
References: