使用 24GB 消费级 GPU 进行 20B LLMs 的 RLHF 微调

欢迎各位读者,今天我们要聊聊一件新鲜事。没错,就是在一台 24GB 的消费级 GPU 上,如何对 20B 参数的大型语言模型 (LLM) 进行 RLHF(人工反馈强化学习) 的微调。这个工作得益于我们的新工具——trl 和 peft 的完美结合。让我们一起来探索这个新颖的微调方法,以及它如何变得更加容易实现。

一、 LLMs & RLHF:AI 领域的新星

首先,让我们来了解一下大型语言模型 (LLMs) 和人工反馈强化学习 (RLHF) 。结合使用 LLMs 和 RLHF,我们可以构建出像 ChatGPT 这样的强大 AI 系统。这个过程通常包括三个步骤:首先,我们在特定领域或语料库的指令和人类示例上微调预训练的 LLM;然后,我们收集一个人工注释的数据集,训练一个奖励模型;最后,我们用奖励模型和这个数据集使用 RL(比如 PPO) 进一步微调第一步中的 LLM 。

二、 什么是 TRL?

trl 库的目标是使 RL 步骤更容易和更灵活,任何人都可以在自定义的数据集和训练设置上使用 RL 微调他们的 LM 。你可以使用 trl 来运行最流行的深度 RL 算法,PPO,这可以在分布式方式或单一设备上实现!为了实现这一目标,我们利用了 Hugging Face 生态系统中的 accelerate 工具,以便任何用户都可以扩大实验规模。

三、 大规模训练的挑战

大规模训练可能会遇到挑战。首要挑战是将模型及其优化器状态装入可用的 GPU 设备。一个参数在 GPU 内存中所占的空间取决于其"精度"(或者更具体地说,dtype) 。最常见的 dtype 包括 float32(32 位),float16 和 bfloat16(16 位) 。简单来说,要在 GPU 设备上加载一个模型,每十亿个参数在 float32 精度下需要 4GB 的内存,在 float16 下需要 2GB,而在 int8 下需要 1GB 。

四、 8 位矩阵乘法

8 位矩阵乘法是一种高效的方法,首次在论文 LLM.int8() 中提出,旨在解决量化大规模模型时性能下降的问题。简单地说,如果你使用 8 位矩阵乘法,你可以将全精度模型的大小减少 4 倍 (因此,对于半精度模型,可以减少 2 倍) 。

五、 低秩适应和 PEFT

在 2021 年的论文 LoRA: Low-Rank Adaption of Large Language Models 中,研究者们证明了可以通过冻结预训练的权重并创建低秩版本的注意力矩阵的查询和值层,对大型语言模型进行微调。这种技术使 LLMs 的微调只需要一小部分的内存需求。

六、 什么是 PEFT?

参数高效微调 (PEFT) 是一个由 Hugging Face 创建的库,用于支持在 LLMs 上创建和微调适配器层。 peft 已经无缝地集成了 Accelerate,可以利用 DeepSpeed 和 Big Model Inference 对大规模模型进行扩展。

七、 20B 参数模型的低秩适配器微调

那么,现在让我们来具体谈谈如何在 24GB 的消费级 GPU 上对 20B 参数的 LLM 进行微调。我们通过使用 TRL 库,可以在个人的数据集和训练设置中用 RL 微调 LM 。 TRL 库使用 Hugging Face 生态系统的 accelerate 工具,使得任何用户都可以将实验规模扩大到有趣的范围。

而在大规模训练中,首要的挑战是如何将模型及其优化器状态装入可用的 GPU 设备。一种有效的解决方案是使用 8 位矩阵乘法,这种方法能够减少全精度模型的大小,从而使其适应硬件资源。

同时,我们引入了低秩适应和 PEFT 技术。低秩适应是一种可以通过冻结预训练的权重并创建低秩版本的注意力矩阵的查询和值层,对大型语言模型进行微调的技术。这种技术使 LLMs 的微调只需要一小部分的内存需求。而 PEFT(参数高效微调) 则是一个由 Hugging Face 创建的库,用于支持在 LLMs 上创建和微调适配器层。

这样,我们就可以在 24GB 的消费级 GPU 上进行 20B 参数模型的低秩适配器微调了。这个过程中,我们使用了 trl 和 peft 的集成,使得大型语言模型的微调变得更加容易实现,也更适应于硬件资源。

总的来说,我们现在有了更多的工具和方法来更有效地微调大型语言模型,这将使得 AI 系统,如 ChatGPT,变得更加强大和实用。这是一次令人兴奋的进步,也预示着 AI 技术将带来更多的可能性。

发表评论