首页 > 其他分享 >在一张 24 GB 的消费级显卡上用 RLHF 微调 20B LLMs

在一张 24 GB 的消费级显卡上用 RLHF 微调 20B LLMs

时间:2023-03-23 10:24:21浏览次数:52  
标签:24 训练 LLMs 模型 微调 RLHF LLM GPU 适配器

我们很高兴正式发布 trlpeft 的集成,使任何人都可以更轻松地使用强化学习进行大型语言模型 (LLM) 微调!在这篇文章中,我们解释了为什么这是现有微调方法的有竞争力的替代方案。

请注意, peft 是一种通用工具,可以应用于许多 ML 用例,但它对 RLHF 特别有趣,因为这种方法特别需要内存!

如果你想直接深入研究代码,请直接在 TRL 的文档页面 直接查看示例脚本。

介绍

LLMs & RLHF

LLM 结合 RLHF (人类反馈强化学习) 似乎是构建非常强大的 AI 系统 (例如 ChatGPT) 的下一个首选方法。

使用 RLHF 训练语言模型通常包括以下三个步骤:

  1. 在特定领域或指令和人类示范语料库上微调预训练的 LLM;
  2. 收集人类标注的数据集,训练一个奖励模型;
  3. 使用 RL (例如 PPO),用此数据集和奖励模型进一步微调步骤 1 中的 LLM。

ChatGPT 的训练协议概述,从数据收集到 RL 部分。 资料来源: OpenAI 的 ChatGPT 博文

基础 LLM 的选择在这里是至关重要的。在撰写本文时,可以“开箱即用”地用于许多任务的“最佳”开源 LLM 是指令微调 LLMs。著名的模型有: BLOOMZ Flan-T5Flan-UL2OPT-IML。这些模型的缺点是它们的尺寸。要获得一个像样的模型,你至少需要玩 10B+ 级别的模型,在全精度情况下这将需要高达 40GB GPU 内存,只是为了将模型装在单个 GPU 设备上而不进行任何训练!

什么是 TRL?

trl 库的目的是使 RL 的步骤更容易和灵活,让每个人可以在他们自己的数据集和训练设置上用 RL 微调 LM。在许多其他应用程序中,你可以使用此算法微调模型以生成 正面电影评论、进行 受控生成降低模型的毒性

使用 trl 你可以在分布式管理器或者单个设备上运行最受欢迎的深度强化学习算法之一: PPO。我们利用 Hugging Face 生态系统中的 accelerate 来实现这一点,这样任何用户都可以将实验扩大到一个有趣的规模。

使用 RL 微调语言模型大致遵循下面详述的协议。这需要有 2 个原始模型的副本; 为避免活跃模型与其原始行为/分布偏离太多,你需要在每个优化步骤中计算参考模型的 logits 。这对优化过程增加了硬约束,因为你始终需要每个 GPU 设备至少有两个模型副本。如果模型的尺寸变大,在单个 GPU 上安装设置会变得越来越棘手。

TRL 中 PPO 训练设置概述

trl 中,你还可以在参考模型和活跃模型之间使用共享层以避免整个副本。 模型解毒示例中展示了此功能的具体示例。

大规模训练

大规模训练是具有挑战性的。第一个挑战是在可用的 GPU 设备上拟合模型,及其优化器状态。 单个参数占用的 GPU 内存量取决于其“精度”(或更具体地说是 dtype)。 最常见的 dtypefloat32 (32 位) 、 float16bfloat16 (16 位)。 最近,“奇异的”精度支持开箱即用的训练和推理 (具有特定条件和约束),例如 int8 (8 位)。 简而言之,要在 GPU 设备上加载一个模型,每十亿个参数在 float32 精度上需要 4GB,在 float16 上需要 2GB,在 int8 上需要 1GB。 如果你想了解关于这个话题的更多信息,请查看这篇研究深入的文章: https://huggingface.co/blog/hf-bitsandbytes-integration。

如果您使用 AdamW 优化器,每个参数需要 8 个字节 (例如,如果您的模型有 1B 个参数,则模型的完整 AdamW 优化器将需要 8GB GPU 内存 来源)。

许多技术已经被采用以应对大规模训练上的挑战。最熟悉的范式是管道并行、张量并行和数据并行。

图片来自 这篇博文

通过数据并行性,同一模型并行托管在多台机器上,并且每个实例都被提供不同的数据批次。 这是最直接的并行策略,本质上是复制单 GPU 的情况,并且已经被 trl 支持。 使用管道并行和张量并行,模型本身分布在机器上: 在管道并行中,模型按层拆分,而张量并行则跨 GPU 拆分张量操作 (例如矩阵乘法)。使用这些模型并行策略,你需要将模型权重分片到许多设备上,这需要你定义跨进程的激活和梯度的通信协议。 这实现起来并不简单,可能需要采用一些框架,例如 Megatron-DeepSpeedNemo。其他对扩展训练至关重要的工具也需要被强调,例如自适应激活检查点和融合内核。 可以在 扩展阅读 找到有关并行范式的进一步阅读。

