dense并行训练1-流水线并行

news/2024/7/4 0:51:11/文章来源:https://www.cnblogs.com/sunstrikes/p/18270017

并行训练-流水线

简述

并行训练主要有三种策略:

  1. 数据并行训练加速比最高,但要求每个设备上都备份一份模型,显存占用比较高,但缺点是通信量大。
  2. 张量并行,通信量比较高,适合在机器内做模型并行。
  3. 流水线并行,训练设备容易出现空闲状态,加速效率没有DP高;但能减少通信边界支持更多的层数,适合在机器间使用。

流水线并行

Micro-batch(Gpipe)

将网络结构进行纵向拆分, 每张卡训练其中的几层. 下图把网络拆成4层. 如果是按照纯粹的mini-batch训练, 每层之间是纯串行的. 后面的卡会始终等待前面的卡. 所以引入了micro-batch的概念. 把mini-batch进行更细粒度的拆分, 这样在完成batch0的fp之后, 卡0可以进行batch1的fp, 卡1就能开始batch0的fp. 从而提高并行度.

image-20240626203004792

存在的问题:

  1. 存在bubble_time: 每张卡的空闲时间 = (stage_num - 1) * (fp_time + bp_time)

\[\frac{(stageNum - 1)(tf + tp)}{(stageNum - 1)(tf + tp) + microNum(tf + tp)} = \frac{stageNum - 1}{microNum + stageNum - 1} \]

实际应用中 当mico-batch个数大于stageNum的4倍时, 可以忽略bubble_time

  1. 显存浪费: 当进行stage3的micro-batch 3时, 还需要保存前面所有mico-batch的fp中间结果用于bp.
  2. 在每个mini-batch之间无法并行. 因为下一个minibatch需要等当前所有的micro-batch更新完参数

PipeDream(非交错式1F1B DeepSpeed)

image-20240626191344318

在每个micro-batch fp完成之后立刻优先进行bp. 这样可以把当前batch的中间变量释放掉, bp完成后更新本机参数, 但这种方式存在参数更新冲突, 机器1和机器2使用的参数不一样, 机器1的batch5只用了 batch1反向后更新的参数, 但机器2的使用了batch2的, PipeDream通过多版本参数cache的思想来解决这个问题

image-20240626210948570

为啥worker1需要保存4个版本参数, 而worker4只需要1个呢? 这里的版本数和同一个batch fp和bp的间隔决定的. 如果我跑完fp后, 中间有其他batch更新的bp. 那就需要把这些bp结果给缓存起来, 不然就会导致fp和bp使用的不是同一份参数. 可以看到worker1的batch5 中间间隔了2,3,4 3次bp, 再加上它本身. 就得保存4份...这种方法对显存极度不友好, 所以有了下面的flush方式

1F1B-flush

image-20240626201932709

对比上面的F-then-B的方式, 1F1B优先bp计算. 每个micro-batch完成后直接释放掉了对应micro-batch的计算中间值.

只需要保存1份w, 在固定micro-batch个数后进行一次flush, 同步所有worker的权重使其保持同一个版本.

另外在stage3中 batch1 fp时, 因为batch0已经算完了. 所以可以直接复用batch0的显存不用重新分配.

[!NOTE]
这里有个疑问..越底层的stage需要缓存的中间值其实越多, 这种造成存储不均匀的问题怎么解决? 通过stage切分不同大小参数的方式么

1F1B-flush(交错式, megatron)

image-20240626213836419

这个方案有个新的概念, virtual_pipeline, 方案要求一个小批次中的微批次数量是管道并行大小(流水线中的设备数量)的整数倍

按之前非交错式的方法. 一共有8层, worker1如果是1/2层, worker2是3/4层..worker4是7/8层, 每个worker计算连续的层

那么virtual_pipeline如果是2的话, 会把每个worker进一步拆分, worker1变成了计算1/5层, worker2: 2/6层..类推, 相当于通过把每个worker从单一流水线拆成了virtual_pipeline个流水线.

  • 在之前的1F1B模式里, 因为每个机器计算是有先后顺序的, worker2的通信接收worker1的fp结果必须等worker1的fp完成.
  • 而在交错式设计里, worker2计算的是2/6层, 当他计算2的时候, 可以同步从worker1拿上一个batch的5层结果, 算完2后的理想状态就是直接算5. 能更好的把通信隐藏起来.

