大模型训练(7):集合通信与通信原语

0 背景

分布式训练过程中设计到许多通信上的操作, 每个操作有其不同的术语并且有所区别,这里将其用简单的例子和描述总结一下,方便理解。

集合通信(Collective Communications)是一个进程组的所有进程都参与的全局通信操作,其最为基础的操作有发送send、接收receive、复制copy、组内进程栅障同步Barrier以及节点间进程同步,这几个最基本的操作经过组合构成了一组通信模板也叫通信原语,比如:

  • 1对多的广播broadcast
  • 多对1的规约reduce
  • 多对多的规约all-reduce
  • 多对1的收集gather
  • 多对多的收集all-gather
  • 1对多的发散scatter
  • 组合的规约与发散reduce-scatter
  • 多对多的all-to-all等

集合通信的难点在于通信效率以及网络硬件连接拓扑结构的最佳适用。其设备间的物理连接方式可以是私有物理互联协议,比如CXL、NVLINK,也可以是PCIe、InfiniBand、Ethernet等,本文将以此物理拓扑结构描述集合通信中常用的几组通信原语。

1 Broadcast(广播)

将一个设备上的数据广播到各个设备上,其他设备对该设备只进行读数据。

image-20250209162919979

Broadcast属于1对多的通信原语,一个数据发送者,多个数据接收者,可以在集群内把一个节点自身的数据广播到其他节点上。如上图所示,GPU1~4表示集群中的训练加速卡节点,小方块表示内存空间,最后都变成了a1b1c1d1。当主节点 1 执行Broadcast时,数据即从主节点0被广播至其他节点。

Broadcast是数据的1对多的同步,它将一张XPU卡上的数据同步到其他所有的XPU卡上,其应用场景有:

  • 数据并行的参数初始化,确保每张卡上的初始参数是一致的
  • All-Reduce里 broadcast + reduce组合操作里的broadcast部分
  • 分布式训练 parameter server 参数服务器结构里的 master 节点 broadcast 数据到 worker 节点,再从 worker 节点 reduce 数据回 master 节点里的broadcast操作

2 Reduce(规约)

Reduce是函数式编程的经典概念。数据规约涉及通过函数将一组数字缩减为一个较小的集合。例如,假设我们有一个数字列表[1,2,3,4,5]。用sum函数缩减这个数字列表将产生sum([1,2,3,4,5])= 15。同样,乘法规约将产生乘法([1, 2, 3, 4, 5]) = 120

image-20250209163514937

在上图的例子中,各设备上相同位置的元素进行加和,并将结果呈现在一个设备上(图中的例子为设备1)。

Reduce属于多对1的通信原语,具有多个数据发送者,一个数据接收者,可以在集群内把多个节点的数据规约运算到一个主节点上,常用的规约操作符有:求累加和SUM、求累乘积PROD、求最大值MAX、求最小值MIN、逻辑与 LAND、按位与BAND、逻辑或LOR、按位或BOR、逻辑异或LXOR、按位异或BOXR、求最大值和最小大的位置MAXLOC、求最小值和最小值的位置MINLOC等,这些规约运算也需要加速卡支持对应的算子才能生效。

Reduce是数据的多对1的规约运算,它将所有张XPU卡上的数据规约(比如SUM求和)到1张XPU卡上,其应用场景有:

  • All-Reduce里的 broadcast + reduce组合里的reduce操作
  • Reduce-Scatter组合里的 reduce操作
  • 分布式训练 parameter server 参数服务器结构里的 master节点 broadcast 数据到worker节点,再从worker节点reduce数据回master节点里的reduce操作;

3 All Reduce(全集规约)

相当于Reduce之后再来了一个Broadcast。

image-20250209163906114

All-Reduce属于多对多的通信原语,具有多个数据发送者,多个数据接收者,其在集群内的所有节点上都执行相同的Reduce操作,可以将集群内所有节点的数据规约运算得到的结果发送到所有的节点上。All-Reduce操作可通过在主节点上执行Reduce + BroadcastReduce-Scatter + All-Gather实现。每个节点的数值就都保持一致。

All-Reduce 是数据的多对多的规约运算,它将所有的XPU卡上的数据规约(比如SUM求和)到集群内每张XPU卡上,其应用场景有:

  • AllReduce应用于数据并行
  • 数据并行各种通信拓扑结构比如Ring,All-Reduce、Tree All-Reduce里的 All-Reduce操作

4 Gather(收集)

