大模型相关资料整理

news2025/2/24 12:36:48

在这里插入图片描述

1. 大模型的挑战

GPT-3 175B模型的参数如下:
网络层(Number of layers): 96
句子长度(Sequence length): 2048
隐藏层大小(Hidden layer size): 12288
词汇表(Vocabulary size):51200
总参数量:约175B

1.1 对显存的挑战

175B的模型,一个原生没有经过优化的框架执行,各部分大概需要的显存空间:
模型参数:700 GB (175B * 4bytes)
参数对应的梯度:700 GB
优化器状态:1400 GB
所以,一个175B模型共需要大概2.8 TB的显存空间,这对 GPU 显存是巨大的挑战:
1)模型在单卡、单机上存放不下。以NVIDIA A10080GB为例,存放此模型需要超过35块。
2) 必须使用模型并行,并且需要跨机器。主流的A100 服务器是单机八卡,需要在多台机器之间做模型切分。

1.2 对计算的挑战

基于Transformer 架构的模型计算量主要来自于Transformer层和 logit 层里的矩阵乘,可以得出每个迭代步大致需要的计算量:
B: 批大小,S:句子长度,l:Transformer 层数,h:隐藏层大小,V:词汇表大小在这里插入图片描述
这是真实计算量的一个下限,但已是非常接近真实的计算量。关于此公式的详细说明,请参考 NVIDIA Paper(https://arxiv.org/abs/2104.04473)里的附录章节。
其中S=2048, l=96, h=12288, V=51200,在我们的实践中,B = 1536,一共需要迭代大约95000次。代入这次参数到上述公式,可以得到:
一次迭代的计算量:4.5 ExaFLOPS.
完整训练的计算量:430 ZettaFLOPS (~95K 次迭代)
这是一个巨大的计算量,以最新的NVIDIA A100的FP16计算能力 312 TFLOPS来计算,即使不考虑计算效率和扩展性的情况,需要大概16K A100*days的计算量。直观可以理解为16000块A100一天的计算量,或者一块A100 跑43.8年的计算量。

1.3 对通信的挑战

训练过程中GPU之间需要频繁的通信,这些通信源于模型并行和数据并行的应用,而不同的并行划分策略产生的通信模式和通信量不尽相同。
对于数据并行来说,通信发生在后向传播,用于梯度通信,通信类型为AllReduce,每次后向传播中的通信量为每个GPU上的模型大小。
对于模型并行来说,稍微复杂些。模型并行通常有横切和竖切两种,比如把一个模型按网络层从左到右横着摆放,横切即把每个网络层切成多份(Intra-layer),每个GPU上计算网络层的不同切块,也称为Tensor(张量)模型并行。竖切即把不同的网络层切开(Inter-layer),每个GPU上计算不同的网络层,也称为Pipeline (流水线)模型并行。
在这里插入图片描述
模型并行切分:上图为Pipeline模型并行切分,下图为Tensor模型并行切分
对于Tensor模型并行,通信发生在每层的前向和后向传播,通信类型为AllReduce,通信频繁且通信量比较大。
对于Pipeline 模型并行,通信发生在相邻的切分点,通信类型主要为P2P,每次通信数据量比较少但比较频繁,而且会引入额外的GPU 空闲等待时间。

2 目前的一些解决方式

参考资料:全网最全-超大模型+分布式训练架构和经典论文
训练千亿参数大模型,离不开四种GPU并行策略

  1. 分布式并行加速:
    并行训练主要分为数据并行、模型并行、流水线并行、张量并行四种并行方式,通过上述四种主要的分布式并行策略来作为大模型训练并行的主要策略。
  2. 算法模型架构:
    大模型训练离不开Transformer网络模型结构的提出,后来到了万亿级稀疏场景中经常遇到专家混合模型MoE都是大模型离不开的新算法模型结构。
  3. 内存和计算优化:
    关于内存优化技术主要由激活Activation重计算、内存高效的优化器、模型压缩,而计算优化则集中体现在混合精度训练、算子融合、梯度累加等技术上。

Horovod、Tensorflow Estimator、PyTorch DDP等支持数据并行,
Gpipe、PipeDream、PipeMare等支持流水并行,
Mesh Tensorflow、FlexFlow、OneFlow、MindSpore等支持算子拆分

总训练速度 ∝ 单卡速度 * 加速芯片数量 * 多卡加速比

  1. 单卡速度
    单卡速度既然是运算速度和数据IO的快慢来决定,那么就需要对单卡训练进行优化,于是主要的技术手段有精度训练、算子融合、梯度累加来加快单卡的训练性能。
  2. 加速芯片数量
    理论上,AI芯片数量越多,模型训练越快。但是,随着训练数据集规模的进一步增长,加速比的增长并不明显。如数据并行就会出现局限性,当训练资源扩大到一定规模时,由于通信瓶颈的存在,增加计算资源的边际效应并明显,甚至增加资源也没办法进行加速。这时候需要通讯拓扑进行优化,例如通过ring-all-reduce的通讯方式来优化训练模式。
  3. 多卡加速比
    多卡加速比既然由计算、通讯效率决定,那么就需要结合算法和集群中的网络拓扑一起优化,于是有了数据并行DP、模型并行MP、流水线并行PP相互结合的多维度混合并行策略,来增加多卡训练的效率。

目前最流行的模式有两种:

  1. 参数服务器模式(Parameter Server,PS)
  2. 集合通讯模式(Collective Communication,CC)

其中参数服务器主要是有一个或者多个中心节点,这些节点称为PS节点,用于聚合参数和管理模型参数。而集合通信则没有管理模型参数的中心节点,每个节点都是 Worker,每个Worker负责模型训练的同时,还需要掌握当前最新的全局梯度信息。

参数服务器架构Parameter Server
PS架构包括两个部分,首先是把计算资源分为两个部分,参数服务器节点和工作节点:
1)参数服务器节点用来存储参数;
2)工作节点部分用来做算法的训练。
第二个部分就是把机器学习算法也分成两个方面,即1)参数和2)训练。
如图所示,PS架构将计算节点分为server与worker,其中,worker用于执行网络模型的前向与反向计算。而server则对各个worker发回的梯度进行合并并更新模型参数,对深度学习模型参数中心化管理的方式,非常易于存储超大规模模型参数。
在这里插入图片描述
但是随着模型网络越来越复杂,对算力要求越来越高,在数据量不变的情况下,单个GPU的计算时间是有差异的,并且网络带宽之间并不平衡,会存在部分GPU计算得比较快,部分GPU计算得比较慢。这个时候如果使用异步更新网络模型的参数,会导致优化器相关的参数更新出现错乱。而使用同步更新则会出现阻塞等待网络参数同步的问题。
GPU 强大的算力毋庸置疑可以提升集群的计算性能,但随之而来的是,不仅模型规模会受到机器显存和内存的制约,而且通信带宽也会由于集群网卡数量降低而成为瓶颈。
这个时候百度基于PS架构之上提出了Ring-All-Reduce新的通讯架构方式。
在这里插入图片描述
如图所示,通过异步流水线执行机制,隐蔽了 IO 带来的额外性能开销,在保证训练速度的同时,使训练的模型大小不再受制于显存和内存,极大提升模型的规模。而 RPC&NCCL 混合通信策略可以将部分稀疏参数采用 RPC 协议跨节点通信,其余参数采用卡间 NCCL 方式完成通信,充分利用带宽资源。

