分布式训练(DP和DDP)

1.数据并行(DP)

数据并行是最常用的并行训练方式,主要分为DataParallel(DP)和DistributedDataParallel(DDP)两种。

DP是早使用的数据并行方案,通过torch.nn.DataParallel()来调用,代码如下:

# 设置可见的GPU
os.environ['CUDA_VISIBLE_DEVICES'] = "0,1,2,3"

# 将模型放到GPU 0上,必须先把模型放在GPU上,后面才可以调用DP
model.cuda()

# 构建DataParallel数据并行化
model=torch.nn.DataParallel(model)

DP核心思想是将一个大的batch数据分割成多个子batch,并将子batch分配给不同的GPU进行并行计算。如下图将训练过程分为前向传播和反向传播详细分析: 

「前向传播:」

模型和完整的mini-batch数据被放置在Master GPU(例如GPU:0)上。

GPU:0将mini-batch数据分割成若干个子batch,并将这些子batch分发(scatter)到其它GPU上。

GPU:0将自身的模型参数复制到其它GPU,确保每个GPU上的模型参数完全相同。

每个GPU在单独的线程上对其sub-mini-batch的数据前向传播,计算出各自的输出结果。

GPU:0收集所有GPU的输出结果。

「反向传播:」

GPU:0基于收集的输出结果和真实label计算总损失loss,并得到loss的梯度。

GPU:0将计算出的loss梯度分发(scatter)到所有GPU上。

每个GPU根据收到的loss梯度反向传播,计算出所有模型参数的梯度。

所有GPU计算出的参数梯度被汇总回GPU:0。

GPU:0基于汇总的梯度更新模型参数,完成一次迭代的训练。

DP里面只有一个优化器Optimizer,这个优化器Optimizer只在Master GPU上进行参数更新,当环境不再不在改变的时候,其它GPU选择了躺平,当GPU:0忙前忙后去分发数据、汇总梯度,更新参数的时候,其它GPU就静静躺着。

DataParallel采用的是Parameter Server并行架构,在实现多GPU或多节点并行训练时,存在一些固有的局限性:

通信开销大:每个 「计算节点」 在每次迭代中都需要与参数服务器进行多次通信,以获取最新的参数更新并将计算的梯度发送回去。这种频繁的通信会导致网络带宽成为瓶颈,尤其是当模型参数量大且GPU数量众多时,通信延迟和带宽消耗会显著影响整体训练速度。

负载不均衡:其中一个GPU被指定为Master GPU,负责汇总梯度和广播更新等,Master GPU可能会承担额外的通信和计算负担,导致负载不均衡。这不仅会影响该GPU的计算效率,也可能拖慢整个训练过程的速度。同时导致GPU利用率不足。

「仅支持单机多卡模式,无法实现多机多卡训练。」

2.DDP

DDP采用多进程架构,赋予了每个GPU更多的自由,支持多机多卡分布式训练。每个进程都拥有自己的优化器Optimizer,可独立优化所有步骤。每个进程中在自己的GPU上计算loss,反向计算梯度。

在DDP中,不存在所谓的Master GPU,所有GPU节点地位平等,共同参与训练过程的每一个环节。每个GPU都会计算loss和梯度,然后通过高效的通信协议(如AllReduce)与其它GPU同步梯度,确保模型参数的一致性。

前向传播流程:

  1. 数据分配:每个进程从分布式采样器(DistributedSampler)获取其对应的数据子集。这些数据子集是按照进程的编号分配的,确保每个进程获得不同的数据。
  2. 模型复制:在所有进程中复制模型,并用DDP封装。每个进程的模型运行在其指定的GPU上。
  3. 计算输出:每个进程在自己的GPU上计算其数据子集的模型输出。这些输出是独立计算的,没有跨进程的通信。