收集(即把东西放到一起,并不做运算),与Reduce不同的地方是,Gather只是将数据汇总到一起,而Reduce需要按照指定的映射函数进行运算

image-20250209220535754

Gather操作属于多对1的通信原语,具有多个数据发送者,一个数据接收者,可以在集群内把多个节点的数据收集到一个节点上,如上图所示,不同数据块都汇聚到了GPU1上。

Gather是数据的多对1的收集,它将多张XPU卡上的数据收集到1张XPU卡上,他的反向操作对应Scatter。

5 All Gather(全集收集)

即将所有人的所有数据都让所有人知道,做到所有数据透明。和Broadcast的区别是,这里是针对全局所有机器的数据来说,而Broadcast是针对一个机器,让其他所有人都知道你的数据。也就是All Gather数据传输的量更大。

image-20250209220929865

All-Gather是数据的多对多的同步全收集,它将多张XPU卡上的数据收集到多张XPU卡上,可以看做Gather + Broadcast的操作组合,它的反向操作对应Reduce-Scatter,其最应用场景有:

  • All-Gather可应用于模型并行
  • 模型并行里前向计算里的参数全同步,需要用All-Gather把模型并行里将切分到不同的XPU上的参数全同步到一张XPU上才能进行前向计算

6 Scatter(离散)

中文意思为离散,扩散。即将一个机器上的不同数据分别给到不同机器。

image-20250209221206467

同Broadcast一样,Scatter也是一个1对多的通信原语,也是一个数据发送者,多个数据接收者,可以在集群内把一个节点自身的数据发散到其他节点上。与Broadcast不同的是Broadcast把主节点0的数据发送给所有节点,而Scatter则是将数据的进行切片再分发给集群内所有的节点,如上图所示,主节点 1 将数据分为3份分发到了节点1-3。

Scatter是数据的1对多的分发,它将一张XPU卡上的数据进行分片再分发到其他所有的XPU卡上,他的反向操作对应Gather,其应用场景有:

  • Reduce-Scatter 组合里的 Scatter 操作
  • 模型并行里初始化时将模型 Scatter 到不同的XPU上

7 Reduce-Scatter(规约离散)

Reduce_scatter最终呈现效果为:每个GPU上有一部分完成所有设备粒度规约的数据,但是只有一块,其他块在其他的设备上。他和All reduce的区别在于,All reduce是所有设备上都有完整规约的数据。

这是一个不常见的通信函数,在深度学习显存优化ZeRO中经常被用到,如下图所示。

image-20250209222056096

Reduce-Scatter 属于多对多的通信原语,具有多个数据发送者,多个数据接收者,其在集群内的所有节点上都按维度执行相同的Reduce规约运算,再将结果发散到集群内其他的节点上,Reduce-Scatter等价于节点个数次的reduce规约运算操作,再后面执行节点个数的scatter次操作,其反向操作是All-Gather。

ReduceScatter是数据的多对多的reduce + scatter运算,它将所有的XPU卡上的数据先规约(比如SUM求和)到1张XPU卡上,再进行scatter,其应用场景有:

  • Reduce-Scatter即可应用于数据并行也可应用于模型并行
  • 数据并行All-Reduce里的 Reduce-Scatter + All-Gather组合里的Reduce-Scatter操作
  • 模型并行里在前向All-Gather后的反向计算里的Reduce-Scatter

8 All-To-All

All-To-All 操作每一个节点的数据会 Scatter 到集群内所有节点上,同时每一个节点也会 Gather 集群内所有节点的数据。

All-To-All 是对 All-Gather 的扩展,区别是 All-Gather 操作中,不同节点向某一节点收集到的数据是相同的,而在 All-To-All 中,不同的节点向某一节点收集到的数据是不同的,如下图所示

image-20250209232352094

All-To-All是数据的多对多的转置,它将所有张XPU卡上的数据转置到所有的XPU卡上,其主要应用场景有:

  • All-To-All应用于模型并行;
  • 模型并行里的矩阵转置;
  • 数据并行到模型并行的矩阵转置;

9 Send 与 Receive

数据或参数在不同XPU之间的发送与接收。

10 Barrier

Barrier同步操作会阻塞所有的调用者直到所有的组内成员都调用了它, 用于一个集合通信子中所有进程的同步,调用函数时进程将处于等待状态,直到通信子中所有进程 都调用了该函数后才继续执行。

11 Signal与Wait

