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

news2025/1/17 0:02:08

为什么需要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.coloradmin.cn/o/1416711.html

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

相关文章

【Java】SpringMVC参数接收(二):JSON、URI、文件

1、获取JSON参数 RequestMapping("/hello") RestController public class HelloSpring {RequestMapping("/t10")public String t10(RequestBody UserInfo userInfo){return userInfo.toString();} } 2、获取URI中的参数 (1)获取单…

面对.pings勒索病毒威胁:深度解析如何对抗.pings勒索病毒的危害

导言: 随着科技的发展,互联网的普及,网络犯罪也在不断演变。其中一种恶意软件,.pings勒索病毒,威胁着个人和企业的数据安全。本文91数据恢复将介绍.pings勒索病毒的特点、如何恢复被加密的数据文件,以及有…

Codeforces Round 921 (Div. 2)

Codeforces Round 921 (Div. 2) Codeforces Round 921 (Div. 2) A. We Got Everything Covered! 题意:找到一个字符串s,使得所有可能长度为n的字符串都可以用前k个小写字母组成,并为s的子序列。 思路:A的题意理解对C很有用 首…

Leetcode 206 反转链表

反转链表 准备工作1)ListNode基本结构2)初始化ListNode集合 解法一:遍历创建新节点解法二:两组List,面向对象操作解法三:递归调用解法四:直接移动解法五:解法二的面向过程 Leetcode …

Java异常处理集合

Java异常处理 Java语言在执行后会中断,也就是在出错位置后的代码都不会被执行,为了使非致命错误后的程序仍然能够执行,引入异常处理机制。 异常 可处理的异常用Exception表示,不可处理的异常用Error表示,通常是栈内…

ShardingSphere之ShardingJDBC客户端分库分表下

目录 ShardingJDBC实战 STANDARD标准分片策略 COMPLEX_INLINE复杂分片策略 CLASS_BASED自定义分片策略 HINT_INLINE强制分片策略 ShardingJDBC实战 上篇已经将需要用到的类、数据库表都准备好了,本篇主要介绍分片配置文件。 STANDARD标准分片策略 如果按照上篇文…

Python笔记14-实战小游戏飞机大战(上)

文章目录 功能规划安装pygame绘制游戏窗口添加玩家飞机图像屏幕上绘制飞船代码重构驾驶飞船全屏模式射击 功能规划 玩家控制一艘最初出现在屏幕底部中央的飞船。玩家可以使用箭头键左右移动飞船,还可使用空格键射击。游戏开始时,一群外星人出现在天空中…

如何从 Android SD 卡恢复已删除的照片

您是否不小心从 Android SD 卡中删除了一些照片?您是否尝试访问昨天拍摄的照片,但无论您在哪里查看都找不到它们?您的 Android 手机的外部存储是否已损坏,其内容无法访问? 在这种情况下,您应该尽快采取行动…

LV老板重夺全球首富 再次超过马斯克;新东方安徽总部大厦启用;中国与泰国签署互免签证协定

今日精选 • LV老板重夺全球首富 再次超过马斯克• 新东方安徽总部大厦启用• 中国与泰国签署互免签证协定 投融资与企业动态 • ​​传Temu将于3月在美国上线半托管业务• 国内数字支付解决方案提供商 “连连数字” 估值150亿,即将IPO• 滴滴与宁德时代宣布成立…

【Javaweb程序设计】【C00164】基于SSM的飞机订票系统(论文+PPT)

基于SSM的飞机订票系统(论文PPT) 项目简介项目获取开发环境项目技术运行截图 项目包运行、免费远程调试 项目简介 这是一个基于ssm的飞机订票系统 本系统分为前台用户模块和后台管理员模块。 前台用户模块:当游客打开系统的网址后&#xff0…

营销领域有哪些著名的模型?如销售漏斗等

一、金字塔原理 模型 适用场景:提案 沟通 思考理论 模型 来源:麦肯锡 芭芭明托 1、表达的逻辑 遵循金字塔模型的逻辑,先说结论,后说论据。所有表达的内容都可归纳出一个核心论点。这个核心论点由N个论据作为支持,而…

Qt扩展-QXlsx读写Excel配置使用

QXlsx读写Excel配置使用 一、概述1. 功能概述2. 其他维护 二、安装1. 下载源码2. 配置项目3. 测试代码4. 运行结果 一、概述 项目介绍:https://qtexcel.github.io/QXlsx/Example.html GitHub:https://github.com/QtExcel/QXlsx/tree/master QXlsx 是一个…

时序分析中的去趋势化方法

时序分析中的去趋势化方法 时序分析是研究随时间变化的数据模式的一门学科。在时序数据中,趋势是一种随着时间推移而呈现的长期变化趋势,去趋势化是为了消除或减弱这种趋势,使数据更具平稳性。本文将简单介绍时序分析中常用的去趋势化方法&a…

java自定义异常处理操作

目录 引入 介绍 一、为我们的方法创建异常类 二、使用我们定义的异常类 引入 我们在编写java代码的时候,想要在我们自己写的方法中加入我们的异常处理 介绍 一、为我们的方法创建异常类 我们先单独创建一个类,来当作我们抛出异常的类 public class AgeIllegalException ex…

JavaScript DOM属性和方法之element元素对象

在HTML DOM中,elment对象表示HTML与纳素,可以包含的节点类型有元素u节点、文本节点、注释节点。它们有响应的属性和方法,有很多都是我们之前用过的。 一、element对象属性 1、attributes 2、childNodes 3、className 4、clientWidth、of…

计算机中丢失mfc100u.dll怎么解决,详细解析mfc100u.dll丢失的解决方法

遭遇“无法找到mfc100u.dll”的错误不必过分担忧,这是一个普遍现象。许多用户在启动某些软件或游戏的时候可能会碰到这样的情况。通常,这个错误信息表明你的计算机系统中缺失了一个关键的动态链接库(DLL)文件,它可能会妨碍应用程序的顺利启动…

Centos7 升级Docker 至最新版本

卸载旧版本的Docker yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine 安装需要的软件包 yum install -y yum-utils device-mapper-persistent-data lvm2 添加Docker的yum源 #yu…

uniapp,页面当有按钮的时候,可以做一个动态的效果

效果: 这个是当点着按钮的时候没有松开按钮的效果(没有阴影) 这个是当松开按钮的效果(有阴影) 原理讲解: 这段代码实现的业务逻辑是在一个Vue组件中控制“现金”按钮的阴影效果。具体来说,它通…

Qt WebEngine模块使用(开发环境安装和程序开发)

一、Qt WebEngine Qt WebEngine_hitzsf的博客-CSDN博客 Qt WebEngine模块提供了一个Web浏览器引擎,可以轻松地将万维网上的内容嵌入到没有本机Web引擎的平台上的Qt应用程序中。Qt WebEngine提供了用于渲染HTML,XHTML和SVG文档的C 类和QML类型&#xff…

服务端开发小记02——Maven

这里写目录标题 Maven简介Maven在Linux下的安装Maven常用命令 Maven简介 Apache Maven Project是一个apache的开源项目,是用于构建和管理Java项目的工具包。 用Maven可以方便地创建项目,基于archetype可以创建多种类型的java项目;Maven仓库…