集合通讯模式(Collective Communication,CC)
在这里插入图片描述

2.1 NVIDIA Megatron

优化的分布式框架NVIDIA Megatron和优化的分布式集群架构NVIDIA DGX SuperPOD
NVIDIA Megatron 是一个基于 PyTorch 的框架,用于训练基于 Transformer 架构的巨型语言模型
资料链接:
NVIDIA Megatron:超大Transformer语言模型的分布式训练框架 (一)
NVIDIA Megatron:超大Transformer语言模型的分布式训练框架 (二)
Megatron repro: https://github.com/nvidia/megatron-lm
GPT3-175B training scripts: https://link.zhihu.com/?target=https%3A//github.com/NVIDIA/Megatron-LM/blob/main/examples/pretrain_gpt3_175B.sh

2.2 DeepSpeed

Pytorch的分布式并行计算框架(Distributed Data Parallel,简称DDP),它也仅仅是能将数据并行,放到各个GPU的模型上进行训练。

DeepSpeed,它就能实现这个拆散功能,它通过将模型参数拆散分布到各个GPU上,以实现大型模型的计算,弥补了DDP的缺点,非常方便,这也就意味着我们能用更少的GPU训练更大的模型,而且不受限于显存。
介绍:大规模深度学习框架 DeepSpeed 使用指南

