尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

初识分布式训练

初识分布式训练
📅 发布时间:2026/6/22 8:42:31

假设有N块GPU,模型有ψ个参数。

前提知识:每个参数对应一个梯度值,且SGD每个参数对应一个一阶动量,Adam每个参数对应一个一阶、一个二阶动量


DP(data parallel)

​ 数据并行(单进程,多线程,只用一个cpu核),每个GPU上都保存完整的模型参数(param,or p)与优化器状态(optimizer state,or os)。磁盘读取数据,通过一个cpu进程将数据分成多份,每个GPU一份,反向传播结束后,得到各自完整的梯度,其他GPU将各自计算的梯度同步到GPU0上,由GPU0的优化器平均梯度后并更新GPU0的参数,再将更新后的参数广播给其他GPU。

​ 各GPU的通信量如下:(其中N-1为其余GPU数,ψ为梯度更新一次的通信量)

image-20251109151601496

DP的问题在于:(1)单进程多线程,只能利用一个CPU核(2)GPU0的通信与计算压力大于其他GPU


DDP(distributed data parallel)

​ 分布式数据并行(多进程), 每个GPU上也都保存完整的模型参数(param,or p)与优化器状态(optimizer state,or os)。相比DP而言,用各自的优化器计算ring-allreduce后的梯度并更新参数,网络状态和优化器状态始终保持同步

Ring-AllReduce两个阶段:scatter-reduce和allgather

scatter-reduce示意图如下,每个GPU存有a、b、c,共3个梯度,经过3(模型参数量、梯度量即ψ)个通信回合,每个GPU上都有一个梯度值是完整的。(这个阶段梯度传递并相加)

image-20251109151621221

image-20251109151646671

image-20251109151700939

allgather示意图如下,(梯度传递并直接覆盖)。

image-20251109152204246

image-20251109152357859

​ 此外,为了提升效率,将梯度分组,先计算出来的那组梯度开始ring-allreduce同步,此时下一组梯度也正在被计算。

​ 边计算边同步梯度

image-20251109153026200

DDP通信量如下:(其中N-1为通信次数,ψ/N为单次通信量)

image-20251109153306588


Deepspeed ZeRO

DP和DDP每个模型都需要存储完整的模型参数、梯度、优化器状态。使用Adam优化器的显存占用如图

image-20251109162846309

而Deepspeed ZeRO-1、-2、-3分别对这三者做了处理,每张卡的显存占用如下图(baseline为标准DDP)​

DDP的显存为fp16(2B)参数+fp16(2B)梯度+优化器(12B=4B一阶动量+4B二阶动量+4B参数)

ds-zero-1:相比DDP优化了优化器显存

ds-zero-2:相比DDP优化了优化器显存+梯度显存

ds-zero-3:相比DDP优化了优化器显存+梯度显存+参数显存

image-20251109162720759

Deepspeed ZeRO-1

​ 以3个GPU为例(Aadm+AWP),每个GPU上的梯度和参数是完整的,但优化器不是,整个过程如下:

image-20251109164146430

  1. 同步:每个GPU从后往前计算梯度,当最后1/3的梯度计算完成,GPU0和GPU1将其同步给GPU2,计算呢后1/3的梯度均值;与此同时,3个GPU计算计算中间1/3的梯度,并同步给GPU1;前1/3的梯度,同步给GPU0;到此各GPU都拿到了自己负责那部分的梯度均值(fp16)。

  2. 更新:接着将fp16转为fp32(不存储)->进行缩放->更新优化器的fp32一阶动量和二阶动量->更新fp32的参数(master-weights)

    ->更新各自fp16的参数。

  3. 广播:广播各自那部分的fp16参数给其他GPU。

通信量分析:(N-1表示GPU数量,ψ/N为其余每个GPU同步的梯度量)

image-20251109164439787

Deepspeed ZeRO-2

相比ZeRO-1,梯度不再是每个GPU都需要保存,而是以桶(DDP中的桶)的形式同步给负责该部分梯度的GPU后释放该部分显存占用。

image-20251109172820129

  1. 同步:每个GPU从后往前计算梯度,当一桶的梯度计算完成,就将梯度同步给负责该部分梯度的GPU,其他GPU立即释放该部分的显存占用。
  2. 更新:反向传播完成,每个GPU都有了自己所负责部分的平均梯度,像ZeRO-1 2.那样更新参数。
  3. 广播:广播各自那部分的fp16参数给其他GPU。

通信量分析:与ZeRO-1通信量相同,显存进一步减少

Deepspeed ZeRO-3

再ZeRO-2的基础上对参数也进行划分。image-20251109174512439

  1. 计算梯度:广播参数,进行前向传播,计算该部分输出后释放所占用显存;反向传播时,再广播参数,进行梯度计算,并释放该部分参数显存。
  2. 更新:反向传播完成,每个GPU都有了自己所负责部分的平均梯度,像ZeRO-1 2.那样更新参数。

通信量分析:相比之前,不再需要第三步广播参数,但是仍然需要前向传播时分块广播参数,这个地方通信量不变;但是新增了反向传播时的参数广播开销约等于ψ,故单GPU的传入/传出:3ψ。

image-20251109174452652


总结:

deepspeed就是在DDP的基础上,减少单个GPU的显存占用的同时,-1、-2保存通信量不变,-3增加到了1.5倍,常用-2版本。

分布式训练的概览是这样,具体一些细节还在探索中~


参考:

https://www.bilibili.com/video/BV1mm42137X8/?spm_id_from=333.337.search-card.all.click&vd_source=da862fa7a218e81897b55d7e24fe26ee

相关新闻

  • 电脑监控软件,后台监控,适合家庭电脑、员工电脑监控
  • 题解:P10856 【MX-X2-T5】「Cfz Round 4」Xor-Forces
  • 题解:AT_abc147_f [ABC147F] Sum Difference

最新新闻

  • SQL注入实战:从Pikachu靶场入门到手工与自动化利用
  • 终极指南:3步掌握bge-large-zh-v1.5中文嵌入模型,轻松处理文本相似度任务
  • Agentic RL中的Tools:可验证、可演化的原子化动作单元
  • 2026年最新儋州市黄金回收白银回收铂金回收彩金回收靠谱门店TOP5权威榜单+实体老店联系方式 - 亦辰小黄鸭
  • 2026 AI培训机构完整对比:按个人目标精准择校 - 职业学校推荐官
  • NXP RW61x安全启动实战:从SB3.1镜像生成到OTP熔丝配置全解析

日新闻

  • 2026速览惠州叛逆青少年学校前十大排名名单出炉 - 武汉中职最新信息发布
  • 2026上饶白蚁消杀哪家好?15年本土2大权威白蚁防治公司推荐(金盾虫控/青蚁卫士) - 我叫一
  • 天龙八部单机版终极数据管理工具:5个技巧快速掌握游戏数据编辑

周新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号