大语言模型训练

大语言模型训练

  • 1.两大问题
  • 2.并行训练
    • 2.1数据并行
    • 2.2模型并行
    • 2.3张量并行
    • 2.4混合并行
  • 3.权重计算
    • 3.1浮点数
    • 3.2混合精度训练
    • 3.3deepspeed(微软)
      • 3.3.1 ZeRO
      • 3.3.2ZeRO-offload
    • 3.3总结
  • 4.PEFT
    • 4.1Prompt Tuning
    • Prefix-tuning
    • 4.2P-tuning & P-tuning v2
  • 5.Adapter
  • 6.LoRA
  • 7.模型推理加速(KV cache 技术)

1.两大问题

  1. 效率问题
    数据量大,如何快速完成训练
  2. 显存问题
    模型太大,如何在GPU上完成运算

2.并行训练

2.1数据并行

思路: 复制模型到多个GPU上,将训练的数据也拆分成相同份数,交由不同的GPU模型上训练,各自计算梯度后,传到某台机器上,累加,求平均,再反传到各个模型中,进行更新。这样每台机器的模型权重是一致的。

优点: 效率高,相当于一份工作分给多个人做,完成的也就块。
缺点: 要求单卡就能训练整个模型(显存够大)。

示意图:
在这里插入图片描述

2.2模型并行

思路:模型的不同层放在不同的GPU上由前往后,依次计算,最后一层计算完成后,计算loss值,则由后到前依次计算,完成各层更新。

优点: 解决单块卡不够大的问题(模型比显存大)。
缺点: 需要更多的通讯时间(卡之间互相传输数据)。并且是单向串行,因为后面的模型层必须等前面传递数据才能计算。

示意图:
在这里插入图片描述

2.3张量并行

思路: 将张量划分到不同GPU上进行运算,其本质也是一种模型并行,只是它的并行的粒度更小,小到某层网络的权重计算拆分到不同的GPU上。

优点: 进一步减少对单卡显存的需求
缺点: 需要更多的数据通讯

示意图1:最后两部分,前后拼接起来
在这里插入图片描述
示意图2:最后两部分,对位相加
在这里插入图片描述
在transformer中多头机制,每个头在一个GPU上计算。

2.4混合并行

介绍: BLOOM模型训练时采用的并行计算结构,并且是混合并行,即采用数据并行:将数据拆分为4组,又采用模型并行,将模型层拆分到12组GPU上,进行流水线计算;在每一组GPU上,将分到该组上的模型层,再采用张量并行的原则进行计算。

示意图:
在这里插入图片描述

3.权重计算

3.1浮点数

三种浮点数的格式:
在这里插入图片描述
简介: FP32、FP16都是原有计算的浮点数数据格式,为了机器学习的,设计了BF16的格式。8个bit为1字节。

浮点数表示公式:
在这里插入图片描述
注意: 指数E影响的是浮点数的大小范围,而尾数M则影响浮点数的小数位数,即浮点数精确度。

举例:

例:25.125 D = 十进制 B = 二进制
整数部分:25(D) = 11001(B)
小数部分:0.125(D) = 0.001(B)
用二进制科学计数法表示:25.125(D) = 11001.001(B) = 1.1001001 * 2^4(B)
符号位 S = 0
尾数 M = 1.001001 = 001001(去掉1,隐藏位)
指数 E = 4 + 127(中间数) = 135(D) = 10000111(B)

图示如下:
在这里插入图片描述
精度损失举例:

将0.2(十进制)转化为二进制数:
0.2 * 2 = 0.4 -> 0
0.4 * 2 = 0.8 -> 0
0.8 * 2 = 1.6 -> 1
0.6 * 2 = 1.2 -> 1
0.2 * 2 = 0.4 -> 0(发生循环)

0.2(D) = 0.00110…(B)

由于浮点数尾数位数有限,最后只能截断,导致精度损失

例如: 0.00…(800个0)…01 + 1 = 1

3.2混合精度训练

原理: 模型在训练时,采用的是FP16位的浮点数进行的计算,在进行梯度计算,更新权重时,则采用FP32的浮点数更新。

原因: 模型在训练或者是推理时,FP16精度,一般情况下够用,为了节省资源,则不使用FP32的;但是在权重更新,计算loss时,由于有很多位小数,如果浮点数精度太低,可能导致计算出的梯度为0;无法更新权重。

在这里插入图片描述
释义:

  1. 上面图中,在模型更新这块,完整保留了一份FP32浮点数的模型权重,计算loss和更新时,是更新的该参数。
  2. 完成FP32浮点数的权重更新后,再转为FP16位的权重,放到训练中去,进行第二轮训练。