Signal与Wait属于记录型信号量机制: wait(s),signal(s)可用于解决进程间的同步问题,在通信原语里从一个节点发送一个数据到另外一个节点时,会同时signal一个event值到对端,对端的wait操作接收到这个event时会返回一个确认给signal,这样保证在节点的进程间进行数据的同步操作。

12 相互关系与总结

在分布式训练过程中,深度学习训练框架不会去直接操作底层的通信网络,而是通过使用网络通信库来完成数据的集合通信,各家AI芯片加速卡厂家都会提供私有的网络通信库比如:xxx-AWARE OpenMPI或xCCL来完成这个底层通信硬件的屏蔽与抽象。在分布式训练集群里网络通信硬件连接样式多种多样,可以是Ethernet、InfiniBand 、RoCE v2/v1 等也可以是CXL、NVLINK等私有协议,这就要求在通信的后端层根据各个厂家的自己的SDK开发库接口,根据实际情况实现 各自的网络通信库,比如cuda-aware MPI、NCCL、NVSHMEM,以及根据实际的网络拓扑组合完成对应的最有效的网络拓扑算法。

本文讲述了分布式训练里的集合通信原语,这些原语是集合通信拓扑算法的基本组成单元,后续的文章里会讲述如何组合这些通信原语以完成合适的通信拓扑算法。

  • 只有Reduce相关的操作要做计算,其余操作都不涉及计算
  • Broadcast是针对单台机器对多台机器(1->N)
  • Gather是多台机器对单台机器(N->1)
  • All相关的操作是多台机器对多台(N->N)
  • All Reduce包括了All Gather的概念,即将加和(或者其他操作)后的数据再分发到各个设备上

Last 参考文献

  • Megatron + zero_我想静静,的博客-CSDN博客
  • Operations — NCCL 2.6.4 documentation
  • Broadcast,Scatter,Gather,Reduce,All-reduce分别是什么?-腾讯云开发者社区-腾讯云
  • 第3篇 - 分布式训练常用的集合通信及其通信原语 - 知乎

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

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

相关文章

线程上下文-ThreadLocal原理

ThreadLocal主要作用:为每个线程提供独立的变量副本,实现线程间的数据隔离,从而避免多线程环境下的资源共享冲突。 原理 ThreadLocal有个内部类 ThreadLocalMap,顾名思义是个Map结构:key为 ThreadLocal实例&#xff0…

第31周:文献阅读

目录 摘要 Abstract 文献阅读 问题引入 研究背景 研究动机 创新点 动态预训练方法(DynPT) 深度循环神经网络(DRNN) 传感器选择 方法论 时间序列的动态预训练 异构传感器数据的DRNN 基于稀疏度的传感器过滤 实验研…

Yolo图片标注的一些问题

1.标注工具的选择 在img.net和瑞芯微的双重加持下,现在的计算机视觉识别已经在各行业快速推进。进行自行标注时,首先遇到的问题就是标注工具的选择问题,标注工具不需要自己手工完成——也没有必要。类似这样的通用需求,交给专业…

排错 -- 用React.js,Solidity,智能合约构建最新区块链应用

真枪实弹:第一个Web3项目【上集】用React.js,Solidity,智能合约构建最新区块链应用详细教程 构建web跟随b站教程中遇到了很多错误,从今天开始构建完整的应用,在此记录一些排错。 问题情况1:跟随视频后无Src文件 问题情况1解决方法&#xff1…

杂记:下载了BootLoader和APP到程序中无反应

杂记:下载了BootLoader和APP到程序中无反应 是因为采用了printf输出打印。占用了大量堆栈导致程序运行异常。并且没有打开Use MicroLIB库的话会导致无法启动程序。 解决办法: 1、关闭printf打印。 2、如果不关闭printf打印,则加大Heap_Size…

Unet 改进:引入残差模块ResidualBlock

目录 1. ResidualBlock 2. UNet 引入残差模块 Tips:融入模块后的网络经过测试,可以直接使用,设置好输入和输出的图片维度即可 1. ResidualBlock 残差连接(Residual Connection)是深度学习中一种重要的技术,主要用于解决深层网络训练中的梯度消失和网络退化问题。它首次…

对接DeepSeek

其实,整个对接过程很简单,就四步,获取key,找到接口文档,接口测试,代码对接。 获取 KEY https://platform.deepseek.com/transactions 直接付款就是了(现在官网暂停充值2025年2月7日&#xff0…