总结这个方案的优点:

  • 相邻的计算与通信操作无依赖关系, 可以加速并行执行
  • 发起通信操作时,通信的对端通常已经准备好了要通信的数据,通信操作不需要额外的等待时间。

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

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

相关文章

【Creo】关于Creo一换网络就报错许可证丢失问题解决方案

依照我的个人理解,Creo只要一更换网络,则其许可证里面的网卡参数和现在的网络就对不上了,所以就会出现报错,并且有可能是报错代码(-9),提示许可证激活有问题。我的解决方案如下:1、找到之前安装的时候生成许可证时候用的文件:FillLicense.bat,右键管理员身份运行 这…

CREO 沟槽加工刀路编程

直接参考这个视频:creo沟槽加工_哔哩哔哩_bilibili 不管是内部沟槽还是外部沟槽都可以用这个视频提供的方法编程。 用轮廓铣削的方法编程。一定要选择 切削-进入-延宕 切削-退出-延宕,这两个参数分别选择引入、引出。同时记得填写引导半径和进刀角,出刀角!

机械臂 - URDF建模

机器人建模文件样例: 6轴机器人建模<?xml version="1.0"?> <robot xmlns:xacro="http://www.ros.org/wiki/xacro" name="test"><xacro:property name="length" value="0.6"/><xacro:property name…

关闭Windows中每天都会自启的Adobe更新程序

该方法主要适用于电脑上没安装XXX安全卫士、xx电脑管家的用户。装有这些软件的用户,估计不会碰到这个问题。如果还是碰到了,找到开机优化选项,在界面上方的工具栏上找到计划任务,点击进去后找到Adobe相关的禁用就行。 下面是具体方法: 1.打开控制面板->系统和安全,找到…

WPF中3D控件的使用

wpf使用了Directx,所有才能够进行3D编程。 比较方便的是,3D模型也是声明式的,就像普通控件一样。 由于3D控件也是声明式的,所以还可以利用binding改变其属性控件Viewport3D 这是一个3D视口,所有的3D控件都要放在这里面。 3D空间的基本元素是 相机、 光源、 对象。<!--空…

file_paths.xml设置

<?xml version="1.0" encoding="utf-8"?> <paths><!--<external-path path="Android/data/com.copasso.cocobill/" name="files_root" />--><external-path path="." name="external_sto…

network_security_config设置

<?xml version="1.0" encoding="utf-8"?> <network-security-config><base-config cleartextTrafficPermitted="true" /> </network-security-config>

geekopen 介绍

前言全局说明一、说明二、 2.1 文件名:2.2 文件名:三、 3.1 文件名:3.2 文件名:四、 4.1 文件名:4.2 文件名:免责声明:本号所涉及内容仅供安全研究与教学使用,如出现其他风险,后果自负。图片尺寸红色文字:红色文字 浅红色文字:浅红色文字 深红色文字:深红色文字 浅…

模拟集成电路设计系列博客——7.5.1 积分型ADC

7.5.1 积分型ADC 积分型ADC是一种流行的对于慢速信号做高精度数据转换的方式。这类ADC有着非常低的失调与增益误差,且高度线性。更进一步的优势是积分型ADC在实现时仅仅需要很少的电路。积分型ADC的一个常用场景是用在测量仪器中,例如电压表或者电流表。 双斜积分型ADC的简化…

面经梳理-elasticsearch

梳理elasticsearch相关面经题目 写入过程,查询过程 索引过程 1、客户端发送索引请求 2、参数检查 3、数据预处理 4、判断索引是否存在 5、创建索引 判断索引是否存在。如果索引不存在,则判断是否能够自动创建,可以通过action.auto_create_index设置能否自动创建索引;如果节…

面经梳理-kafka

