【LLM工程篇】deepspeed | Megatron-LM | fasttransformer

news2024/11/25 11:30:01

note

  • 当前比较主流的一些分布式计算框架 DeepSpeed、Megatron 等,都在降低显存方面做了很多优化工作,比如:量化、模型切分、混合精度计算、Memory Offload 等

文章目录

  • note
  • 大模型参数计算
    • 1. 模型参数单位
    • 2. 训练显存计算
    • 3. 推理显存计算
  • 大模型的分布式训练
    • 1. 数据并行
    • 2. 模型并行
    • 3. 流水并行
    • 4. 混合并行
  • 模型量化
  • DeepSpeed ZeRO:零冗余优化
  • DeepSpeed Chat
  • fastertransformer:LLM推理加速引擎
  • Megatron-LM训练框架
  • 训练LLM需要的硬件
  • 大模型的ToB部署
  • Reference

大模型参数计算

1. 模型参数单位

“10b”、“13b”、"70b"等术语通常指的是大型神经网络模型的参数数量。其中的 “b” 代表 “billion”,也就是十亿。表示模型中的参数量,每个参数用来存储模型的权重和偏差等信息。例如:

“10b” 意味着模型有大约 100 亿个参数。
“13b” 意味着模型有大约 130 亿个参数。
“70b” 意味着模型有大约 700 亿个参数。
例如:Meta 开发并公开发布的 Llama 2 系列大型语言模型 (LLM),这是一组经过预训练和微调的生成文本模型,参数规模从 70 亿(7b)到 700 亿(70b)不等。经过微调的LLMs(称为 Llama-2-Chat)针对对话场景进行了优化。

meta-llama/Llama-2-7b-hf
meta-llama/Llama-2-13b-hf
meta-llama/Llama-2-70b-hf
输入:仅输入文本
输出:仅生成文本
模型架构:Llama 2 是一种使用优化的 Transformer 架构的自回归语言模型。调整后的版本使用监督微调(SFT)和带有人类反馈的强化学习(RLHF)来适应人类对有用性和安全性的偏好。

2. 训练显存计算

1.模型权重
模型权重是模型参数中的一部分,通常是指神经网络中连接权重(weights)。这些权重决定了输入特征与网络层之间的连接强度,以及在前向传播过程中特征的传递方式。所以模型

2.梯度

在训练过程中,计算梯度用于更新模型参数。梯度与模型参数的维度相同。

3.优化器参数
一些优化算法(如带有动量的优化器)需要保存一些状态信息,以便在每次更新时进行调整。这些状态信息也会占用一定的显存。比如:

  • 采用 AdamW 优化器:每个参数占用8个字节,需要维护两个状态。意味着优化器所使用的显存量是模型权重的 2 倍;
  • 采用 经过 bitsandbytes 优化的 AdamW 优化器:每个参数占用2个字节,相当于权重的一半;
  • 采用 SGD 优化器:占用显存和模型权重一样。

4.输入数据和标签
训练模型需要将输入数据和相应的标签加载到显存中。这些数据的大小取决于每个批次的样本数量以及每个样本的维度。

5.中间计算
在前向传播和反向传播过程中,可能需要存储一些中间计算结果,例如激活函数的输出、损失值等。

6.临时缓冲区
在计算过程中,可能需要一些临时缓冲区来存储临时数据,例如中间梯度计算结果等。减少中间变量也可以节省显存,这就体现出函数式编程语言的优势了。

7.硬件和依赖库的开销
显卡或其他硬件设备以及使用的深度学习框架在进行计算时也会占用一些显存。

【以 Llama-2-7b-hf 为例】
数据类型:Int8
模型参数: 7B * 1 bytes = 7GB
梯度:同上7GB
优化器参数: AdamW 2倍模型参数 7GB * 2 = 14GB
LLaMA的架构(hidden_size= 4096, intermediate_size=11008, num_hidden_lavers= 32, context.length = 2048),所以每个样本大小:(4096 + 11008) * 2048 * 32 * 1byte = 990MB
A100 (80GB RAM)大概可以在int8精度下BatchSize设置为50
综上总现存大小:7GB + 7GB + 14GB + 990M * 50 ~= 77GB
Llama-2-7b-hf模型Int8推理由上个章节可得出现存大小6.5GB, 由此可见,模型训练需要的显存是至少推理的十几倍。

3. 推理显存计算

  • 模型结构: 模型的结构包括层数、每层的神经元数量、卷积核大小等。较深的模型通常需要更多的显存,因为每一层都会产生中间计算结果。
  • 输入数据: 推理时所需的显存与输入数据的尺寸有关。更大尺寸的输入数据会占用更多的显存。
  • 批处理大小BatchSize: 批处理大小是指一次推理中处理的样本数量。较大的批处理大小可能会增加显存使用,因为需要同时存储多个样本的计算结果。
  • 数据类型DType: 使用的数据类型(如单精度浮点数、半精度浮点数)也会影响显存需求。较低精度的数据类型通常会减少显存需求。
  • 中间计算: 在模型的推理过程中,可能会产生一些中间计算结果,这些中间结果也会占用一定的显存。