DeepSpeed 是一个深度学习优化库,它使分布式训练变得容易、高效和有效。
DeepSpeed为所有人提供了极端规模的模型训练,从在大型超级计算机上进行训练到在低端群集甚至在单个GPU上进行训练的人员:

极端规模:将当前的GPU群集与数百种设备结合使用,实现3D并行 DeepSpeed 可以有效地训练具有数万亿参数的深度学习模型。
极高的内存效率:DeepSpeed 的ZeRO-Offload 仅需一个 GPU,即可训练超过10B参数的模型,比现有技术大10倍,使数十亿参数的模型训练民主化,从而使许多深度学习科学家可以探索更大更好的模型。

pip install deepspeed
Github 链接 https://github.com/microsoft/DeepSpeed
在这里插入图片描述

2.3 Elephas

Elephas 是 Keras 的扩展,它可以使用 Spark 大规模运行分布式深度学习模型。 Elephas 保持了 Keras 的简单性和高可用性,从而允许对分布式模型进行快速原型制作,该模型可以在海量数据集上运行。 Elephas 当前支持许多应用程序,包括:深度学习模型的数据并行训练分布式超参数优化集成模型的分布式训练。

安装 pip install elephas
Github 链接https://github.com/maxpumperla/elephas

2.4 FairScale

FairScale 是 PyTorch 扩展库,用于在一台或多台机器/节点上进行高性能和大规模培训。该库扩展了基本的PyTorch功能,同时添加了新的实验功能。
FairScale支持:

并行、分片训练、大规模优化、GPU内存优化、GPU速度优化

安装pip install fairscale
Github 链接https://github.com/facebookresearch/fairscale

2.5 TensorFlowOnSpark

通过将TensorFlow深度学习框架中的突出功能与Apache Spark和Apache Hadoop相结合,TensorFlowOnSpark可以在GPU和CPU服务器集群上实现分布式深度学习。

它支持在Spark集群上进行分布式TensorFlow训练和推理,其目标是最大程度地减少在共享网格上运行现有TensorFlow程序所需的代码更改量。

TensorFlowOnSpark由Yahoo开发,用于在Yahoo私有云中的Hadoop集群上进行大规模分布式深度学习。

安装【 for tensorflow>=2.0.0】 pip install tensorflowonspark
【 for tensorflow<2.0.0】 pip install tensorflowonspark==1.4.4
Github 链接 https://github.com/yahoo/TensorFlowOnSpark

2.6 Horovod

Horovod 是一个针对TensorFlow,Keras,PyTorch和Apache MXNet的分布式深度学习训练框架。
参考资料:分布式训练框架Horovod(一):基本概念和核心卖点
深度学习分布式训练框架 horovod – 弹性训练总体架构

2.7 veGiantModel

火山引擎:基于 Megatron和DeepSpeed
github:https://github.com/volcengine/veGiantModel

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

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

相关文章

java高级--SpringBoot篇

目录 一、什么是SpringBoot 二、SpringBoot的特点 三、springboot快速入门 四、介绍配置文件的种类 五、开发环境配置文件的切换 六、读取springboot配置文件中的内容 七、Springboot注册web三大组件 八、SpringBoot的底层原理 8.1 包扫描的原理 8.2 springboot自动装配原理…

如何备考高级软考的系统架构设计师?