因此,我们问自己下面一个问题: 仅用数据并行我们可以走多远?我们能否使用现有的工具在单个设备中适应超大型训练过程 (包括活跃模型、参考模型和优化器状态)? 答案似乎是肯定的。 主要因素是: 适配器和 8 位矩阵乘法! 让我们在以下部分中介绍这些主题:

8 位矩阵乘法

高效的 8 位矩阵乘法是论文 LLM.int8() 中首次引入的一种方法,旨在解决量化大规模模型时的性能下降问题。 所提出的方法将在线性层中应用的矩阵乘法分解为两个阶段: 在 float16 中将被执行的异常值隐藏状态部分和在 int8 中被执行的“非异常值”部分。

高效的 8 位矩阵乘法是论文 LLM.int8() 中首次引入的一种方法,旨在解决量化大规模模型时的性能下降问题。 所提出的方法将在线性层中应用的矩阵乘法分解为两个阶段: 在 float16 中被执行的异常值隐藏状态部分和在 int8 中被执行的“非异常值”部分。

简而言之,如果使用 8 位矩阵乘法,则可以将全精度模型的大小减小到 4 分之一 (因此,对于半精度模型,可以减小 2 分之一)。

低秩适配和 PEFT

在 2021 年,一篇叫 LoRA: Low-Rank Adaption of Large Language Models 的论文表明,可以通过冻结预训练权重,并创建查询和值层的注意力矩阵的低秩版本来对大型语言模型进行微调。这些低秩矩阵的参数远少于原始模型,因此可以使用更少的 GPU 内存进行微调。 作者证明,低阶适配器的微调取得了与微调完整预训练模型相当的结果。

原始 (冻结的) 预训练权重 (左) 的输出激活由一个由权重矩阵 A 和 B 组成的低秩适配器 (右) 增强。

这种技术允许使用一小部分内存来微调 LLM。 然而,也有一些缺点。由于适配器层中的额外矩阵乘法,前向和反向传递的速度大约是原来的两倍。

什么是 PEFT?

Parameter-Efficient Fine-Tuning (PEFT) 是一个 Hugging Face 的库,它被创造出来以支持在 LLM 上创建和微调适配器层。 peft

标签:24,训练,LLMs,模型,微调,RLHF,LLM,GPU,适配器
From: https://www.cnblogs.com/huggingface/p/17245966.html

相关文章

  • AtCoder Beginner Contest 246
    AtCoderBeginnerContest246D题意求一个\(x\geqn\)使得\(x=a^3+a^2b+ab^2+b^3\)且\(n\leq10^{18}\)思路变形\(x=(a+b)(a^2+b^2)\),那么a、b的范围在1e6从大到小......
  • 24个一学就会的把脉歌诀
    一、浮脉【体象歌】浮在皮毛,如水漂木;举之有余,按之不足。【主病歌】浮脉为阳,其病在表。寸浮伤风,头疼鼻塞;左关浮者,风在中焦;右关浮者,风痰在膈;尺脉得之,下焦风客,小便不利,大便......
  • Windows 11 Update Download Error Solution - 0x80248007
    IhadthesameissueonaWindows2019virtualserverwhileperformingroutinewindowsupdates.Theinstructionswerespoton.Iran:netstopwuauservnetst......
  • 5V转换成24V方波编码器信号转脉冲信号变送器、隔离放大器
    主要特性:>>编码器差分信号直接输入转换成脉冲信号>>支持A、B和Z三相差分同时转换>> 3路输入,3路输出,输出脉冲幅值可选>>不改变原波形频率,响应速度500KHz以上>>电源、......
  • day6(day5休息) | 1. 两数之和; 202. 快乐数; 242. 有效的字母异位词; 349. 两个数组
    1.两数之和 题目简述 给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个横竖,并返回他们的数组下标。 你可以假设每种输入......
  • macOS 13.3 Beta 4 (22E5246b)With OpenCore 0.9.1开发版 and winPE双引导分区原版镜像
    镜像特点完全由黑果魏叔官方制作,针对各种机型进行默认配置,让黑苹果安装不再困难。系统镜像设置为双引导分区,全面去除clover引导分区(如有需要,可以自行直接替换opencore分区文......
  • 24.类与对象小结
    类与对象小结1.类与对象类是一个模板抽象、对象是一个实例2.方法定义、调用3.对应的引用引用类型:基本类型(8)对象是通过引用来操作的:栈---->堆4.属性默认初始化:......
  • ChatGPT背后的算法——RLHF总结
    ChatGPT背后的算法——RLHF总结参考链接:抱抱脸:ChatGPT背后的算法——RLHF|附12篇RLHF必刷论文(qq.com)背景 (文本生成的语言模型评价不在训练中)chatGPT训练4步骤......
  • 2024考研408Week1
    一、本周总结:使用时间:(目标45h,未达到)总计30h13min,数学19h45min,专业课5h,英语5h28min.存在问题:1.数学好长时间不碰了,手生了2.408刚刚开始,需要注入时间了3.英语阅读错误率较高......
  • 306-Air724UG(4G全网通GPRS)开发-闹钟关机,定时唤醒,引脚唤醒
    <p><iframename="ifd"src="https://mnifdv.cn/resource/cnblogs/LearnAir724UG"frameborder="0"scrolling="auto"width="100%"height="1500"></iframe></p>  1......