huggingface TRL是如何实现20B-LLM+Lora+RLHF

news2024/11/20 8:35:51

huggingface TRL实现20B-LLM+Lora+RLHF

  • Introduction
  • What is TRL?
  • Training at scale
  • 8-bit matrix multiplication
  • Lora
  • What is PEFT?
  • Fine-tuning 20B parameter models with Low Rank Adapter
  • 参考

Introduction

作者首先表示RLHF在目前LLM的训练中是一种很powerful的方式,训练模型利用RLHF通常包括以下三步:

  1. Finetune一个预训练模型通过特定领域的qa问答数据。
  2. 训练一个reward model
  3. 进一步finetune LLM通过 reward model 和RL
    具体方法可参考我的上一篇文章。
    流程图如下:
    在这里插入图片描述
    选择一个LLM也是很重要的事情,目前很好的选择有: BLOOMZ, Flan-T5, Flan-UL2, and OPT-IML. 如果你想得到一个还不错的效果,可能至少需要一个10B+的参数,但是这个尺寸的模型至少也需要一个40G的显存才能加载到显卡,如果还要训练,则需要更多。

What is TRL?

trl是一个基于peft的库,它可以让RL步骤变得更灵活、简单,你可以使用这个算法finetune一个模型去生成积极的评论、减少毒性等等。

在以前的 RLHF,我们需要复制两个模型(具体如下图,在损失函数公式上也有体现)的到每一个GPU上,随着模型尺寸的增大,这对单卡的情况很吃不消的。

在这里插入图片描述

为了避免把两个模型的全部参数复制到GPU,trl的做法是使用模型的共享层。

Training at scale

作者表示训练模型面临的第一份挑战就是在优化阶段。一个参数所占的显存取决于它的精度如 float32 ,float16 int 8,当把1B参数精度为fp32的模型加载进需要4G,fp16需要2G,int 8 则需要1G。

在这里说一下是如何计算的:
在计算机中,比特是可以存储或操作的最小数据单元。它的值只能是0或1。另一方面,字节是一个由8个比特组成的数据单元。

字节和比特之间的关系是一个字节等于八个比特。这意味着,如果你有一个大小为1字节的文件,它包含8个比特的数据。同样,一个大小为10字节的文件包含80个比特的数据。

一个完整精度模型(32位=4字节)每十亿个参数需要4GB,半精度模型每十亿个参数需要2GB,int8模型每十亿个参数需要1GB。

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

目前主流的方法为 Tensor Parallelism,Data Parallelism,如下图:

在这里插入图片描述
数据并行是指我在每一个GPU上都拷贝一个模型,然后对每个GPU送入不同的数据,但是作者表明他没有根本的解决上面问题。

模型并行是指把模型跨许多设备分割模型权重,这需要定义跨进程的激活和梯度的通信协议。这是比较困难的,可能需要DeepSpeed等框架。

然后作者提出了一个新的方式:8-bit matrix multiplication

8-bit matrix multiplication

在这里插入图片描述
这种方法方法旨在解决量化大规模模型时性能下降的问题。提出的方法将线性层中应用的矩阵乘法分解为两个阶段:将在float16中执行的离群值隐藏状态部分和在int8中执行的“非离群值”部分。

Lora

https://blog.csdn.net/qq_18555105/article/details/129901193?spm=1001.2014.3001.5502

What is PEFT?

Parameter- Efficient Fine-Tuning(PEFT)是一个huggingface的library。
该库支持许多最先进的模型,并拥有广泛的示例集,包括:
在这里插入图片描述

Fine-tuning 20B parameter models with Low Rank Adapter

  1. 第一步:加载active model 以int8的精度。(与全精度模型相比,以8位精度加载模型可以节省多达4倍的内存)

在这里插入图片描述

  1. 第二步:冻结LLM参数,增加可训练的层,也就是Lora。

