刘知远团队大模型技术与交叉应用L5-BMSystem

为什么需要BMTrain?
PLM越来越大。为了使训练更高效和廉价。我们有必要
1.分析GPU的显存去哪了?
2.理解GPU间的合作模式是如何的?

在这里插入图片描述

显存都去了哪里?

CPU vs GPU

CPU适合复杂逻辑运算。GPU适合大量重复的数值运算。

在这里插入图片描述

显存成分

1.前向传播时,模型参数
2.反向传播时,模型梯度
3.中间过程的计算
4.优化器

在这里插入图片描述

GPU间的合作模式

数据并行-Data Parallel

参数服务器的参数会被复制到所有显卡上
数据切成三份,分别给每张显卡
最后聚合后的梯度传回参数服务器
PS:实际上参数服务器在0号显卡上
在这里插入图片描述

广播算子

在这里插入图片描述

规约

在这里插入图片描述

All Reduce

规约的结果广播
在这里插入图片描述

Reduce Scatter

在这里插入图片描述

All Gather

在这里插入图片描述

分布式数据并行

这样就不需要要参数服务器。
在这里插入图片描述
使用数据并行,使模型中间结果量降低了
在这里插入图片描述

模型并行-Model Parallel

一张GPU可能无法放下模型所以的参数和梯度和优化器。

由于矩阵乘法可以进行分解。将大矩阵切成小矩阵。
在这里插入图片描述
但是这样要保证每张GPU上的数据是一样的。
梯度需要拼接,所以需要All gather算子。
在这里插入图片描述
中间结果没有减少。但是模型参数和梯度和优化器参数减少了。
在这里插入图片描述

ZeRO Redundancy Optimizer

是基于数据并行的架构。

在这里插入图片描述

Zero阶段1

每张显卡更新一部分模型参数。
最后拼接每部分得到的模型参数。
在这里插入图片描述

Zero阶段2

继续优化。
阶段1需要在反向传播获得梯度后,进行reduce scatter。

由于优化器只需要用到gradient*。所以中间的gradient可以从显存中移除。
移除的时机是在进行反向传播的过程中。
在这里插入图片描述

Zero阶段3

继续优化。
前面数据并行并没有解决模型参数存储在GPU上的问题。
为此,前向传播过程中需要进行All Gather操作。
用完所有参数时,就进行释放。
PS:Zero3相比Zero2是用时间换空间的方法。
在这里插入图片描述

比较

在这里插入图片描述

流水线并行-Pipeline Parallel

模型不同的层分到不同的GPU。
弊端是:1号显卡工作时,后面的显卡处于空闲状态。
有一些方法是优化以解决资源浪费问题的。
在这里插入图片描述

优化技术

混合精度训练

FP16的数值表示范围更小,但是计算更快。
一般FP32。但是有时候也可以从FP32转到FP16。
将入梯度乘以学习率小于FP16的最小范围,那么可能产生下溢。它对参数的更新就会被忽略。
所以需要把参数更新量表示为FP32。
在这里插入图片描述
具体上,在混合精度训练中,为了加速前向和反向传播,会使用FP16的梯度。然后更新参数量用FP32进行累计。最后参数用FP16。
在这里插入图片描述

Offloading

优化器的参数可以放在CPU中。
通过把一张显卡绑定在多张CPU上,可以将每张CPU上的计算量降低。能够让CPU不会成为模型训练的瓶颈。
在这里插入图片描述

Overlapping

GPU中,memory操作一般是异步的。先给memory发送请求,然后进行其他计算,完了之后对memory请求进行接受。

在这里插入图片描述

Checkpointing

为了支持反向传播,需要保存中间结果。
通过设置检查点,只保留每个transformer层的输入。反向传播时,进行重计算,临时每个大层所有线性层的输入。
过了一层,就可以将检查点和临时重计算的中间结果从显存中扔掉。
在这里插入图片描述

BMTrain-使用介绍

表现:高效,便宜
在这里插入图片描述
使用时只需要进行简单替换。

BMCook

背景介绍