3.3deepspeed(微软)

3.3.1 ZeRO

简介: deepspeed是微软提供的一个加速框架,里面提供了数据并行、模型并行、张量并行、混合并行策略,这是主要介绍其:零冗余优化器 ZeRO。

示意图:
在这里插入图片描述
释义:

  1. stage0 指的就是数据并行模式。由于模型权重、梯度都是BF16,即2个字节,即代表MemoryConsumed的前两个2;K是指优化器的不同参数会不同,这里的优化器是adam,有3个初始化参数:m、v、t;并且都是FP32的浮点数,即4字节,所以是12
  2. stage1指的是模型并行,这里只是将Optimizer States分散到不同的机器中,这里是Nd=64,即分到64张卡上,所以MemoryConsumed最后一个参数是除以Nd。
  3. stage2指的是模型并行,这里不仅将优化器,还把梯度也分散到不同的机器/卡中,计算同上。
  4. stage3指的是模型并行,这里将优化器,梯度、参数都分散到不同的机器/卡中,是完整的模型并行模式。
    5.上面的计算都是基于全量微调的资源计算方式。

3.3.2ZeRO-offload

简介: 把一部分计算放到内存中,用CPU计算;目的是解决显存不足问题,但是CPU并行计算比较慢。
在这里插入图片描述

3.3总结

  1. 训练速度
    Stage 0 > Stage 1 > Stage 2 > Stage 2 + offload > Stage 3 > Stage 3 + offloads

  2. 显存效率(指固定显存下,能够训练的模型大小)
    Stage 0 < Stage 1 < Stage 2 < Stage 2 + offload < Stage 3 < Stage 3 + offloads

4.PEFT

简介: Parameter-Efficient Fine-Tuning;当训练整个大模型不能实现时,可以采取的一种策略;即通过最小化微调参数的数量缓解大型预训练模型的训练成本。

4.1Prompt Tuning

在这里插入图片描述
释义:

  1. 原理:即将各类任务较好的提示词进行整理,将提示词与任务问题结合,多个不同类型的任务材料和对应提示词加在一起,作为微调的语料,只是这个时候冻结模型的权重,只让embedding可以进行训练;使得embedding的结果在这些任务上能够更好的拟合后面的模型权重,使得模型能够更好的处理这些token,从而完成这些任务。

Prefix-tuning

在这里插入图片描述

4.2P-tuning & P-tuning v2

在这里插入图片描述

5.Adapter

在这里插入图片描述
释义:

  1. 上图中,左侧是一个原有的transformer结构中,添加了Adapter模型层
  2. 训练时调整的是Adapter中的FeedFoward层的参数,这样调整的参数就很小,需要的资源就可以降低。
  3. 上图中,右侧是即为Adapter的模型结构,包含两个Feedfoward层和一个激活函数
  4. Adapter中的两个FF就是训练的参数,这里会通过降维升维操作,再次降低参数量
    a. 输入Feedfowarddown-project时,矩阵为:768 * 768;FFDP为:768 * 8;FFUP为:8 * 768;
    这样就比两个FFDP和FFUP都为768 * 768参数要小的多。

优点:

  1. 加入的Adapter的参数的变化对模型的影响深远,因为添加的模型是在transformer的结构中的。
  2. 通过加入Adapter模型,与全量微调相比,训练的参数减少,降低了极大部分的训练资源开销。

缺点:
3. 增加了模型的深度,因为是和Transformer中的结构串联的。

6.LoRA

示意图:
在这里插入图片描述
释义:

  1. 上图左侧蓝色表示预训练模型的任意一个线性层;右侧表示LoRA模型,即可以在预训练模型的任意一层线性层旁边加入LoRA模型进行微调。
  2. LoRA使用的仍然是Adapter的思想,在网络中加入新的训练模型,结合原有预训练模型参数,获得对下游任务的良好表现,只是LoRA是并联
  3. 其中A、B分别可以等价于Adapter中的FFDP、FFUP两层。
  4. r就是秩;比如:W是L * H 是768 * 768;A、B分别是:768 * 8 、8 * 768;那么这里的8就是r。
  5. transformer结构中,大多数网络层都是线性的;比如Q、K、V;那么这些模型层都可以加入LoRA进行微调训练。对模型改变和影响深度非常大。
  6. 注意: 初始化A、B权重矩阵时,注意,A的权重是随机初始化的,B的权重是全部为0可以进行微调训练的原因: 为了微调的起点是预训练模型,B的权重为0,则A、B相乘为0;如果A、B都不会零,随机初始化,就会导致训练一开始,计算loss,就不是基于预训练模型进行的微调。如果A、B初始化都为零,则梯度更难计算,模型学习更加困难。
  7. LoRA有参数:r、lora_alpha、lora_dropout、target_modules;r就是降维的比例;lora_dropout就是Dropout参数;target_modules即需要加载LoRA模型的位置;加上LoRA后,可以看成:下面BAx的部分,最后BAx会乘以一个缩放参数,这个参数值是:lora_alpha与r的商
    在这里插入图片描述