架构设计师是软考高级科目&#xff0c;比较难&#xff0c;每一年的通过率在15%左右。 不过软考它的特点是考察的深度不深&#xff0c;但是范围比较广&#xff0c;特别是高级&#xff0c;对项目经验比较看重&#xff0c;如果没有项目经验的朋友&#xff0c;一定要多准备项目素材…

springboot10:web开发常用功能(拦截器,文件上传,异常处理)

一.拦截器 1.使用 访问任何请求&#xff0c;都只有登录才能访问&#xff0c;挨个写入请求太困难&#xff0c;使用拦截器机制handlerIntercepter&#xff08;prehandle方法&#xff0c;posthandle方法,afterCompletion方法&#xff09;编写一个拦截器实现handlerInterceptor接…

算法与数据结构 - 字节跳动笔试题

😄这里将持续更新接下来做过的字节跳动公司相关的笔试题,包括网上收集的秋春招笔试题、以及自己参加的字节举办的编程赛的题目。 🚀导航: ID题目描述NO.1小红走迷宫简单、按逻辑写即可ACNO.2铺水管dfs回溯、注意剪枝才能ACNO.3喵汪故事借助二分才能ACNO.4小超的游戏pytho…

学术论文写作以及discussions/results与conclusion的区别

经验帖 | 如何写SCI论文&#xff1f; Result、Discussion和Conclusion区别解析 如何写学术论文 一篇论文只能有一个主题&#xff0c;不能出现过多的研究问题&#xff0c;这样只会让文章读起来很乱。就像大牛经常讲的&#xff0c;“one paper, one story”&#xff0c;一篇论文…

unix/linux make

GNU:make 参考文档 程序的编译和链接 一般来说&#xff0c;无论是C还是C&#xff0c;首先要把源文件编译成中间代码文件&#xff0c;在Windows下也就是 .obj 文件&#xff0c;UNIX下是 .o 文件&#xff0c;即Object File&#xff0c;这个动作叫做编译&#xff08;compile&…

HummerRisk V0.5.1 发布:新增对象存储、优化K8s 资源态势和资源拓扑等

HummerRisk V0.5.1 发布&#xff1a;新增对象存储对接查看功能&#xff0c;增加 K8s 资源的部署信息查看&#xff0c;深度优化K8s 资源拓扑&#xff0c;并优化了镜像检测、云检测及资源态势同步等多个内容。 感谢社区中小伙伴们的反馈&#xff0c;你们的认可是我们前进的动力。…

java中的函数式接口是什么?

问题现象&#xff1a; 最近在复习java基础知识&#xff0c;发现了一个面试题&#xff1a; java中的函数式接口是什么&#xff1f; 问题分析&#xff1a; 老实说&#xff0c;我一开始看到“函数式接口”这个术语&#xff0c;愣了一下&#xff1a; java中的函数式接口是什么&…

移动WEB开发之流式布局--二倍图

物理像素&物理像素比 物理像素点指的是屏幕显示的最小颗粒&#xff0c;是物理真实存在的。这是厂商在出厂时就设置好了,比如苹果6\7\8 是 750* 1334 物理像素比就是屏幕的分辨率&#xff0c;分辨率越高&#xff0c;显示越清楚&#xff0c;750* 1334就是横的有750的像素点…

运行mbedtls自带Demo ssl_client的记录

概述&#xff1a; 运行mbedtls自带 ssl demo的记录&#xff1b; 操作过程&#xff1a; 编译Demo&#xff0c;请看我专栏中的相关文章 先运行服务端程序&#xff0c;运行ssl_server.exe&#xff0c;运行结果如下&#xff1a; mbedtls-3.2.1\mbedtls-3.2.1\programs\ssl> .…

目标检测论文解读复现之九:基于改进YOLOv5的复杂场景下SAR图像船舶检测方法

前言 此前出了目标改进算法专栏&#xff0c;但是对于应用于什么场景&#xff0c;需要什么改进方法对应与自己的应用场景有效果&#xff0c;并且多少改进点能发什么水平的文章&#xff0c;为解决大家的困惑&#xff0c;此系列文章旨在给大家解读最新目标检测算法论文&#xff0…