介绍大规模预训练模型压缩的相关技术。以及相关工具包BMCook。
下表是PLMs模型增长的趋势。
在这里插入图片描述

如何将大规模的计算量降下来,同时保留PLMs学习到的能力。
所以希望将大规模模型压缩。同时小模型基本上继承大模型的能力。
有效的方法可能包括:知识蒸馏;模型剪枝;模型量化;模型的专家化
在这里插入图片描述

知识蒸馏

假设:小模型只是去拟合大模型在输入空间的一个子空间的z映射。
teacher模型提供soft label,可能比直接提供金标准让student模型去学习,效果会更好。
在这里插入图片描述
第一篇关于PLMs的知识蒸馏的论文是PKD。
它的改进是student模型可以对teacher模型的中间层进行学习。

在这里插入图片描述
下面的工作进一步探索了老师模型中可以用做蒸馏计算的信号。

在这里插入图片描述

模型剪枝

剪枝可以分为非结构化剪枝和结构化剪枝。
研究发现,非结构化剪枝对计算的加速效果非常有限。
所以一般而言,对加速有用的是结构化剪枝:一次性将矩阵的一列或一行或一块删掉。
在这里插入图片描述

基于PLMs的剪枝工作和观察

对bert进行剪枝。
在这里插入图片描述

PLMs结构化剪枝的工作

注意力层剪枝。
在这里插入图片描述
在这里插入图片描述

层剪枝:随机dropout一些层
在这里插入图片描述

模型量化

神经网络并不需要很高的精度进行计算。所以考虑将浮点表示转化为定精度的表示。
这样可以把表示的位数和计算的位数降下来。
在这里插入图片描述

量化在研究方面的挑战

下图展示了不同的定精度表示对模型性能的影响。
在这里插入图片描述

其他模型压缩方法

参数共享-Weight Sharing

在这里插入图片描述

低秩分解-Low-rank Approximation

在这里插入图片描述

结构搜索-Architecture Search

在这里插入图片描述

BMCook-使用介绍

现在的PLMs是十分过参数化的。有一些方法被用于提高模型效率。
BMCook是一个工具包。它的目的是结合已有的有效的模型压缩方法,加速现有大规模模型。

在这里插入图片描述

BMInf

背景介绍

在部署大模型CPM2的demo时,遇到了一些问题:
1.对于单个应用的实力,就需要4块A100的GPU来推理。
2.单词请求需要10秒才能处理,即qps=0.1。
3.成本很高。4块A100一天费用为1200。
于是考虑能否在用户自己的电脑上把大模型跑起来。
市面上常见的GPU是GTX1060。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

面临的困难

1.大模型有很高的显存占用
2.大模型推理需要的算力要求很高。
在这里插入图片描述

深入理解Transformer

分析Transformer可以发现。模型推理过程中,大量时间在进行线性层运算。
在这里插入图片描述
所以要考虑如何优化线性运算。
在这里插入图片描述
考虑如何在允许一些精度损失的前提下,来优化整个线性层的运算效率。
在这里插入图片描述

量化-Quantization

将浮点数缩放到-127到127的范围内,这样就能用INT8来近似表示。
在这里插入图片描述
在这里插入图片描述
这种方法在模型尺寸小的时候还行,但是在Transformer上效果不好。原因可能是矩阵中有好几百万数字,只用一个缩放因子效果不好。因为相当于原本有好几万个值,但是直接变成只能是-127到127的值,表达能力下降。

更精细缩放

进行细粒度缩放,如行矩阵进行缩放。
在这里插入图片描述
优化后。
在这里插入图片描述

内存调度-Memory Scheduling

参考虚拟内存。将CPU也利用起来。
可以将暂时不用的参数放在CPU上。
在这里插入图片描述
在这里插入图片描述
实际测试发现:传输一层的时间往往超过计算一层需要的时间
所以考虑2层用于调度,其他n-2层固定
在这里插入图片描述
尽量扩大加载2层的间隔。

在这里插入图片描述
在这里插入图片描述

BMInf-使用介绍

表现

在这里插入图片描述

用法

在这里插入图片描述

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

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

相关文章