大模型的分布式训练

【背景】假设神经网络中某一层是做矩阵乘法, 其中的输入 x x x 的形状为 4 × 5 4 \times 5 4×5, 模型参数 w w w 的形状为 5 × 8 5 \times 8 5×8, 那么, 矩阵乘法输出形状为 4 × 8 4 \times 8 4×8 。如下:
在这里插入图片描述

1. 数据并行

  • 数据并行:切分数据 x x x到不同设备上,在反向传播过程中,需要对各个设备上的梯度进行 AllReduce,以确保各个设备上的模型始终保持一致。适合数据较大,模型较小的情况,如resnet50
    • allReduce: 先将所有device上的模型的梯度reduce归约,然后将结果广播到所有设备上
      在这里插入图片描述

2. 模型并行

  • 模型并行:省去了多个设备之间的梯度 AllReduce;但是, 由于每个设备都需要完整的数据输入,因此,数据会在多个设备之间进行广播,产生通信代价。比如,上图中的最终得到的 out ( 4 × 8 ) (4 \times 8) (4×8) ,如果它作为下一层网络的输入,那么它就需要被广播发送到两个设备上。如bert
    在这里插入图片描述

3. 流水并行

  • 流水并行:模型网络过大,除了用模型并行,还能用流水并行(如下的网络有4层,T1-T4)
    在这里插入图片描述

4. 混合并行

  • 混合并行:综合上面的多种策略一起训练,如GPT3:
    • 首先被分为 64 个阶段,进行流水并行。每个阶段都运行在 6 台 DGX-A100 主机上。
    • 在6台主机之间,进行的是数据并行训练;
    • 每台主机有 8 张 GPU 显卡,同一台机器上的8张 GPU 显卡之间是进行模型并行训练。

模型量化

W4/8A16量化方案,显著节省显存:存储时int4/8,计算时FP16
在这里插入图片描述
在这里插入图片描述

DeepSpeed ZeRO:零冗余优化

DP: Data Parallel
MP: Model Parallel
在这里插入图片描述

  • deepspeed是微软大规模分布式训练框架,其中3D并行解决两大问题:显存效率+计算效率
  • DeepSpeed+Zero可以实现全参数微调
  • DeepSpeed ZeRO-2主要用于训练

deepspeed 的参数配置可参考:

  1. https://www.deepspeed.ai/docs/config-json/
  2. https://huggingface.co/docs/accelerate/usage_guides/deepspeed
  3. https://github.com/huggingface/transformers/blob/main/tests/deepspeed

DeepSpeed Chat

项目:https://github.com/microsoft/DeepSpeed/tree/master/blogs/deepspeed-chat

deepspeed最近推出的RLHF pipeline如下图,和之前很多LLM类似使用三部曲:sft、reward model、PPO,亮点是在第三步使用奖励模型对sft微调模型进行ppo时:

  • 基于指数移动平均计算的checkpoint:Exponential Moving Average (EMA) collection, where an EMA based checkpoint can be chosen for the final evaluation.
  • 混合训练(将pretrain和ppo混合训练):Mixture Training, which mixes the pretraining objective (i.e., the next word prediction) with the PPO objective to prevent regression performance on public benchmarks like SQuAD2.0.

在这里插入图片描述

fastertransformer:LLM推理加速引擎

项目链接:https://github.com/NVIDIA/FasterTransformer
将张量并行 (TP) 和流水线并行 (PP) 应用于transformer模型。
在这里插入图片描述
使用fastertransformer运行 GPT 模型的工作流程是:

  • 通过 MPI 或线程初始化 NCCL 通信并设置张量并行和流水线并行的ranks
  • 按张量并行、流水线并行和其他模型超参数的ranks加载权重。
  • 通过张量并行、流水线并行和其他模型超参数的ranks创建ParalelGpt实例。
  • 接收来自客户端的请求并将请求转换为 ParallelGpt 的输入张量格式。
  • 运行forward
  • 将 ParallelGpt 的输出张量转换为客户端的响应并返回响应。

Megatron-LM训练框架

项目:https://github.com/NVIDIA/Megatron-LM
论文:Megatron-LM: Training Multi-Billion Parameter Language Models Using
Model Parallelism
论文链接:https://arxiv.org/pdf/1909.08053.pdf

