DeepSpeed是一个深度学习优化软件套件,使分布式训练和推理变得简单、高效和有效。它可以做些什么呢?训练/推理具有数十亿或数万亿参数的密集或稀疏模型;实现出色的系统吞吐量并有效扩展到数千个GPU;在资源受限的GPU系统上进行训练/推理;实现前所未有的低延迟和高吞吐量的推理;以低成本实现极限压缩,实现无与伦比的推理延迟和模型尺寸减小。特别说明,DeepSpeed在Windows上仅支持推理,不支持训练。

一.DeepSpeed四大创新支柱


1.DeepSpeed-Training

  DeepSpeed提供了系统创新的融合,使大规模深度学习训练变得有效、高效,大大提高了易用性,并在可能的规模方面重新定义了深度学习训练版图。ZeRO、3D-Parallelism、DeepSpeed-MoE、ZeRO-Infinity等创新属于培训支柱[2]。

2.DeepSpeed-Inference

  DeepSpeed汇集了tensor、pipeline、expert和ZeRO-parallelism等并行技术的创新,并将它们与高性能定制推理内核、通信优化和异构内存技术相结合,以前所未有的规模实现推理,同时实现无与伦比的延迟、吞吐量和性能。降低成本。这种推理系统技术的系统组合属于推理支柱[3]。

3.DeepSpeed-Compression

  为了进一步提高推理效率,DeepSpeed为研究人员和从业人员提供易于使用且组合灵活的压缩技术来压缩他们的模型,同时提供更快的速度、更小的模型大小并显着降低的压缩成本。此外,ZeroQuant和XTC等SoTA在压缩方面的创新也包含在压缩支柱下[4]。

4.DeepSpeed4Science

  觉得离自己好遥远,就不介绍这个了[5]。

5.DeepSpeed软件架构

(1)APIs:配置参数都在ds_config.json文件中,上层通过简单的API接口就可以训练模型和推断。

(2)RunTime:DeepSpeed的核心运行时组件,使用Python语言实现,负责管理、执行和优化性能。它承担了将训练任务部署到分布式设备的功能,包括数据分区、模型分区、系统优化、微调、故障检测以及检查点的保存和加载等任务。

(3)DeepSpeed的底层内核组件,使用C++和CUDA实现。它优化计算和通信过程,提供了一系列底层操作等。

二.分布式模型训练

  分布式模型训练包括:数据并行,模型并行(张量并行和流水线并行),混合并行。如下所示:

1.数据并行

  在数据并行系统中,每个计算设备都有整个神经网络模型的完整副本(Model Replica),进行迭代时,每个计算设备只分配了一个批次数据样本的子集,并根据该批次样本子集的数据进行网络模型的前向计算。如下所示:


2.模型并行

  模型并行(Model Parallelism)往往用于解决单节点内存不足的问题。模型并行可以从计算图角度,以下两种形式进行切分:按模型的层切分到不同设备,即层间并行或算子间并行(Inter-operator Parallelism),也称之为流水线并行(Pipeline Parallelism,PP);将计算图层内的参数切分到不同设备,即层内并行或算子内并行(Intra-operator Parallelism),也称之为张量并行(Tensor Parallelism,TP)。如下所示:


3.混合并行

  混合并行(Hybrid Parallelism,HP)是将多种并行策略如数据并行、流水线并行和张量并行等进行混合使用。通过结合不同的并行策略,混合并行可以充分发挥各种并行策略的优点,以最大程度地提高计算性能和效率。如下所示:



4.DeepSpeed 3D并行策略示意图

  图中给出了包含32个计算设备进行3D并行的例子。神经网络的各层分为4个流水线阶段。每个流水线阶段中的层在4个张量并行计算设备之间进一步划分。最后,每个流水线阶段有两个数据并行实例,使用ZeRO内存优化在这2个副本之间划分优化器状态量。如下所示:



5.典型HPC集群硬件组成

  整个计算集群包含大量带有计算加速设备的服务器。每个服务器中往往有多个计算加速设备(通常2-16个)。多个服务器会被放置在一个机柜(Rack)中,服务器通过架顶交换机(Top of Rack Switch,ToR)连接网络。在架顶交换机满载的情况下,可以通过在架顶交换机间增加骨干交换机(Spine Switch)进一步接入新的机柜。这种连接服务器的拓扑结构往往是一个多层树(Multi-Level Tree)。如下所示:

三.如何存储参数

1.Model States

解析:模型本身相关且必须存储的内容,如下所示:

(1)Parameters:模型参数

(2)Gradients:模型梯度

(3)Optimizer States:Adam优化算法中的momentum和variance

2.Residual States

解析:非模型本身必须,但在训练过程中产生的内容,如下所示:

(1)Activation:激活值

(2)Temporary Buffers:临时存储

(3)Unusable Fragmented Memory:碎片化存储空间