在这里插入图片描述
3. 第三步:使用相同的模型获取 reference and active logits
如下图,这里Reference logits作为奖励模型,获得得分,与InstructGPT不同(一个GPT3,一个6B的),作者是用了两个相同的模型,只不过reference model 去掉了adapter。
在这里插入图片描述

参考

https://huggingface.co/blog/trl-peft
parallelism paradigms: https://huggingface.co/docs/transformers/v4.17.0/en/parallelism
8-bit integration in transformers: https://huggingface.co/blog/hf-bitsandbytes-integration
LLM.int8 paper: https://arxiv.org/abs/2208.07339
Gradient checkpoiting explained: https://docs.aws.amazon.com/sagemaker/latest/dg/model-parallel-extended-features-pytorch-activation-checkpointing.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/428417.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot 整合Quartz定时任务管理【SpringBoot系列18】

SpringCloud 大型系列课程正在制作中,欢迎大家关注与提意见。 程序员每天的CV 与 板砖,也要知其所以然,本系列课程可以帮助初学者学习 SpringBooot 项目开发 与 SpringCloud 微服务系列项目开发 Quartz是由Java语言编写,是OpenSym…

【环境搭建:onnx模型部署】onnxruntime-gpu安装与测试(python)

ONNX模型部署环境创建1. onnxruntime 安装2. onnxruntime-gpu 安装2.1 方法一:onnxruntime-gpu依赖于本地主机上cuda和cudnn2.2 方法二:onnxruntime-gpu不依赖于本地主机上cuda和cudnn2.2.1 举例:创建onnxruntime-gpu1.14.1的conda环境2.2.2 …

Spring整合MyBatis与JUnit

Spring整合 想必到现在我们已经对Spring有一个简单的认识了,Spring有一个容器,叫做IoC容器,里面保存bean。在进行企业级开发的时候,其实除了将自己写的类Spring管理之外,还有一部分重要的工作就是使用第三方的技术。前…

Spring —— Spring Boot 创建和使用

JavaEE传送门JavaEE Spring —— Spring简单的读取和存储对象 Ⅱ Spring —— Bean 作用域和生命周期 目录Spring Boot 创建和使用Spring BootSpring Boot 项目创建使用 IDEA 创建网页版创建Spring Boot 目录介绍运行 Spring Boothello world约定大于配置Spring Boot 创建和使…

关于SeaDAS的安装教程以及使用问题笔记

2022年硕士研究生最后半个学期,已经交完了毕业论文,因为觉得工作以后会用到SeaDAS就拿出了一些时间学习,现在已经工作快一年了,而工作中也并没有用到这个软件,估计以后也不会用到了吧。现在把当时学习整理的一些笔记分…

字符串匹配算法(BFKMP)

个人主页:平行线也会相交 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【数据结构初阶(C实现)】 目录字符串匹配算法BF算法代码实现KMP算法代码实现nextval数组改进字符串匹配算法 在学…

MySQL 库操作

目录 创建数据库 语法 案例 字符集和校验规则(建数据库/建表用) 查看系统默认字符集以及校验规则 db.opt 更改 查看数据库支持的字符集 查看数据库支持的字符集校验规则 校验规则对数据库的影响 排升序 操纵数据库 查看数据库 显示创建语…

[计算机图形学]几何:隐式显式表示(前瞻预习/复习回顾)

一、前言 本篇我们将开启GAMES101几何部分的讲解的第一讲解,也是几何的基本表示,现实中有非常多的几何,如布料,绝对光滑的曲面,水滴,毛发,微观的细胞等等非常复杂的几何,那么如何在…

十分钟在 macOS 快速搭建 Linux C/C++ 开发环境

有一个使用了 Epoll 的 C 项目,笔者平时用的 Linux 主力开发机不在身边,想在 macOS 上开发调试,但是没有 Linux 虚拟机。恰好,JetBrains CLion 的 Toolchains 配置除了使用本地环境,还支持 SSH、Docker。 笔者使用 CL…

Zabbix的介绍与部署