反向传播流程:

  1. 计算损失:每个进程根据自己的输出和目标标签计算损失函数(loss)。
  2. 反向传播:调用loss.backward()在每个进程中独立进行反向传播,计算梯度。
  3. 梯度同步:DDP使用AllReduce算法在所有进程间同步梯度。这个步骤确保了所有进程的模型参数梯度是一致的。
    • Bucket机制:为了提高通信效率,DDP采用基于Bucket的方式组织和管理模型参数。模型参数被映射到不同的Bucket中,这样可以在反向传播过程中直接对Bucket中的参数计算梯度。
    • Autograd Hook:为每个参数的梯度累加器注册Autograd Hook,当反向传播过程中参数的梯度更新完成后触发。

优化器更新:每个进程使用自己的优化器根据同步后的梯度更新模型参数。由于所有进程的梯度是一致的,因此模型参数的更新也是一致的 

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

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

相关文章

黄仁勋:AI革命将创百万亿美元价值!近屿智能带你入局AIGC

11月13日,NVIDIA在日本成功举办了2024年AI峰会。一场关于人工智能驱动的新工业革命的讨论热烈展开。英伟达创始人兼CEO黄仁勋与软银主席兼CEO孙正义共同探讨了当前技术革命的独特之处及其深远影响。 黄仁勋在会上表示,AI革命将创造的价值不是以万亿美元计…

知网翻译助手及其10款翻译工具使用体验大PK!!!

在这个信息爆炸的时代,翻译工具成了我们日常工作中不可或缺的得力助手。作为一个经常需要处理多语言文件的人,翻译工具对我来说简直是救命稻草。除了知网助手外,我还用过不少翻译软件,现在,我就来说说知网翻译助手和其…

Entity Framework的简单使用案例