PS:codegeex就是采用的是8头TP,192头DP,共1536块GPU进行训练
采用的训练框架:Megatron + DeepSpeed ZeRO2。
项目:https://github.com/THUDM/CodeGeeX/tree/7365d9df242d87a5583d3f203e4b6c547dc6240e
codegeex paper: https://arxiv.org/abs/2303.17568
codegeex模型结构:
在这里插入图片描述

训练LLM需要的硬件

拿llama为例子:
在这里插入图片描述
上表源自《A Survey of Large Language Models》

大模型的ToB部署

目前企业应用大模型面临诸多难点:模型体积大,训练难度高;算力规模大,性能要求高;数据规模大,数据质量参差不齐。大模型产业化需要云计算厂商将模型开发、训练、调优、运营等复杂过程封装起来,通过低门槛、高效率的企业级服务平台深入产业,为千行百业提供服务。

【举例】(非guanggao)文心千帆大模型平台提供公有云服务、私有化部署两大交付模式。

  • 在公有云服务方面,将提供:推理(直接调用大模型的推理能力)、微调(通过高质量精标业务数据,高效训练出特定行业的大模型)、托管(将模型发布在百度智能云,以实现更加稳定高效的运行)三种服务,大幅降低企业部署大模型的门槛。
  • 在私有化部署方面,文心千帆大模型平台支持
    • 软件授权(提供在企业环境中运行的大模型服务)、
    • 软硬一体(提供整套大模型服务及对应的硬件基础设施),
    • 租赁服务(提供机器和平台的租赁满足客户低频需求)三种方式。私有化部属能够满足对数据监管有严格要求的企业客户需求。

Reference

[1] 大语言模型(LLM)分布式训练框架总结
[2] 【论文阅读】Megatron-LM要点
[3] Megatron LM 论文精读【论文精读】.李沐论文解读.b站
[4] 详谈大模型训练和推理优化技术.华师王嘉宁
[5] Finding the cause of RuntimeError: Expected to mark a variable ready only once
[6] 百度工程师首次现场演示:“文心千帆”如何可视化微调大模型
[7] 开源大模型部署及推理所需显卡成本必读:也看大模型参数与显卡大小的大致映射策略
[8] 也看大模型训练中的显存占用分析及优化方法:解析问题思路与策略的一些总结
[9] 大模型的好伙伴,浅析推理加速引擎FasterTransformer
[10] [NLP]深入理解 Megatron-LM(详解并行策略)
[11] 图解大模型训练之:Megatron源码解读2,模型并行
[12] https://github.com/NVIDIA/FasterTransformer/blob/main/docs/gpt_guide.md
[13] 一步一步理解大模型:零冗余优化器技术

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

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

相关文章

nodejs中的错误类型及捕获处理

nodejs中的错误类型及捕获处理 在 node 中,提供了 error 模块,并且内置了标准的 JavaScript 错误,本文将介绍在node中错误类型以及如何捕获。 错误类型 js错误 标准的js错误,跟在浏览器中运行js时提示的错误类型一样 RangeEr…

Linux 遍历目录(cd 命令)

Linux 遍历目录(cd 命令) 文章目录 Linux 遍历目录(cd 命令)一、cd 命令二、绝对文件路径三、相对文件路径 一、cd 命令 在 Linux 文件系统上,可以使用 cd 命令将 shell 会话切换到另一个目录。cd 命令的格式也很简单…

C++---多态

多态 前言多态的概念多态的定义及实现多态的构成条件虚函数虚函数的重写虚函数重写的两个例外协变(基类与派生类虚函数返回值类型不同)析构函数的重写 override和final 虚函数的默认参数 抽象基类 前言 在买火车票的时候,如果你是学生,是买半价票&#…

8年经验之谈 —— App测试常用的两种工具

一、监控工具 DDMS的全称是Dalvik Debug Monitor Service ,是Android开发环境中的Dalvik虚拟机调试监控服务。提供测试设备截屏、查看特定进程正在运行的线程以及堆信息、Logcat、广播状态信息、模拟电话呼叫、模拟接收及发送SMS、虚拟地理坐标等服务。 启动DDMS Eclipse中启…

某上市企业RFID资产管理设计解决方案

背景简介 该客户是一家集金融业务、房地产开发、商业地产等多元业务于一体的大型企业集团,作为一个拥有大量固定资产的企业,该客户一直以来面临着资产管理的难题,为了提高资产管理效率,降低管理成本,选择了广东航连科…

Python运算符、函数与模块和程序控制结构

给我家憨憨写的python教程 ——雁丘 Python运算符、函数与模块和程序控制结构 关于本专栏一 运算符1.1 位运算符1.1.1 按位取反1.1.2 按位与1.1.3 按位或1.1.4 按位异或1.1.5 左移位 1.2 关系运算符1.3 运算顺序1.4 运算方向 二 函数与模块2.1 内建函数2.2 库函数2.2.1 标准库…