目录 zabbix zabbix简介 zabbix主要功能 zabbix主要特点 zabbix运行机制 zabbix架构 1.sever-client架构 2.sever-proxy-client架构 3.master-node-client架构 如何进行数据采集 zabbix工作原理 zabbix监控模式 安装zabbix5.0 部署zabbix服务端 web页面测试 部…

系统集成项目管理工程师 笔记(第二章:信息系统集成及服务管理)

文章目录2.3.1 ITIL与IT服务管理(ITSM) 117ITSM三个根本目标2.3.2 ITSS与信息技术服务 121ITSS的4个组成要素和5个生命周期2.3.3 信息系统审计 127信息系统审计是建立在以下 4 个理论基础之上的信息系统审计流程示意图审计步骤第2章 信息系统集成及服务管…

怎么设置动态壁纸?这样做就行!

案例:怎么设置动态壁纸 【朋友们,我的壁纸一直都是静态的,最近感觉有点审美疲劳了,想换些好看的动态壁纸,有朋友知道应该如何设置动态壁纸吗?】 经常使用电脑的朋友可能会觉得一直用同一张壁纸会感觉审美…

通过两阶段知识学习多种不利天气排除

论文:Learning Multiple Adverse Weather Removal via Two-stage Knowledge Learning and Multi-contrastive Regularization: Toward a Unified Model【通过两阶段知识学习多种不利天气排除】 论文下载地址:https://openaccess.thecvf.com/content/CVP…

过去的90天,ODC 发生了哪些新的改变?

欢迎访问 OceanBase 官网获取更多信息:https://www.oceanbase.com/ 关于作者 胡智娟 OceanBase 产品经理 主要负责 OceanBase 生态工具数据研发、迁移评估方向的产品工作,在蚂蚁集团有多年数据库管理实战经验,对日常研发及运维痛点有较深感悟…

个人-计算机操作系统第五章

第五章 虚拟存储器 一、章节练习 1.系统抖动是指( )。 A. 使用机器时,千万屏幕闪烁的现象 B. 刚被调出的页面又立刻被调入所形成的频繁调入调出现象 C. 系统盘不净,千万系统不稳定的现象 D. 由于内存分配不当,偶然造成内存不够…

史上最全的快速排序方法--Hoare快排 挖坑法快排 二路快排 三路快排 非递归快排

一.快速排序 1.基本介绍 快速排序(Quicksort)由英国计算机科学家Tony Hoare于1959年发明,是一种经典的排序算法,被广泛应用于计算机科学领域。快速排序(Quick Sort)是一种常见的基于比较的排序算法&#…

阿里云李飞飞:数据库将迎来“四化”趋势

伴随着数字经济的高速发展,越来越多的企业管理者都开始认识到数据才是企业最宝贵的资产,并为此不断加速企业的数字化转型与升级。而在数据库领域,云原生已经当仁不让地成为了当下最炙手可热的技术趋势之一。那么在云原生的时代大潮之下&#…

C++ STL之string容器

目录一、C与C字符串的差别二、string类对象的容量操作三、string类中的常见API总览1.构造2.赋值重载赋值操作符 成员函数 assign3.存取重载下标获取操作符 [ ]成员函数 at4.拼接重载复合操作符 成员函数 append5.查找成员函数 find成员函数 rfind成员函数 replace6.比较成员函数…

python接口自动化测试 之mock模块基本使用介绍

目录 mock作用 解决依赖问题,达到解耦作用 模拟复杂业务的接口 单元测试 前后端联调 mock类解读 mock实际使用 一个未开发完成的功能如何测试? 一个完成开发的功能如何测试? mock装饰器 mock作用 解决依赖问题,达到解耦…

AutoCAD2021安装教程图解+系统要求

AutoCAD2021具有完善的图形绘制功能,是一款非常实用的CAD图形制作软件,这款软件在业内也拥有极高的知名度,基本上绘图专业相关人员都会使用这款软件,来进行设计绘图。在软件中,为用户打造了超多实用的工具,…