深度学习:大规模模型分布式训练框架DeepSpeed

深度学习:大规模模型分布式训练框架DeepSpeed

  • DeepSpeed简介
  • DeepSpeed核心特点
  • DeepSpeed如何工作?
  • DeepSpeed如何使用?
  • 参考文献

DeepSpeed简介

在这里插入图片描述

随着机器学习模型变得越来越复杂和庞大,训练这些模型所需的计算资源也在不断增加。特别是在自然语言处理(NLP)等领域,模型大都达到了数十亿甚至数千亿参数的规模,这就需要多卡或者多节点分布式训练。为了有效地训练这些巨型模型,微软Microsoft推出了一个名为DeepSpeed的开源大规模模型分布式训练框架,提供了一些优化策略和工具,旨在支持大规模模型训练和更高效的训练过程。

DeepSpeed的设计初衷就是简化并优化大规模模型的训练。DeepSpeed 实现了3D并行,即三种并行方法的灵活组合:ZeRO 支持的数据并行,流水线并行和张量切片模型并行。这些技术可以极大地减少单个GPU的内存消耗,允许在有限资源下训练更大的模型。此外,DeepSpeed通过ZeRO-Offload可以同时利用CPU和GPU内存来训练大模型,极大地降低显存消耗。

DeepSpeed提供了高度优化的数据加载和网络通信工具,这些工具可以减少通信量、显著提高多GPU和多节点环境下的训练效率。该框架还支持混合精度训练,进一步提升了计算速度和资源利用率。此外,DeepSpeed提出了一种稀疏注意力核,与经典的稠密 Transformer 相比,它支持的输入序列长一个数量级,并在保持相当的精度下获得最高 6 倍的执行速度提升。

此外,DeepSpeed致力于优化大规模训练,但为了注重用户体验。DeepSpeed提供了易于集成的API,使得将现有的PyTorch模型迁移到DeepSpeed框架变得轻而易举,而无需进行大量的代码重写。

DeepSpeed是一个活跃的开源项目,其在GitHub上持续更新和维护,其Github链接为https://github.com/microsoft/DeepSpeed。

DeepSpeed核心特点

DeepSpeed的核心特点如下:
在这里插入图片描述
DeepSpeed在模型训练上提供了ZeRO、3D-Parallelism、DeepSpeed-MoE、ZeRO-Infinity 等创新技术,使大规模深度学习训练变得有效、高效,大大提高了易用性,并在可能的规模方面重新定义了深度学习训练格局。
DeepSpeed在模型推理上汇集了Tensor、Pipeline、Expert和ZeRO-parallelism等并行技术的创新,并将它们与高性能定制推理内核、通信优化和异构内存技术相结合,以前所未有的规模实现推理,同时实现无与伦比的延迟、吞吐量和性能。
DeepSpeed在模型压缩上,提供易于使用且组合灵活的压缩技术来压缩他们的模型,同时提供更快的速度、更小的模型大小并显着降低的压缩成本。
DeepSpeed团队推出了一项名为 DeepSpeed4Science 的新计划,旨在通过人工智能系统技术创新构建独特的能力,帮助领域专家解开当今最大的科学谜团。

DeepSpeed如何工作?

下面看一看DeepSpeed的一些核心组件和它们是如何工作的。

  1. ZeRO优化器
    ZeRO(Zero Redundancy Optimizer)是DeepSpeed的一个关键创新,旨在解决大模型训练中的内存瓶颈问题。它通过优化数据并行策略中的冗余数据来实现内存节省。简单来说,ZeRO将模型参数、梯度和优化器状态等分散存储在多个GPU上,而不是在每个GPU上存储一份完整的副本。它在训练期间使用动态通信计划,以在分布式设备之间共享必要的数据,以保持计算粒度和数据并行性的通信量。这样做可以显著减少每个GPU的内存负担,使得训练更大的模型成为可能。ZeRO的级别分类如下:
  • ZeRO-0:禁用所有类型的分片,仅使用 DeepSpeed 作为 DDP (Distributed Data Parallel);
  • ZeRO-1:分割优化器状态,减少了4倍的内存,通信容量与数据并行性相同;
  • ZeRO-2:分割优化器状态与梯度,8x内存减少,通信容量与数据并行性相同;
  • ZeRO-3:分割优化器状态、梯度与参数,内存减少与数据并行度和复杂度成线性关系。
  • ZeRO-Infinity 是ZeRO-3的拓展。允许通过使用 NVMe 固态硬盘扩展 GPU 和 CPU 内存来训练大型模型。ZeRO-Infinity 需要启用 ZeRO-3。
  1. ZeRO-Offload技术
    ZeRO-Offload进一步扩展了ZeRO的能力,通过将部分计算任务卸载到CPU上,减少了GPU上的计算需求。这允许在GPU资源受限的情况下训练大型模型,同时还能够有效利用CPU资源。
  2. 参数分片
    在DeepSpeed中,参数分片是另一种减少GPU内存需求的手段。通过将模型的参数分割成更小的片段,并在训练过程中只在必要时将它们加载到内存中,DeepSpeed可以进一步减少单个GPU所需的内存量,从而允许更大模型的训练。
  3. 混合精度训练
    混合精度训练是指在训练过程中同时使用FP16(半精度浮点数)和FP32(单精度浮点数)两种精度的技术。使用FP16可以大大减少内存占用,从而可以训练更大规模的模型。在使用混合精度训练时,需要使用一些技术来解决可能出现的梯度消失和模型不稳定的问题,例如动态精度缩放和混合精度优化器等。

