大型语言模型(LLM)的出现为AI应用带来了无数新的机遇。如果您一直想微调自己的模型,本指南将向您展示如何轻松地做到这一点,无需编写任何代码。我们将使用Axolotl和DPO等工具,逐步引导您完成整个流程。
大型语言模型(LLM)是一种强大的AI模型,它在海量文本数据(数万亿字符)上进行训练,以预测序列中的下一个词组。这只有在过去2-3年中,随着GPU计算的进步才成为可能,这些进步使得如此庞大的模型能够在几周内完成训练。
您可能之前已经通过ChatGPT或Claude等产品与LLM互动过,并亲身体验了它们理解和生成类似人类回应的能力。
我们不能只使用GPT-4o来处理所有事情吗?虽然在撰写本文时,它是我们拥有的最强大的模型,但它并不总是最实用的选择。微调一个较小的模型(参数范围为30亿到140亿),可以在成本的一小部分获得可比的结果。此外,微调允许您拥有自己的知识产权,并减少对第三方的依赖。
在深入微调之前,务必了解现有不同类型的LLM:
强化学习(RL)是一种技术,模型通过接收对其行为的反馈来学习。它被应用于指令模型或对话模型,以进一步改进其输出的质量。通常,RL不会在基础模型之上进行,因为它使用更低的学习率,这不足以产生显著变化。
DPO是一种RL形式,其中模型使用同一提示/对话的优劣答案对进行训练。通过呈现这些对,模型学习偏向好的示例并避免坏的示例。
当您想要调整模型的风格或行为时,DPO特别有用,例如:
但是,DPO不适合教模型新的知识或事实。为此,监督微调(SFT)或检索增强生成(RAG)技术更合适。
在生产环境中,您通常会使用用户的反馈来生成DPO数据集,例如:
如果您缺乏用户数据,您也可以通过利用更大、更强大的LLM来创建合成数据集。例如,您可以使用较小的模型生成错误答案,然后使用GPT-4o对其进行纠正。
为简单起见,我们将使用HuggingFace的现成数据集:olivermolenschot/alpaca_messages_dpo_test。如果您检查数据集,您会注意到它包含带有已选择和已拒绝答案的提示——这些是好坏示例。这些数据是使用GPT-3.5-turbo和GPT-4合成创建的。
您通常至少需要500到1000对数据才能有效地进行训练而不会过拟合。最大的DPO数据集包含多达15,000-20,000对数据。
我们将使用Axolotl来微调Qwen2.5 3B指令模型,该模型目前在其规模类别中在OpenLLM排行榜上排名第一。使用Axolotl,您可以无需编写任何代码即可微调模型——只需要一个YAML配置文件。以下是我们将使用的config.yml:
<code class="language-yaml"># ... (YAML configuration remains the same) ...</code>
要运行训练,我们将使用Runpod或Vultr等云托管服务。以下是您需要的:
(此类型的训练被认为是LLM的完整微调,因此非常占用VRAM。如果您想在本地运行训练,而不依赖于云主机,您可以尝试使用QLoRA,这是一种监督微调的形式。虽然理论上可以组合DPO和QLoRA,但这很少见。)
<code class="language-bash">export HF_HOME=/workspace/hf</code>
这确保原始模型下载到我们的持久卷存储中。
创建配置文件:将我们之前创建的config.yml文件保存到/workspace/config.yml。
开始训练:
<code class="language-bash">python -m axolotl.cli.train /workspace/config.yml</code>
瞧!您的训练应该开始了。在Axolotl下载模型和训练数据后,您应该会看到类似于此的输出:
<code class="language-yaml"># ... (YAML configuration remains the same) ...</code>
由于这是一个只有264行的较小的数据集,因此训练应该只需几分钟即可完成。微调后的模型将保存到/workspace/dpo-output。
您可以使用CLI将模型上传到HuggingFace:
<code class="language-bash">export HF_HOME=/workspace/hf</code>
<code class="language-bash">python -m axolotl.cli.train /workspace/config.yml</code>
将yourname/yourrepo替换为您实际的HuggingFace用户名和存储库名称。
对于评估,建议使用Text Generation Inference (TGI)等工具来托管原始模型和微调后的模型。然后,使用温度设置为0(以确保确定性输出)对两个模型进行推理,并手动比较两个模型的响应。
这种实践方法比仅仅依赖训练评估损失指标提供了更好的见解,因为损失指标可能无法捕捉LLM中语言生成的细微之处。
使用DPO微调LLM允许您自定义模型以更好地满足应用程序的需求,同时保持成本可控。通过遵循本文中概述的步骤,您可以利用开源工具和数据集的力量来创建符合您特定要求的模型。无论您是想调整响应的风格还是实施安全措施,DPO都提供了一种改进LLM的实用方法。
祝您微调愉快!
以上是使用直接偏好优化(DPO)对开源LLM进行微调开源LLM的详细内容。更多信息请关注PHP中文网其他相关文章!