优点:

  1. 加入的LoRA的模型,添加的模型层更多,可为微调的范围也就越大,更能对模型输出施加影响。
  2. 与全量微调相比,训练的参数减少,降低了极大部分的训练资源开销。
  3. 没有加深模型的整体层数和深度,模型计算更快。

7.模型推理加速(KV cache 技术)

简介: 由于并发、响应速度的需求,需要在不影响模型推理效果的基础上,提高现有模型推理速度,根据对模型的结构和计算过程的分析,在self-attention结构上,有一个非常好的改进点。

示意图:在这里插入图片描述
原理: 在Q、K、V计算时,有一个与文本等长的矩阵,计算输入中,各字词之间的要素相关性;在推理预测下一个字的过程中,矩阵的长宽是不断变大的,计算量也就不断变大;由于每次预测相较于前一次,只是增加了前一个输出的相关性,那么将前面的输出的相关性,存在缓存中,每次只计算新增的这一个输出,就会减少大量的计算量。

举例如下:
在这里插入图片描述
释义:

  1. 原有计算:将今天天气不错,全部输入到Q、K计算矩阵中,也就每次计算,都是完整的内容。
  2. 当前计算:每次计算Q、K的结果都保留到缓存中,上述内容中,当前只需要计算:这一列;前面今天天气不都直接用缓存中的即可。并且将当前的计算,也加入到缓存中。降低的计算时间、计算量。效果显著。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数字图像处理:图像去噪

图像去噪–总变差去噪&#xff08;TV&#xff09; 引用资料&#xff1a; 1.全变分图像去噪算法&#xff08;TV&#xff09; 2.TV去噪的理解 总变差去噪 (Total Variation Denoising) 是一种经典的图像去噪方法&#xff0c;能够有效减少噪声&#xff0c;同时保留图像的边缘细节…

10.15.2024刷华为OD C题型(二)

10.15.2024刷华为OD C题型&#xff08;二&#xff09; 密码输入检测智能成绩表 如果是目标院校150分能过&#xff0c;而且这道题是两百分的话我就阿弥陀佛了。 这类简单类型的字符串处理题目一看就有思路&#xff0c;起码能做&#xff0c;遇到那种稍微加点数学的&#xff0c;感…

【STM32 HAL库】MPU6050姿态解算 卡尔曼滤波

【STM32 HAL库】MPU6050姿态解算 卡尔曼滤波 前言MPU6050寄存器代码详解mpu6050.cmpu6050.h 使用说明 前言 本篇文章基于卡尔曼滤波的原理详解与公式推导&#xff0c;来详细的解释下如何使用卡尔曼滤波来解算MPU6050的姿态 参考资料&#xff1a;Github_mpu6050 MPU6050寄存器…

C语言中的文件操作:从基础到深入底层原理

文件操作是几乎所有应用程序的重要组成部分&#xff0c;特别是在系统级编程中。C语言因其高效、灵活以及接近硬件的特点&#xff0c;成为了文件操作的理想选择。本文将全面深入地探讨C语言中的文件操作&#xff0c;从文件系统的概念到具体的文件操作函数&#xff0c;再到底层的…

外包干了2年,技术原地踏步。。。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;19年通过校招进入南京某软件公司&#xff0c;干了接近2年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了2年的功能测试&…

020 elasticsearch7.10.2 elasticsearch-head kibana安装

文章目录 全文检索流程ElasticSearch介绍ElasticSearch应用场景elasticsearch安装允许远程访问设置vm.max_map_count 的值 elasticsearch-head允许跨域 kibana 商品数量超千万&#xff0c;数据库无法使用索引 如何使用全文检索&#xff1a; 使用lucene&#xff0c;在java中唯一…

Nginx(Linux):启动停止Nginx