【基于SprintBoot+Mybatis+Mysql】电脑商城项目之上传头像和新增收货地址

🧸安清h:个人主页 🎥个人专栏:【Spring篇】【计算机网络】【Mybatis篇】 🚦作者简介:一个有趣爱睡觉的intp,期待和更多人分享自己所学知识的真诚大学生。 目录 🚀1.上传头像 -持久…

【大模型】硅基流动对接DeepSeek使用详解

目录 一、前言 二、硅基流动介绍 2.1 硅基流动平台介绍 2.1.1 平台是做什么的 2.2 主要特点与功能 2.2.1 适用场景 三、硅基流动快速使用 3.1 账户注册 3.2 token获取 3.2.1 获取token技巧 四、Cherry-Studio对接DeepSeek 4.1 获取 Cherry-Studio 4.2 Cherry-Stud…

告别2023~2024

时间过得真快,距离上次写作2年多了。2023年~2024年的这两年时光里经历太多人生大事: 房贷,提前还贷买车,全款拿下租房搬家媳妇怀孕,独自照顾,……老人离世开盲盒喜提千金,百岁宴&am…

基于yolov11的阿尔兹海默症严重程度检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv11的阿尔兹海默症严重程度检测系统是一种创新的医疗辅助工具,旨在通过先进的计算机视觉技术提高阿尔兹海默症的早期诊断和病情监测效率。阿尔兹海默症是一种渐进性的神经退行性疾病,通常表现为认知障碍、记忆丧失和语言障碍等症状…

2025我的第二次社招,写在春招之季

先说一个好消息,C那些事 4w star了! 前面断更了一个月,本篇文章就可以看到原因,哈哈。 大家好,我叫光城,腾讯实习转正做后端开发,后去小公司做数据库内核,经过这几年的成长与积累&am…

使用Docker + Ollama在Ubuntu中部署deepseek

1、安装docker 这里建议用docker来部署,方便简单 安装教程需要自己找详细的,会用到跳过 如果你没有安装 Docker,可以按照以下步骤安装: sudo apt update sudo apt install apt-transport-https ca-certificates curl software-p…

Java集合List详解(带脑图)

允许重复元素,有序。常见的实现类有 ArrayList、LinkedList、Vector。 ArrayList ArrayList 是在 Java 编程中常用的集合类之一,它提供了便捷的数组操作,并在动态性、灵活性和性能方面取得了平衡。如果需要频繁在中间插入和删除元素&#xf…

【config目录】SpringBoot应用配置存放的地方

application.properties之前总是存放于默认的resources目录下,现在想想其实是不合适的,上线后其实这个配置是需要更改的,因此我们不要打包到jar包中。 根据SpringBoot应用配置查找规则,如果在jar包中resources目录查找不到的话&a…

洛谷 B3616 【模板】队列

B3616 【模板】队列 - 洛谷 | 计算机科学教育新生态 题目描述 请你实现一个队列(queue),支持如下操作: push(x):向队列中加入一个数 x。pop():将队首弹出。如果此时队列为空,则不进行弹出操作…

布丁扫描:手机扫描的纯净之选

在众多手机扫描软件中,布丁扫描凭借其纯粹的使用体验脱颖而出。它是一款功能强大且完全免费的手机端扫描工具,没有任何广告干扰,用户可以畅享纯净的使用过程。更值得一提的是,布丁扫描从未设置过充值入口,也不会在扫描…

2025 CCF BDCI|“基于TPU平台的OCR模型性能优化”一等奖作品

2024年12月,中国计算机学会在海南博鳌成功举办了第十二届CCF大数据与计算智能大赛(简称2024 CCF BDCI)。本届比赛的算能赛道吸引了1748名选手报名,经过激烈角逐,北京航空航天大学的“常务副SOTA”团队脱颖而出&#xf…

22.[前端开发]Day22-CSS单位-CSS预处理器-移动端视口

1 CSS常见单位详解 CSS中的单位 CSS中的绝对单位( Absolute length units ) CSS中的相对单位( Relative length units ) 1.em: 相对自己的font-size;如果自己没有设置, 那么会继承父元素的font-size 2.如果font-size中…

网站改HTTPS方法

默认的网站建设好后打开的样子那看起来像是钓鱼网站,现在的浏览器特别只能,就是你新买来的电脑默认的浏览器同样也会出现这样“不安全”提示。 传输协议启动了向全球用户安全传输网页内容的流程。然而,随着HTTPS的推出,传输协议通…