3.混合精度训练

解析:混合精度训练就是一部分参数使用FP16(4B)存储,另一部分参数使用FP16或BF16(2B)存储,以此来减轻存储压力。FP32中第31位为符号位,第30到第23位用于表示指数,第22到第0位用于表示尾数。FP16中第15位为符号位,第14到第10位用于表示指数,第9到第用于表示尾数。BF16中第15位为符号位,第14到第7位用于表示指数,第6到第0位用于表示尾数。如下所示:


  混合精度优化过程,如下所示:

四.如何优化储存

  零冗余优化器(ZeRO)是一种用于大规模分布式深度学习的新颖内存优化技术,它可以大大减少模型和数据并行性所需的资源,同时可以大量增加可训练的参数数量。本质就是用完即弃,需要再补。如下所示:


  ZeRO是一系列显存优化方法的统称,它分为ZeRO-DP(Zero Redundancy Optimizer-Data Parallel)和ZeRO-R(Zero Redundancy Optimizer-Reduce)两部分。如下所示:

1.ZeRO-DP

(1)ZeRO-1

ZeRO-1对优化器状态都进行分片,占用内存为原始的1/4,通信容量与数据并行性相同。

(2)ZeRO-2

ZeRO-2对优化器状态和梯度都进行分片,占用内存为原始的1/8,通信容量与数据并行性相同。

(3)ZeRO-3

ZeRO-3对优化器状态、梯度以及模型参数都进行分片,内存减少与数据并行度和复杂度成线性关系,同时通信容量是数据并行性的1.5倍。

论文:ZeRO:Memory Optimizations Toward Training Trillion Parameter Models:https://arxiv.org/pdf/1910.02054.pdf

2.ZeRO-R

(1)激活检查点(Partitioned Activation Checkpointing)

activation的存储非常灵活,更需要设计好实验。

(2)临时缓冲区(Constant Size Buffer)

固定大小的内存Buffer。

(3)空间管理(Memory Defragmentation)

主要是将碎片化内存空间重新整合为连续存储空间。

3.ZeRO-Offload

  本质就是显存不够,内存来凑。ZeRO-Offload分为Offload Strategy和Offload Schedule两部分,前者解决如何在GPU和CPU间划分模型的问题,后者解决如何调度计算和通信的问题。

论文:ZeRO-Offload:Democratizing Billion-Scale Model Training:https://arxiv.org/pdf/2101.06840.pdf

4.ZeRO-Infinity

  ZeRO-Infinity是ZeRO-3的拓展,允许通过使用NVMe固态硬盘扩展GPU和CPU内存来训练大型模型。

论文:ZeRO-Infinity:Breaking the GPU Memory Wall for Extreme Scale Deep Learning:https://arxiv.org/pdf/2104.07857.pdf



  本文只是一个大纲框架,后续打算针对DeepSpeed和Megatron-LM框架写一个源码解读教程,以前总认为写软件没啥意思,现在发现分布式机器学习系统还是很有意思的,如果算法给力,直观可见的节省存储,提高训练效率,降低推理的延时和增加高吞吐量。

参考文献:

[1]DeepSpeed项目地址:https://github.com/microsoft/DeepSpeed

[2]DeepSpeed训练:https://www.deepspeed.ai/training/

[3]DeepSpeed推理:https://www.deepspeed.ai/inference

[4]DeepSpeed压缩:https://www.deepspeed.ai/compression

[5]DeepSpeed4Science网站和教程:https://deepspeed4science.ai/和https://www.deepspeed.ai/deepspeed4science/

[6]DeepSpeed入门:https://www.deepspeed.ai/getting-started/

[7]DeepSpeed JSON配置:https://www.deepspeed.ai/docs/config-json/

[8]DeepSpeed API文档:https://deepspeed.readthedocs.io/en/latest/

[9]DeepSpeed教程:https://www.deepspeed.ai/tutorials/

[10]DeepSpeed博客:https://www.deepspeed.ai/posts/

[11]deepspeed-mii:https://github.com/microsoft/deepspeed-mii

[12]Transformer DeepSpeed集成:https://huggingface.co/docs/transformers/main/main_classes/deepspeed

[13]DeepSpeed官方文档:https://deepspeed.readthedocs.io/en/latest/

[14]ZeRO & DeepSpeed: New system optimizations enable training models with over 100 billion parameters:https://www.microsoft.com/en-us/research/blog/ZeRO-deepspeed-new-system-optimizations-enable-training-models-with-over-100-billion-parameters/

[15]《大规模语言模型:从理论到实践》