Linux:shell编程(内含:1.shell简介+2.shell实操+3.shell的变量介绍+4.shell变量的定义)

1.shell简介&#xff1a; 解释&#xff1a;界面编写各种命令时&#xff0c;需要一个解释器&#xff0c;解释器先执行后给linux。执行完之后&#xff0c;结果返回给界面。经常使用的是bash。 注&#xff1a;若界面执行的命令比较复杂&#xff0c;可以写一个脚本&#xff0c;xxx…

医疗健康产品展:联影医疗

​ 国内医疗健康行业的独角兽公司&#xff08;估值超10亿&#xff09; 联影医疗 1 基本信息 联影医疗是一家医疗设备和医疗信息化解决方案提供商&#xff0c;为医疗机构提供涵盖影像诊断设备、放疗设备、服务培训、医疗IT的全方位医疗解决方案。 联影筹建于2010年10月&…

第七章 树与森林

树与森林 7.1树的概念与表示 7.1.1树的定义及相关术语 1&#xff0e;树的定义 ​ 树&#xff08;Tree&#xff09;是n&#xff08;n≥0&#xff09;个有限数据元素的集合。当n&#xff1d;0时&#xff0c;称这棵树为空树。在一棵非树T中&#xff1a; ​ ⑴有一个特殊的数据…

算法常见高数知识

文章目录1. 偏微分方程和常微分方程1.1 偏微分1.2 常微分2. 表示方法&#xff08;名词/notation&#xff09;2.1 莱布尼兹表示3. 空间直线及其方程4. 方向向量4.1 两点求方向向量高数课本(有目录)可以看这个链接&#xff1a;1. 高等数学第六版.同济大学数学系.扫描版.pdf 1. 偏…

《InnoDB引擎‍》 MySQL缓存池

‍MySQL缓存池 InnoDB存储引擎是基于磁盘存储的&#xff0c;并将其中记录按照页的方式进行管理。因此可以将其视为基于磁盘的数据库。 在数据库系统中&#xff0c;由于CPU速度和磁盘速度之间的鸿沟&#xff0c;基于磁盘的数据库系统通常使用缓冲池技术来提高数据库整体性能。 缓…

阿里P8MySQL,基础/索引/锁/日志/调优都不误,一锅深扒端给你

阿里P8MySQL&#xff0c;你知道都问些啥吗&#xff1f;昨天小编特意去搜集了一些MySQLP8问题&#xff0c;经过整理归纳分为基础、索引、锁、日志、调优、开放问题等等168道题目&#xff0c;拿出这些题来测试一下自己水平可否&#xff1f;&#xff1f;&#xff1f; 先上一张MySQ…

Tomcat 源码解析一请求处理的整体过程-黄泉天怒(上)

本博客的很多的理论知识都来源于 《Tomcat内核设计剖析》这本书&#xff0c;大家的兴趣去读这本书&#xff0c;对于想了解Tomcat源码的小伙伴&#xff0c;肯定对你有所帮助 &#xff0c;但是想自己有亲身体会的话&#xff0c;还是要深入源码。 不然知道这些理论的知识&#xff…

Java面向对象:封装

1.封装&#xff1a; 面向对象的三大特征&#xff1a; 封装、继承、多态 它是什么&#xff1a; 封装&#xff1a;告诉我们&#xff0c;如何正确设计对象的属性和方法。 封装的原则&#xff1a;对象代表什么&#xff0c;就得封装对应数据&#xff0c;并提供数据对应的行为。 …

GUI编程--PyQt5--QWidget

文章目录QWidget简介功能作用控件的创建坐标系统控件位置与大小调整位置与尺寸最大、最小尺寸控件内容外边距设置鼠标的形状鼠标跟踪QWidget简介 控件是用户界面的最小元素&#xff0c;是一个矩形局域。没有父控件的控件为顶级控件&#xff0c;会装饰一个标题栏&#xff0c;成…