梳理kafka相关面经题目 Kafka的高性能的原因? Kafka就是依靠下列4点达到了高吞吐量、低延时的设计目标的。大量使用操作系统页缓存,内存操作速度快且命中率高。Kafka不直接参与物理I/O操作,而是交由最擅长此事的操作系统来完成。采用追加写入方式,摒弃了缓慢的磁盘随机读/写…

6.26

全让我糖丸了在学点分治 板子对着 5k 的代码贺了一天 终于在五节奥赛课的努力之下(被 5k )调出来了 然后打另一个板子我还挺厉害的,贺一遍就把板子记住了然后板子打错了(也是 5k 调出来的) 😥 语文周测的时候本来想回去写因为打 ABC 而旷掉的生物周测 结果回去晚了被 D …

Linux 上制作多启动 U 盘

Linux 上制作多启动 U 盘 方法一 Ventoy 参考官网 方法二 手动安装 grub 后分别分区 我本人也曾经长期使用过 Ventoy,这个工具对于新手来说确实容易上手,而且工具功能丰富。不过随着探索的深入,我现在也不是很喜欢 Ventoy,原因可能有很多,比如说工具复杂、源码看不懂一点(…

linux 创建体积小的桌面环境以运行微信和WPS

linux 创建体积小桌面环境以运行微信和WPS 使用 linux 做主力一年多了,最近准备重装系统。目前看来一些常用的闭源软件里,QQ 和搜狗输入法已经算是可以稳定使用了,但微信和 WPS 还有一堆问题,比如:微信:没有 linux 版,使用优麒麟的版本,那个是用网页版微信封装的,目录…

pta7-8分析

智能家居是在当下家庭中越来越流行的一种配置方案,它通过物联网技术将家中的各种设备(如音视频设备、照明系统、窗帘控制、空调控制、安防系统、数字影院系统、影音服务器、影柜系统、网络家电等)连接到一起,提供家电控制、照明控制、电话远程控制、室内外遥控、防盗报警、…

详解:把 Linux 系统做成 Livecd

详解:把 Linux 系统做成 Livecd本文比较长,制作 LiveCD 的时间也比较长Linux Livecd 有很多好处,比如常用于修复受损的系统,可以随时随地用一台电脑启动,对于 kali linux 来说用来做好人好事不留名,很刑很好。但是目前网上相关制作资料大多很差:要么是非常古老的资料,甚…

Sum of Single Effects Linear Regression (susieR):多个因果变异位点的鉴定

使用susieR鉴定多个因果变异位点只需要两个输入文件,一个输入文件是包含Zscore值的SNP位点(zscore.txt),另一个文件是LD matrix(LD.matrix.ld)。 zscore.txt 文件如下所示:LD.matrix.ld 文件如下所示:LD.matrix.ld 文件是通过plink生成的,使用到的命令如下: plink --…

中国居民膳食指南2022

梳理中国居民膳食指南2022中的重要信息中国居民膳食指南2022摘录 准则一 食物多样,合理搭配每天的膳食应包括谷薯类、蔬菜水果、畜禽鱼蛋奶和豆类食物。平均每天摄入12种以上食物,每周25种以上,合理搭配。每天摄入谷类食物200~300g,其中包含全谷物和杂豆类50~150g;薯类…

面经梳理-redis

梳理redis相关面经题目 Redis的高性能体现在哪些方面?纯内存访问 非阻塞I/O,Redis使用epoll作为I/O多路复用技术的实现,再加上Redis自身的事件处理模型将epoll中的连接、读写、关闭都转换为事件,不在网络I/O上浪费过多的时间 单线程避免了线程切换和竞态产生的消耗参考: 《…

Windows 10 迁移用户文件夹(C:\Users)到其他盘

Windows 10 迁移用户文件夹(C:\Users)到其他盘 目标:制作一个符号链接 C:\Users -> D:,像 linux 分区挂载那样。 事先说明:数据无价,请提前保存好用户目录数据。我本人是刚刚重装之后操作的,因此对数据不敏感。 本人参考了 Win11使用mklink转移C:\Users文件夹至非系统…