使用Axolotl和直接偏好优化(DPO)微调开源大语言模型
大语言模型(LLM)为AI应用开启了无数新机遇。如果你想微调自己的模型,本指南将展示如何轻松实现这一目标,无需编写任何代码。我们将使用Axolotl和DPO工具,逐步完成整个过程。
什么是LLM?
大语言模型(LLM)是一种强大的AI模型,通过在大量文本数据(数万亿字符)上训练来预测序列中的下一组单词。这只有在过去2-3年GPU计算能力取得进展后才成为可能,使得如此庞大的模型能够在几周内完成训练。
你可能已经通过ChatGPT或Claude等产品与LLM进行过交互,并亲身体验了它们理解和生成类人响应的能力。
为什么要微调LLM?
难道我们不能在所有场景都使用GPT-4o吗?虽然它是目前最强大的模型,但并不总是最实用的选择。微调一个参数规模在30亿到140亿之间的较小模型,可以以极小的成本获得可比的结果。此外,微调让你拥有自己的知识产权,并减少对第三方的依赖。
理解基础模型、指令模型和聊天模型
在深入微调之前,有必要了解不同类型的LLM:
基础模型:这些模型在大量非结构化文本(如书籍或互联网数据)上进行预训练。虽然它们对语言有内在理解,但未针对推理进行优化,会产生不连贯的输出。基础模型作为开发更专业化模型的起点。
指令模型:基于基础模型构建,使用结构化数据(如提示-响应对)进行微调。它们被设计用来遵循特定指令或回答问题。
聊天模型:同样基于基础模型构建,但与指令模型不同,聊天模型在对话数据上进行训练,使其能够进行来回对话。
什么是强化学习和DPO?
强化学习(RL)是一种模型通过接收对其行为的反馈来学习的技术。它应用于指令或聊天模型,以进一步提高输出质量。通常,RL不会在基础模型上进行,因为它使用较低的学习率,效果不够明显。
DPO是RL的一种形式,模型使用同一提示/对话的好答案和坏答案对进行训练。通过呈现这些对,模型学会偏好好的示例并避免坏的示例。
何时使用DPO
DPO在以下情况下特别有用:
- 风格调整:修改响应的长度、详细程度或模型表达的置信度水平
- 安全措施:训练模型拒绝回答可能不安全或不适当的提示
然而,DPO不适合教授模型新知识或事实。为此目的,监督微调(SFT)或检索增强生成(RAG)技术更合适。
创建DPO数据集
在生产环境中,通常通过用户反馈生成DPO数据集,例如:
- 用户反馈:在响应上实现点赞/点踩机制
- 比较选择:向用户呈现两个不同的输出,并要求选择更好的一个
如果缺乏用户数据,也可以利用更大、更强大的LLM创建合成数据集。例如,可以使用较小模型生成坏答案,然后使用GPT-4o进行纠正。
为简单起见,我们将使用HuggingFace上的现成数据集:olivermolenschot/alpaca_messages_dpo_test。如果检查该数据集,你会发现它包含带有选定和拒绝答案的提示——这些就是好和坏的示例。这些数据是使用GPT-3.5-turbo和GPT-4合成的。
通常需要至少500-1000对数据才能进行有效训练而不会过拟合。最大的DPO数据集包含多达15000-20000对。
使用Axolotl微调Qwen2.5 3B Instruct
我们将使用Axolotl微调Qwen2.5 3B Instruct模型,该模型目前在其规模类别中位居OpenLLM排行榜首位。使用Axolotl,你可以无需编写任何代码——只需一个YAML配置文件——就能微调模型。以下是我们将使用的config.yml:
|
|
设置云环境
要运行训练,我们将使用Runpod或Vultr等云托管服务。你需要:
- Docker镜像:克隆Axolotl团队提供的winglian/axolotl-cloud:main Docker镜像
- 硬件要求:80GB VRAM GPU(如1×A100 PCIe节点)对于这种规模的模型绰绰有余
- 存储:200GB卷存储将容纳我们需要的所有文件
- CUDA版本:你的CUDA版本应至少为12.1
*这种类型的训练被认为是LLM的完整微调,因此非常消耗VRAM。如果你想在本地运行训练,而不依赖云主机,可以尝试使用QLoRA,这是一种监督微调形式。虽然理论上可以结合DPO和QLoRA,但这很少见。
开始训练的步骤
- 设置HuggingFace缓存目录:
|
|
这确保原始模型下载到我们的持久卷存储中。
-
创建配置文件:将之前创建的config.yml文件保存到/workspace/config.yml
-
开始训练:
|
|
完成!你的训练应该开始了。在Axolotl下载模型和训练数据后,你应该看到类似这样的输出:
|
|
由于这是一个只有264行的小数据集,训练应该只需几分钟即可完成。微调后的模型将保存到/workspace/dpo-output。
将模型上传到HuggingFace
你可以使用CLI将模型上传到HuggingFace:
- 安装HuggingFace Hub CLI:
|
|
- 上传模型:
|
|
将yourname/yourrepo替换为实际的HuggingFace用户名和仓库名称。
评估微调后的模型
对于评估,建议使用文本生成推理(TGI)等工具同时托管原始模型和微调模型。然后,在两个模型上使用温度设置为0(确保确定性输出)进行推理,并手动比较两个模型的响应。
这种实践方法比仅仅依赖训练评估损失指标提供更好的洞察,后者可能无法捕捉LLM语言生成的细微差别。
结论
使用DPO微调LLM让你能够定制模型以更好地满足应用需求,同时保持成本可控。通过遵循本文概述的步骤,你可以利用开源工具和数据集的力量创建符合特定要求的模型。无论你是想调整响应风格还是实施安全措施,DPO都提供了一种实用的方法来改进你的LLM。
祝你微调愉快!