csp----寻宝!大冒险!

题目描述&#xff1a; AC代码如下&#xff1a; /*思路&#xff1a; 把A变成小块 因为B是A里的一部分 通过把A变成小块 去寻找B这样速度更快 如果AB,BA&#xff0c;说明找到了。 */#include <iostream> #include <cstring> #include <algorithm> #include …

【Java】初识Spring Mvc

SpringMVC_day01 今日内容 理解SpringMVC相关概念完成SpringMVC的入门案例学会使用PostMan工具发送请求和数据掌握SpringMVC如何接收请求、数据和响应结果掌握RESTful风格及其使用完成基于RESTful的案例编写 1&#xff0c;SpringMVC简介 看到SpringMVC这个名字我们会发现其中…

【人工智能】主要人工智能技术及深度学习及传统机器学习区别与联系

主要人工智能技术的基本概念和应用场景 机器学习英文简称ML是一门涉及统计学、系统辨识、逼近理论、优化理论、计算机科学、脑科学等诸多领域的交叉学科&#xff0c;主要研究计算机怎样模拟或实现人类的学习行为&#xff0c;以获取新的知识或技能&#xff0c;重新组织已有的知识…

【GAMES101】Lecture 10 几何表示

目录 隐式表示 代数曲面&#xff08;Algebraic surfaces&#xff09; CSG&#xff08;Constructive solid geometry&#xff09; 距离函数&#xff08;Distance Functions&#xff09; 水平集&#xff08;Level set methods&#xff09; 分形&#xff08;Fractals&#x…

【Android】MediaCodec学习

在开源Android屏幕投屏代码scrcpy中&#xff0c;使用了MediaCodec去获取和display关联的surface的内容&#xff0c;再通过写fd的方式&#xff08;socket等&#xff09;传给PC端&#xff0c; MediaCodec的处理看起来比较清楚&#xff0c;数据in和数据out 这里我们做另外一个尝试…

AI嵌入式K210项目(19)-安装CanMV IDE开发软件

文章目录 前言一、软件下载安装二、软件简介三、设备连接四、在线模拟五、开机运行程序附录&#xff1a;MicroPython固件烧录总结 前言 前几章我们介绍K210使用C语言裸机开发方法&#xff0c;大家对K210内部的硬件和各种加速器有了初步的了解&#xff0c;但是开发人工智能相关…

TypeScript(四) 运算符

1. 运算符 1.1. 描述 运算符用于执行程序代码运算。 1.2. 运算符主要包括&#xff1a; &#xff08;1&#xff09;算术运算符 &#xff08;2&#xff09;逻辑运算符 &#xff08;3&#xff09;关系运算符 &#xff08;4&#xff09;按位运算符 &#xff08;5&#xff09;赋值…

内部类 --java学习笔记

内部类 是类中的五大成分之一&#xff08;成员变量、方法、构造器、内部类、代码块&#xff09;&#xff0c;如果一个类定义在另一个类的内部&#xff0c;那么这个类就是内部类当一个类的内部包含了一个整体的事务&#xff0c;且这个事务没必要单独设计时&#xff0c;就可以把…

(十三)centos7案例实战——用户、用户组及用户权限管理

前言 对于完备的centos系统来说&#xff0c;创建一套规范的账户权限系统是十分必要的。针对不同的用户提供不同的操作权限&#xff0c;避免直接使用root账号&#xff0c;造成系统的误操作&#xff0c;导致一些不必要的损失&#xff0c;将删库跑路扼杀在摇篮中。本节内容会从用…

基于springboot校园台球厅人员与设备管理系统源码和论文

在Internet高速发展的今天&#xff0c;我们生活的各个领域都涉及到计算机的应用&#xff0c;其中包括校园台球厅人员与设备管理系统的网络应用&#xff0c;在外国管理系统已经是很普遍的方式&#xff0c;不过国内的管理网站可能还处于起步阶段。校园台球厅人员与设备管理系统具…

Fastbee物联网项目新手快速入门