DeepSpeed如何使用?

DeepSpeed可以与现有的PyTorch代码库无缝集成,开发者仅需进行少量修改即可开始使用。下面是一些基本的步骤在已经搭建好模型的基础上来开始使用DeepSpeed:

  1. 安装DeepSpeed:可以通过pip包管理器快速安装pip install deepspeed
  2. 修改代码以兼容DeepSpeed:这通常包括导入DeepSpeed库import deepspeed、初始化DeepSpeed引擎deepspeed.initialize(),并对数据加载器data_loader和迭代训练(前向传播和反向传播)进行设置。
  3. 配置运行环境:根据你的硬件和模型大小,设置配置文件,包括batch size、学习率、优化器选择、内存优化等等。
  4. 启动训练:使用DeepSpeed提供的命令行工具来启动训练过程,这个工具可以在多个GPU上分布式地运行你的模型。

此外,DeepSpeed现已集成到一些开源深度学习框架中,例如Transformers、Accelerate、Lightning、MosaicML、Determined和MMEngine。可以结合这些开源框架使用DeepSpeed,例如,transformers框架可以通过Trainer来使用集成的DeepSpeed功能,这种用法需要提供配置文件deepspeed_config.json,详细教程见transformers官网链接:

from transformers import Trainer

deepspeed_config = "./deepspeed_config.json"

model = ...
args = TrainingArguments(
	...
	deepspeed=deepspeed_config,
	...
)

trainer = Trainer(
    model=model,
    args=args,
    train_dataset=train_dataset,
    data_collator=data_collator,
    optimizer=optimizer,
)
trainer.train()
trainer.save_model("best")

参考文献

  1. [LLM]大模型训练(一)–DeepSpeed介绍
  2. [LLM]大模型训练(二)–DeepSpeed使用

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

satellite-image-deep-learning,一个遥感深度学习方向的宝藏网站

今天我们分享一个深度学习遥感相关的网站:「satellite-image-deep-learning」。这是一个github库,里面含有大量应用于卫星和航空图像的深度学习资源。 主要包括以下几个方面: annotation:提供数据集注释信息,里面包含…

【数据湖架构】数据湖101:概述

数据湖是非结构化和结构化数据池,按原样存储,没有特定的目的,可以建立在多种技术上,如Hadoop,NoSQL,Amazon Simple Storage Service,关系数据库或各种组合根据一份名为“什么是数据湖”的白皮书…

Mysql8.0新特性