elk日志某个时间节点突然搜索不到了

elk日志某个时间节点突然搜索不到了,检查filebeat正常 Kibana手动上传数据: 响应: Error: Validation Failed: 1: this action would add [2] total shards, but this cluster currently has [2000]/[2000] maximum shards open 原因:ElasticSearch总分片数量导致的异常,ES…

语言建模的发展阶段以及大规模语言模型的背景介绍

语言本质上是一个由语法规则控制的复杂、精密的人类表达系统,开发能够理解和掌握语言的AI 算法是一个重大挑战。作为一种主要方法,语言建模在过去两十年中已被广泛研究,从统计语言模型发展到神经语言模型,用于语言理解和生成。从技…

服务网格和性能优化:介绍如何通过服务网格提高微服务架构的性能和可扩展性

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

使用Jaeger进行分布式跟踪:学习如何在服务网格中使用Jaeger来监控和分析请求的跟踪信息

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

竹云董事长董宁受邀出席香港第三届湾区元宇宙大会暨AIGC、RWA发展高峰论坛并作主题演讲

“一元初分,宇宙万仪”。9月16日,第三届湾区元宇宙大会暨AIGC、RWA发展高峰论坛在香港圆满落幕。全球权威机构、顶级专家学者、杰出企业家代表齐聚一堂,畅所欲言,全面总结分析元宇宙现状,综合研判元宇宙未来发展趋势。…

DJYOS开源往事二:DJYOS开源工作室时期

2010年,罗侍田、王建忠等人在南山科技园创建都江堰操作系统工作室。通过自有资金、网友赞助资源等各种形式,从2010年开始建立了一支全职的民间组织的国产操作系统开发者团队。

vite构建的本地开发环境请求第三方接口时如何解决跨域问题

前言 在vite构建的本地开发环境中,请求第三方接口时如何解决跨域问题呢? 本地开发环境,只要请求接口,如果没有做代理配置,都会存在同源策略,跨域的问题,要么在本地做代理,要么在服务器做代理,要么在请求头中设置允许跨域,下面我们来介绍下如何解决vite构…

keil报错:Flash Download failed - Could not load file‘..\..\Output\Template.axf

keil报错:Flash Download failed - Could not load file’…\Output\Template.axf,如下图所示: 原因是很多.h文件没有定义位置,可以按照下图操作: 而且,如果是想使用压缩包,那一定要关闭keil后…

Re0: 从零实现一个解除文件占用的小工具

前言 相信大家或多或少都遇到过想删除一个文件,却提示被占用的情况: 不知道各位都是如何处理的,反正我一直都是用的火绒😄。但是作为一名程序员,自己写一个小程序实现多有意思,是吧。况且为了一个小工具去…

【微信小程序开发】宠物预约医疗项目实战-注册实现

【微信小程序开发】宠物预约医疗项目实战-注册实现 第二章 宠物预约医疗项目实战-注册实现 文章目录 【微信小程序开发】宠物预约医疗项目实战-注册实现前言一、打开项目文件二、编写wxss代码2.1 什么是wxss2.2 配置主程序全局样式 三. 在sign文件下的wxml文件中编写如下代码并…

使用qt完善对话框功能

1、 完善登录框 点击登录按钮后,判断账号(admin)和密码(123456)是否一致,如果匹配失败,则弹出错误对话框,文本内容“账号密码不匹配,是否重新登录”,给定两…

【深度学习实验】线性模型(五):使用Pytorch实现线性模型:基于鸢尾花数据集,对模型进行评估(使用随机梯度下降优化器)

目录 一、实验介绍 二、实验环境 1. 配置虚拟环境 2. 库版本介绍 三、实验内容 0. 导入库 1. 线性模型linear_model 2. 损失函数loss_function 3. 鸢尾花数据预处理 4. 初始化权重和偏置 5. 优化器 6. 迭代 7. 测试集预测 8. 实验结果评估 9. 完整代码 一、实验介…

大语言模型的机遇和挑战

自然语言处理包含自然语言理解和自然语言生成两个方面, 常见任务包括文本分类, 结构分析 (词法分析, 分词, 词性标注, 句法分析, 篇章分析), 语义分析, 知识图谱, 信息提取, 情感计算, 文本生成, 自动文摘, 机器翻译, 对话系统, 信息检索和自动问答等. 在神经网络方法出现之前,…

Vue3_vite

使用Vue-cli创建 使用vite创建 Composition API 组合API setup 1.Vue3中的一个新的配置项,值为一个函数 2.可以将组件中所用到的数据,方法等配置在setup中. 3.setup函数的两种返回值 3.1若返回一个对象,则对象中的属性,方法,在模板中均可以直接使用. 3.2若返回一个渲染函数…