目录 1、理解Nginx后台进程2、停止Nginx(方式一&#xff1a;使用信号源)2.1 获取master进程号2.1 设置信号源 3、停止Nginx(方式二&#xff1a;使用命令行) 1、理解Nginx后台进程 Nginx后台进程包含master和worker两类进程。 master进程&#xff1a;主要用来管理worker进程&am…

鸿蒙学习笔记--搭建开发环境及Hello World

文章目录 一、概述二、开发工具下载安装2.1 下载开发工具DevEco Studio NEXT2.2 安装DevEco Studio 三、启动软件四、第一个应用Hello World4.1 创建应用4.2 创建模拟器4.3 开启Hyper-v功能4.4 启动虚拟机 剑子仙迹 诗号&#xff1a;何须剑道争锋&#xff1f;千人指&#xff0c…

【Linux】:线程概念

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家带来线程概念相关代码和知识点&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入门到精通 数…

9.存储过程安全性博客大纲(9/10)

存储过程安全性博客大纲 引言 在数据库系统中&#xff0c;存储过程是一种预先编写好的SQL代码集合&#xff0c;它被保存在数据库服务器上&#xff0c;可以通过指定的名称来调用执行。存储过程可以包含一系列的控制流语句&#xff0c;如IF条件语句、WHILE循环等&#xff0c;使…

智能汽车制造:海康NVR管理平台/工具EasyNVR多品牌NVR管理工具/设备实现无插件视频监控直播方案

一、背景介绍 近年来&#xff0c;随着网络在我国的普及和深化发展&#xff0c;企业的信息化建设不断深入&#xff0c;各行各业都加快了信息网络平台的建设&#xff0c;大多数单位已经或者正在铺设企业内部的计算机局域网。与此同时&#xff0c;网络也成为先进的新兴应用提供了…

【Git】基本操作+分支管理

Git基本操作 Git仓库创建 Git仓库的基本认知 Git仓库就是一个用来跟踪和管理项目文件变化的地方&#xff0c;其记录了所有的修改历史&#xff0c;可以回退到之前的任何一个历史版本 工作区&#xff1a;正在进行实际操作的文件夹暂存区&#xff1a;临时保存想要提交修改的区域…

【LeetCode:349. 两个数组的交集 + 哈希表】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

鸿蒙原生应用扬帆起航

就在2024年6月21日华为在开发者大会上发布了全新操作的系统HarmonyOS Next开发测试版&#xff0c;网友们把它称之为“称之为纯血鸿蒙”。因为在此之前鸿蒙系统底层式有两套基础架构的&#xff0c;一套是是Android的AOSP&#xff0c;一套是鸿蒙的Open Harmony&#xff0c;因为早…

计算机毕业设计 基于Python的毕业生去向反馈调查平台的设计与实现 Python毕业设计选题 前后端分离 附源码 讲解 文档

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

物联网IoT平台 | 物联网IoT平台的定义

物联网IoT平台&#xff1a;定义、发展与应用在当今信息化时代&#xff0c;物联网&#xff08;Internet of Things&#xff0c;简称IoT&#xff09;已经成为推动社会进步和产业升级的重要力量。物联网IoT平台&#xff0c;作为连接物理世界与数字世界的桥梁&#xff0c;正逐步改变…

Docker安装Nginx

前提&#xff1a;Docker已安装好&#xff0c;本人使用的为自带docker的云服务器&#xff0c;docker常用命令已掌握&#xff0c;yjj为在根目录创建的一个文件夹&#xff0c;可自行修改对应的目录。 1、安装镜像&#xff0c;可去dockerhub上面找&#xff0c;一般都是组件名称。do…

双十一值得购买超声波清洗机吗?双十一超声波清洗机好物品牌推荐

随着双十一购物狂欢节即将拉开序幕&#xff0c;越来越多的消费者开始关注这个一年一度的购物盛宴。超声波清洗机作为近年来备受关注的家用电器&#xff0c;以其高效、便捷的清洁能力赢得了众多家庭的喜爱。在双十一期间&#xff0c;各大品牌纷纷推出优惠活动&#xff0c;让不少…

红黑树的底层讲解

一、红黑树的介绍 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是红&#xff08;red&#xff09;或黑&#xff08;black&#xff09;。通过对任何一条从根到叶子的路径上各个结点着色方式的限制&#xff0c;红…

通过比较list与vector在简单模拟实现时的不同进一步理解STL的底层

cplusplus.com/reference/list/list/?kwlist 当我们大致阅读完list的cplusplus网站的文档时&#xff0c;我们会发现它提供的接口大致上与我们的vector相同。当然的&#xff0c;在常用接口的简单实现上它们也大体相同&#xff0c;但是它们的构造函数与迭代器的实现却大有不同。…