深度学习:大规模模型分布式训练框架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 Trainerdeepspeed_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使用

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

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

相关文章

九州金榜|家庭教育小妙招如何培养孩子学习习惯

做小学老师的时候,很多家长都问过我同一个问题,孩子成绩差,如何提高孩子的成绩? 好像成绩是我们的家长判断孩子是否优秀的唯一标准,一切都是围绕着成绩说话,考好了表扬、鼓励,考不好就会被批评…

【UE5.1】给森林添加天气效果

在上一篇博客(【UE5.1】程序化生成Nanite植被)基础上给森林添加天气交互效果,角色和雪地、水坑的交互效果。 目录 效果 步骤 一、准备工作 二、添加超动态天空 2.1 修改时间 2.2 昼夜交替 三、添加超动态天气 3.1 改变天气 3.2 …

uniCloud 云数据库(新建表、增、删、改、查)

新建表结构描述文件 todo 为自定义的表名 表结构描述文件的默认后缀为 .schema.json 设置表的操作权限 uniCloud-aliyun/database/todo.schema.json 默认的操作权限都是 false "permission": {"read": false,"create": false,"update&quo…

html中的form表单以及相关控件input、文本域、下拉select等等的详细解释 ,点赞加关注持续更新~

文章目录 表单创建表单forminput 标签input标签的value属性设置input标签格式单选框多选框上传文件下拉菜单文本域设置文本域格式label 标签按钮 表单 作用&#xff1a;收集用户信息。 使用场景&#xff1a; 登录页面注册页面搜索区域 创建表单form <form action".…

DataGear 4.7.0 发布,数据可视化分析平台

DataGear专业版 1.0.0 正式发布&#xff0c;欢迎试用&#xff01; http://datagear.tech/pro/ DataGear 4.7.0 发布&#xff0c;严重漏洞和BUG修复&#xff0c;具体更新内容如下&#xff1a; 新增&#xff1a;HTTP数据集新增【编码请求地址】支持&#xff0c;可用于解决请求…

希亦、觉飞、小吉三款婴儿洗衣机大比拼!全方位对比测评

由于年龄幼小的婴儿的皮肤都非常的幼嫩&#xff0c;因此婴儿衣物材质的类型大部分都是采用为纯棉&#xff0c;并且婴儿的衣物不能够与大人的衣物一起进行混洗&#xff0c;容易把细菌感染到宝宝的衣物上&#xff0c;因此很多家庭为了保证宝宝衣服的有效清洁&#xff0c;避免交叉…

TXT文本删除第一行文本变成空要如何解决呢

首先大家一起来看下这个TXT文本里面有多行内容&#xff0c;想把开头第一行批量删除不要掉。 1..如果是一两个本可以手动删除也很方便哦&#xff0c;如果文本量比较大如几十几、几百个文本大家一直都选用《首助编辑高手》工具去批量操作哦。批量操作可以大大提高工作效率。接来看…

AI实景无人直播创业项目:开启自动直播新时代,一部手机即可实现财富增长

在当今社会&#xff0c;直播已经成为了人们日常生活中不可或缺的一部分。无论是商家推广产品、明星互动粉丝还是普通人分享生活&#xff0c;直播已经渗透到了各行各业。然而&#xff0c;传统直播方式存在着一些不足之处&#xff0c;如需现场主持人操作、高昂的费用等。近年来&a…

Minitab 各版本安装指南

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

MacOS - 苹果电脑程序还能正常启动,但图标消失不见了~

问题描述 网上有一些解决方案说是 killall Finder 命令&#xff0c;重置 Docker 等等&#xff0c;但是发现还是不行&#xff0c;于是必杀技…… 解决方案 方案一、删除该 App&#xff0c;重装即可方案二、如果懒得重装&#xff0c;可以在 Finder 中找到对应的应用程序&#xf…

如何把照片多余的地方擦除?一键消除图片上的瑕疵,简单又轻松,太方便了

在数字繁荣的时代&#xff0c;图片处理已然成为我们生活乐章中不可或缺的一部分&#xff0c;就如画师手中的画笔般灵动&#xff0c;摄影师镜头下的世界般多彩。然而&#xff0c;在捕捉或获取这些美丽的图片时&#xff0c;可能会不小心闯入一些不速之客&#xff0c;给画面带来瑕…

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

File: rust/compiler/rustc_codegen_cranelift/src/value_and_place.rs 在Rust的编译器源代码中&#xff0c;rust/compiler/rustc_codegen_cranelift/src/value_and_place.rs文件扮演着重要的角色。它包含了与值和位置&#xff08;Place&#xff09;相关的实现和结构体定义&…

非常不错的SSH工具

Tabby 官网地址&#xff1a; Tabby - a terminal for a more modern age GitHub地址&#xff1a; GitHub - Eugeny/tabby: A terminal for a more modern age 使用说明&#xff1a; Xterminal 使用说明地址&#xff1a; 一款颜值、功能都很能打的 SSH 工具 官方地址&…

SpingBoot的项目实战--模拟电商【4.订单及订单详情的生成】

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于SpringBoot电商项目的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.功能需求 二.代码编写 …

求职开挂-用Chatgpt回答面试官的提问和帮助写代码可行不?

如果戴个谷歌眼镜去面试&#xff0c;直接AI扫问题得到答案&#xff0c;算不算作弊&#xff1f; 如果未来公司面试题目都连网&#xff0c;大家用力扣刷题之类学会做了&#xff0c;找工作工资多拿个20%&#xff0c;多个3-5000一个月不是很美&#xff1f; 最近的电视剧《鸣龙少年…

数据结构—环形缓冲区

写在前面&#xff0c;2023年11月开始进入岗位&#xff0c;工作岗位是嵌入式软件工程师。2024年是上班的第一年的&#xff0c;希望今年收获满满&#xff0c;增长见闻。 数据结构—环形缓冲区 为什么要使用环形数组&#xff0c;环形数组比起原来的常规数组的优势是什么&#xf…

mysql的读写分离

MySQL 读写分离原理 读写分离就是只在主服务器上写&#xff0c;只在从服务器上读。 主数据库处理事务性操作&#xff0c;而从数据库处理 select 查询。 数据库复制被用来把主数据库上事务性操作导致的变更同步到集群中的从数据库。 常见的mysql读写分离分为以下两种 1&…

CMake入门教程【核心篇】添加库(add_library)

&#x1f608;「CSDN主页」&#xff1a;传送门 &#x1f608;「Bilibil首页」&#xff1a;传送门 &#x1f608;「本文的内容」&#xff1a;CMake入门教程 &#x1f608;「动动你的小手」&#xff1a;点赞&#x1f44d;收藏⭐️评论&#x1f4dd; 文章目录 1. 基本用法2.STATIC…

印刷企业如何快速上线MES管理系统解决方案

随着科技的不断发展&#xff0c;印刷行业正面临着前所未有的挑战与机遇。为了提高生产效率、降低成本、提升企业竞争力&#xff0c;许多印刷企业开始引入MES管理系统解决方案。然而&#xff0c;对于很多企业来说&#xff0c;如何快速、有效地上线MES管理系统却是一个难题。本文…

从门店客流看全国消费趋势,6张图展现元旦假期客流增长趋势

在刚刚过去的2024年元旦小长假&#xff0c;全国各地迎来了新年的第一波消费热潮。悠络客平台数据显示&#xff0c;2024元旦期间&#xff0c;零售、餐饮、教育等行业门店日均客流均呈现大幅上涨趋势&#xff0c;迎来了客流高峰。 这也是全国消费复苏的缩影&#xff0c;从门店客流…