需要引入的框架: 实体类: [Table("Users")] internal class User {[Key]public int Id { get; set; }[Required][StringLength(100)][Index(IsUnique true)]public string Username { get; set; }[Required][StringLength(100)]public strin…

Scroll 生态全面启动为 Pencils Protocol 赋能,DAPP 将迎强势腾飞

​Pencils Protocol 是 Scroll 生态最大的综合性 DeFi 平台,随着 DAPP 通证面向市场,Pencils Protocol 生态经济体系也将迎来全面运转。目前,DAPP 通证已经陆续上线了 Gate、Kucoin、Bitget、Coinone 等主流交易市场,全球用户能够…

【英特尔IA-32架构软件开发者开发手册第3卷:系统编程指南】2001年版翻译,2-23

文件下载与邀请翻译者 学习英特尔开发手册,最好手里这个手册文件。原版是PDF文件。点击下方链接了解下载方法。 讲解下载英特尔开发手册的文章 翻译英特尔开发手册,会是一件耗时费力的工作。如果有愿意和我一起来做这件事的,那么&#xff…

CPLD架构

1. 通用CPLD构架 传统的CPLD内部构架布局如图1-1所示,可编程互连阵列(PIA)在芯片中心位置,而逻辑阵列块则在芯片四周靠近I/O模块。目前大多数的CPLD都是采用这种结构,包括Xilinx主流的CoolRunner系列和Altera MAX 300…

2024第十四届新华三杯预赛考试大纲

本文档取自新华三杯官方网站

类与对象

类: class默认私有,struct默认公有 面向对象的三大特性: 封装、继承、多态 封装:本质是一种管控;C数据和方法都放在类里面,使用访问限定符对成员限制 类的存储: 每个对象只存成员变量&#…

elf文件简单介绍

文章目录 elf 程序示意图ELF文件格式概述ELF的组成结构1. ELF头部(ELF Header)2. 程序头表(Program Header Table)与程序头项(Program Header Entry)3. 节区头表(Section Header Table&#xff…

【python系列】开篇:自学python的方法

1.前言 唯有自学才是最高效最省钱的学习编程的方法。最高效是因为你可以按照自己的节奏来进行学习,随时随地随心的学习,最主要的是掌握学习方法,当然培训老师是不会告诉你方法的,总是跟着培训老师在盲人摸象。最省钱是不用投入资…

【论文复现】交通路口智能监测平台实现

📝个人主页🌹:Eternity._ 🌹🌹期待您的关注 🌹🌹 ❀交通路口智能监测平台实现 1.概述2.工程文件简介2.1 工程文件结构2.2 训练检测模型2.2.1 准备数据集2.2.2 训练自己的权重文件2.2.3 使用自己…

不宽的宽字符

根据提示&#xff0c;通过nc 202.38.93.141 14202来进行连接&#xff0c;可以用自己的机器进行连接&#xff0c;也可以直接点击“打开/下载题目”连接&#xff1a; 意料之中的无法打开flag&#xff0c;看来得下载附件看看源码了 #include <iostream> #include <fstrea…

无脑使用matlab运行YOLOv5模型,实现目标检测

文章目录 前言代码报错解决方法缺点总结 前言 YOLO 是一种经典的一阶段目标检测算法&#xff0c;它将检测问题转化为回归问题。与 Faster R-CNN 不同&#xff0c;YOLO 不是提取 RoI,而是直接通过回归的方法生成每个类的边界框坐标和概率。与 Faster R-CNN相比&#xff0c;大大…

java ssm 高校固定资产管理系统 高校物资管理 资产信息 源码 jsp

一、项目简介 本项目是一套基于SSM的高校固定资产管理系统&#xff0c;主要针对计算机相关专业的和需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本、软件工具等。 项目都经过严格调试&#xff0c;确保可以运行&#xff01; 二、技术实现 ​后端技术&am…

《战国王朝》青铜材料具体作用介绍

《战国王朝》中的青铜材料是游戏里非常重要的金属材料&#xff0c;而青铜材料的具体作用就是青铜用于制作第三层次的工具和武器;它比铜制的更好&#xff0c;但不如铁和钢制的&#xff0c;相比石制和铜制工具&#xff0c;青铜物品的使用寿命更长。 战国王朝青铜材料有什么用 青…

unity3d————延时函数

1.public void InvokeRepeating(string methodName, float time, float repeatRate); 延迟重复执行函数 InvokeRepeating 参数一&#xff1a;函数名字符串 参数二&#xff1a;第一次执行的延迟时间 参数三&#xff1a;之后每次执行的间隔时间 注意&#xff1a; 1-1.延时函数第…

焊接手电钻板子后总结

复用旧工程部分方案注意事项&#xff1a; 粘贴暑假时候做的工程原理图&#xff0c;复制到现在的项目中竟然忘记修改3V3的名称&#xff0c;导致3V3MCU与3V3的区别&#xff0c;这个错误以后一定要注意&#xff1a; 现在工程中的供电3V3&#xff0c;不是3V3MCU: 焊接QFN芯片&…

大模型智能客服比传统智能客服“智”在哪里?

随着人工智能技术的飞速发展&#xff0c;智能客服已成为企业提升服务效率和客户满意度的关键工具。在智能客服的演进过程中&#xff0c;大模型智能客服以其卓越的性能和智能化水平&#xff0c;逐渐崭露头角&#xff0c;更是为客户服务带来了新的变革。那么&#xff0c;大模型客…

Google Play上架/更新被拒的原因及解决方案

Google Play商店是全球Android开发者发布应用的首选平台&#xff0c;但在这个平台上发布或更新应用时&#xff0c;开发者必须遵守严格的规定和政策。如果违反这些规定&#xff0c;应用可能会被拒绝上架或更新&#xff0c;甚至可能导致开发者账号被封禁。本文将总结Google Play上…

docker安装到D盘

双击安装docker默认是安装在c盘&#xff0c;并且安装时我们没法选择位置&#xff0c;如果我们要安装在其他盘可以通过命令行安装 1、下载docker https://docs.docker.com/desktop/setup/install/windows-install/ Docker Desktop 可以使用 WSL 和 Hyper-V任意一种架构&#xf…