一&#xff0c;前提条件 后端环境准备如下&#xff1a; 正式环境推荐硬件资源最低要求4c8G&#xff0c;硬盘40G。JDK 1.8.0_2xx (需要小版本号大于200) 。Maven3.6.3。&#xff08;IDEA启动时使用IDEA默认自带的版本即可&#xff09;。 启动fastbee之前&#xff0c;请先确定…

课时6:编程语言逻辑

1.2.2 编程语言逻辑 学习目标 这一节&#xff0c;我们从 语言分类、编程逻辑、小结 三个方面来学习。 语言分类 语言分类 低级编程语言&#xff1a;机器&#xff1a;- 二进制的0和1的序列&#xff0c;称为机器指令。- 一般人看不懂汇编&#xff1a;- 用一些助记符号替代机…

LPC804开发(4.ctimer使用)

1.前言 昨天晚上画完板子&#xff0c;还剩点时间就再翻了翻手册&#xff0c;大致清楚了时钟树的运行&#xff0c;顺带搞清楚了定时的使用&#xff0c;那就出一份教程吧。 如果各位在此之前没有接触过LPC单片机&#xff0c;还是建议先把程序直接贴进自己的项目&#xff0c;稍微…

“拔叔”的新片又杀疯了!

近&#xff0c;“拔叔”麦斯米科尔斯的新片登上口碑榜。 该片曾入围去年威尼斯金狮奖&#xff0c;上映后颇受好评&#xff0c;目前豆瓣评分8.2分。 将代表丹麦角逐2024年奥斯卡最佳外语片&#xff0c;目前已入15强。 作为“丹麦最性感的男人”&#xff0c;拔叔的实力不容小觑。…

Logistics 逻辑回归概念

1. sigmoid函数 逻辑回归算法的拟合函数&#xff0c;叫做sigmoid函数&#xff1a; 函数图像如下&#xff08;百度图片搜到的图&#xff09;&#xff1a; sigmoid函数是一个s形曲线&#xff0c;就像是阶跃函数的温和版&#xff0c;阶跃函数在0和1之间是突然的起跳&#xff0c;…

std::for_each

std::for_each 是 C STL 中的标准函数之一&#xff0c;用于对指定的容器或序列中的元素执行指定的操作。该函数的头文件为 <algorithm>&#xff0c;定义在 namespace std 中&#xff0c;因此需要包含该头文件才能使用该函数。 std::for_each 函数是 C STL 中自 C98 就开…

【JavaSE篇】——类和对象

目录 &#x1f393;类定义和使用 &#x1f393;简单认识类 &#x1f6a9;类的定义格式 ❗注意事项 &#x1f393;类的实例化 &#x1f6a9;什么是实例化 &#x1f6a9;类和对象的说明 &#x1f393;this引用 &#x1f6a9;为什么要有this引用 &#x1f6a9;什么是thi…

【JavaScript 基础入门】02 JavaScrip 详细介绍

JavaScrip 详细介绍 目录 JavaScrip 详细介绍1. JavaScript 是什么2. JavaScript的作用3. HTML/CSS/JS 的关系4. 浏览器执行 JS 简介5. JavaScript 的组成6. JavaScript 的特点 1. JavaScript 是什么 JavaScript&#xff0c;通常缩写为 JS&#xff0c;是一种高级的&#xff0c;…

分布式技术浅见之复制

分布式技术浅见之复制 前言一、何为复制&#xff1f;1.1 主从复制和无主从复制1.2 同步复制与异步复制1.3 来点栗子1.3.1 Redis1.3.2 Mysql1.3.3 Mongo 二、复制是如何实现的&#xff1f;2.1 复制的过程2.2 来点栗子2.2.1 Redis2.2.2 Mysql2.2.3 Mongo 2.2 复制的实现方式2.4 举…

OpenHarmony—不支持解构赋值

规则&#xff1a;arkts-no-destruct-assignment 级别&#xff1a;错误 ArkTS不支持解构赋值。可使用其他替代方法&#xff0c;例如&#xff0c;使用临时变量。 TypeScript let [one, two] [1, 2]; // 此处需要分号 [one, two] [two, one];let head, tail [head, ...tail]…