一,redo log重构 (涉及写入缓存的点:redo log 8.0之前通过两个锁及队列的方式保证数据的一致性,8.0之后,去掉锁,采用了区间的方式,区间内的所有日志是原子性的,都是串行化执行&…

神经网络:激活函数的介绍

神经网络的激活函数是一种非线性函数,它被应用于每个神经元的输出,以引入非线性性质到网络中。 激活函数的目的是将输入转换为输出,并且将输出限制在特定的范围内。它们非常重要,因为线性变换(例如加法和乘法&#xf…

听GPT 讲Rust源代码--compiler(4)

File: rust/compiler/rustc_codegen_gcc/src/back/mod.rs rust/compiler/rustc_codegen_gcc/src/back/mod.rs 文件是 Rust 编译器的源代码中的一个模块,主要负责与 GCC(GNU 编译器集合)相关的后端代码生成。 在 Rust 编译器的架构中&#xff…

从“五力”看百亿西凤的必然性

执笔 | 文 清 编辑 | 萧 萧 2023年末,西凤成功突破市场阻碍、跑赢行业周期,正式跻身中国百亿白酒品牌阵容。这是一份全行业及全体西凤人“预期之内”的成绩单。 当下,中国白酒已经进入“存量竞争”时代,马太效应使得强者恒强…

Minitab 各版本安装指南

Minitab下载链接 https://pan.baidu.com/s/1PLqocknkoRGGI9lbV3e45A?pwd0531 1.鼠标右击【Minitab 21(64bit)】压缩包(win11及以上系统需先点击“显示更多选项”)选择【解压到 Minitab 21(64bit)】。 2.打开解压后的文件夹,鼠标右击【setu…

集群容器频繁OOMKilled的排查经历

背景 我司采用的是k8s治理编排容器服务 出现的问题:线上某个应用pod频繁重启,13天内每个pod重启约8~9次 排查步骤 1.查看pod重启原因和重启时间点 kubectl describe pods okr-indicator-deploy-84bc5779c-55xsn -n rishiqing-v2 State: …

【Proteus仿真】【51单片机】超声波测距系统

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真51单片机控制器,使用动态数码管、按键、HCSR04超声波、蜂鸣器模块等。 主要功能: 系统运行后,数码管显示超声波检测距离,当检测距离…

报告解读:中国新一代终端安全市场洞察,2023

报告解读 中国新一代终端安全市场洞察 2023 安全防御的“最前线” 01 混沌的企业安全 以下来自CSO们最关注的安全热点问题: Q1我们如何看待当下泛化的终端安全,混合的IT环境企业面临的安全变化? IDC:伴随着全球数字化转型的快…

【番外】【Airsim in Windows ROS in WSL2-Ubuntu20.04】环境配置大全

【番外】【Airsim in Windows &ROS in WSL2-Ubuntu20.04】环境配置大全 【前言(可省略不看)】1.在windows上面部署好UE4AirSim联合仿真环境2.在windows上面部署wsl2系统以及在wsl2上面部署ubuntu系统3.安装好ubuntu系统之后,目前只能在命…

Multipath多路径管理基础介绍与安装配置使用

0x00 前言简述 Q:什么是Multipath多路径? 答:Multipath I/O 电脑储存技术,指利用两个以上的路径同时在CPU与储存设备之间传送讯号,以达到侦错与强化效能的目的。 简单的说当服务器到某一存储设备有多条路径时,每条路径都会识别为一个单独的…

清风数学建模-数学规划模型

内容:数学规划模型(cab aeqbeq lbub) 一.题型类型 1.线性规划linprog 2.非线性规划 fmincon 3.整数规划 intlinprog 4.(0-1规划)(特殊的线性整数规划)intlinprog 5.多目标规划 linprog 标…

[DevOps-05] Jenkins实现CI/CD操作

一、简要说明 基于Jenkins拉取GitLab的SpringBoot代码进行构建发布到测试环境实现持续集成 基于Jenkins拉取GitLab指定发行版本的SpringBoot代码进行构建发布到生产环境实现CD实现持续部署 二、准备Springboot工程 1、IDEA新建工程 2、填写项目工程信息 3、选择Springboot版本…

【数据结构】数组实现队列(详细版)

目录 队列的定义 普通顺序队列的劣势——与链队列相比 顺序队列实现方法: 一、动态增长队列 1、初始化队列 2、元素入队 3、判断队列是否为空 4、元素出队 5、获取队首元素 6、获取队尾元素 7、获取队列元素个数 8、销毁队列 总结: 动态增长队列…

配网故障定位技术的研究与实现:提高配网运行效率的必要手段

随着电力系统的不断发展,配电网作为电力系统的重要组成部分,其安全性和稳定性对于整个电力系统的运行具有重要意义。然而,配电网在运行过程中,由于各种原因导致的故障事件时有发生,严重影响了配网的运行效率和供电质量…

【单片机 TB作品】节拍器,电子音乐节拍器,51单片机,Proteus仿真

节拍器的使用可以使练琴者正确掌握乐曲的速度,从而使音 乐练习达到事半功倍的效果。本课题基于单片机设计具有声光晋 示的电子乐器节拍器,充分利用单片机的定时和中断系统,通过 C语言程序设计,控制外部相关硬件电路,实现对音乐速,度 40~120次/分钟范围内连续可调,节拍114、 2/4…

解决sublime中文符号乱码问题

效果图 原来 后来 问题不是出自encode文件编码,而是win10的字体问题。 解决方法 配置: { "font_face":"Microsoft Yahei", "dpi_scale": 1.0 } 参考自 Sublime 输入中文显示方框问号乱码_sublime中文问号-CSDN博…

学习调整echarts中toolbox位置toolBox工具栏属性

学习调整echarts中toolbox位置toolBox工具栏属性 toolbox工具栏属性介绍示例代码代码参数说明 toolbox工具栏属性介绍 参考网址:https://echarts.apache.org/zh/option.html#tooltip 属性类型说明toolbox.showbooleanboolean 默认值为true,是否显示工具…

Matlab进阶绘图第37期—多色悬浮柱状图

多色悬浮柱状图是一种特殊的柱状图。 与常规柱状图相比,多色悬浮柱状图可以通过悬浮的矩形展示最小值到最大值的范围(或其他范围表达),并通过颜色进行美化/区分/附加信息。 本文使用自己制作的Floatingbar小工具进行多色悬浮柱状…