DeepSpeed框架:1-大纲和资料梳理的更多相关文章

  1. 《精通Python爬虫框架Scrapy》学习资料

    <精通Python爬虫框架Scrapy>学习资料 百度网盘:https://pan.baidu.com/s/1ACOYulLLpp9J7Q7src2rVA

  2. 【微服务】使用spring cloud搭建微服务框架,整理学习资料

    写在前面 使用spring cloud搭建微服务框架,是我最近最主要的工作之一,一开始我使用bubbo加zookeeper制作了一个基于dubbo的微服务框架,然后被架构师否了,架构师曰:此物过时.随 ...

  3. Java集合框架系列大纲

    ###Java集合框架之简述 Java集合框架之Collection Java集合框架之Iterator Java集合框架之HashSet Java集合框架之TreeSet Java集合框架之Link ...

  4. Java基础19:Java集合框架梳理

    更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...

  5. 最新 iOS 框架整体梳理(二)

    在前面一篇中整理出来了一些了,下面的内容是接着上面一篇的接着整理.上篇具体的内容可以点击这里查看:   最新 iOS 框架整体梳理(一) Part - 2          34.CoreTeleph ...

  6. 最全各种系统版本的XPosed框架资料下载整理

    由于XPosed在不同安卓系统版本中对应的版本不同,给很多新手造成极大困扰,本文作者经过几番努力,给大家整理了各个版本对应的xposed框架版本以及相关资料,并附上相关下载链接,希望对大伙有所帮助. ...

  7. 【深度学习Deep Learning】资料大全

    最近在学深度学习相关的东西,在网上搜集到了一些不错的资料,现在汇总一下: Free Online Books  by Yoshua Bengio, Ian Goodfellow and Aaron C ...

  8. 机器学习(Machine Learning)&深度学习(Deep Learning)资料(Chapter 2)

    ##机器学习(Machine Learning)&深度学习(Deep Learning)资料(Chapter 2)---#####注:机器学习资料[篇目一](https://github.co ...

  9. 前端Js框架汇总【转】

    概述: 有些日子没有正襟危坐写博客了,互联网飞速发展的时代,技术更新迭代的速度也在加快.看着Java.Js.Swift在各领域心花路放,也是煞是羡慕.寻了寻.net的消息,也是振奋人心,.net co ...

  10. WEB前端JS与UI框架

    前端Js框架汇总 概述: 有些日子没有正襟危坐写博客了,互联网飞速发展的时代,技术更新迭代的速度也在加快.看着Java.Js.Swift在各领域心花路放,也是煞是羡慕.寻了寻.net的消息,也是振奋人 ...

随机推荐

  1. C++面试八股文:什么是构造函数?

    某日二师兄参加XXX科技公司的C++工程师开发岗位第29面: 面试官:什么是构造函数? 二师兄:构造函数是一种特殊的成员函数,用于创建和初始化类的对象.构造函数的名称与类的名称相同,并且没有返回类型. ...

  2. BLOB-CLOB 处理成String (*)

    实体类中的写法: --实体类对应的类型为byte[] (clob为char[]). /* byte[] blob = commonService.getPersonImage(bean.getIdCa ...

  3. AI重塑千行百业,华为云发布盘古大模型3.0和昇腾AI云服务

    [中国,东莞,2023年7月7日]华为开发者大会2023(Cloud)7月7日在中国东莞正式揭开帷幕,并同时在全球10余个国家.中国30多个城市设有分会场,邀请全球开发者共聚一堂,就AI浪潮之下的产业 ...

  4. HCL实验:3.两台PC通过路由器交换机PING通

    拓扑图 路由器配置网关 PC1 ping PC2, PC3

  5. GoFrame v2.5 版本发布,企业级 Golang 开发框架

    大家好啊,GoFrame 框架今天发布了 v2.5.0 正式版本啦! 本次版本主要是对已有功能组件以及开发工具上的改进工作.其中,开发工具新增了 gf gen ctrl 命令,以规范化定义.开发 AP ...

  6. Unity UGUI的RectMask2D(2D遮罩)组件的介绍及使用

    Unity UGUI的RectMask2D(2D遮罩)组件的介绍及使用 1. 什么是RectMask2D组件? RectMask2D是Unity UGUI中的一个组件,用于实现2D遮罩效果.它可以限制 ...

  7. CSS:使用透明色

    使用如下代码: background-color="#00000000"

  8. 【解惑】介绍三大数据库的with语句的写法及使用场景

    WITH 子句通常被称为 "Common Table Expressions"(CTE),俗称内存临时表,当使用 WITH 语句时,应注意具体的数据库版本和支持情况.以下是对 My ...

  9. [python]从环境变量和配置文件中获取配置参数

    前言 从环境变量和配置文件中获取配置参数,相关库: python-dotenv:第三方库,需要使用pip安装 configparser:标准库 示例代码 test.ini [mysql] host = ...

  10. 【go笔记】TCP编程

    前言 TCP服务端的处理流程 监听端口 接收客户端请求建立连接 创建goroutine处理链接 示例代码:TCP服务端 package main import ( "net" &q ...