微信扫码
与创始人交个朋友
我要投稿
高性能计算HPC、人工智能AI技术的发展,带来了不断激增的计算量,必须通过大规模集群算力才能充分发挥优势,例如,ChatGPT模型参数总量已经达到千亿级别,高性能计算也已经迈向百亿亿级计算时代。所谓的大规模训练就是使用大规模的数据或大规模参数量的模型来做训练。
相对于单卡训练,大规模的分布式训练常在训练数据量较大或模型参数规模太大导致单卡不可训练的场景下使用。如当训练数据量较大时,单卡训练耗时过长,需要分布式训练技术提高训练效率;或者当单卡无法支持训练时,即单卡显存无法放下全量模型参数时,可使用分布式训练技术将模型参数等模型信息切分到多张卡或多台设备上,以保证模型可训练。集合通信训练模式和参数服务器训练模式是两种最主要的分布式训练模式。
其中,集合通信(Collective communication)广泛运用在并行计算和分布式深度学习中,每台主机计算或训练好的参数通过集合通信进行全局更新和同步,随着数据量和集群规模增大,集合通信将成为性能瓶颈。
关于AllReduce集合通信原语
AllReduce是深度学习领域最常用的集合通信原语--归约操作,主要用于多机/多卡之间的梯度同步。提到AllReduce,就不得不说一下MPI(Message Passing Interface),MPI是一个定义了多个原语的消息传递接口,主要被用于多进程间的通信,OpenMPI是MPI的常用实现之一,在MPI中实现了多种AllReduce算法。以下我们先来看一下,AllReduce算法及其实现。
AllReduce通信从所有主机收集向量,以元素级方式“集合”向量,并将集合结果广播给它们(所谓“集合”主要包括求和、求最大、最小值等)。
近年来涌现了非常多的AllReduce算法,其中,比较经典的算法有:PS算法(Parameter server)、经典树形算法(Recursive halving and doubling)、Butterfly算法、Ring算法、Rabenseifner算法等。
PS算法(Parameter server),这是最直观的一种实现方式,Reduce + Broadcast,Parameter server作为中心节点,先全局Reduce接收所有其他节点的数据,经过本地计算后,再Broadcast回所有其他节点。该算法优点是简单、低时延;最大的缺点就是Parameter server节点会成为带宽瓶颈,存在N:1的incast问题。
经典树形算法,如果节点数是2的幂,所需通信步数是2*log2N。相比PS算法,最大的改进是规避了单节点的带宽瓶颈。该算法优点是简单、无单点瓶颈;缺点是时延高,不能同时利用发送和接收带宽。
如果节点数不是2的幂,则会先调整至符合2的幂后,再进行上述经典树形算法的操作。
Butterfly算法,通信的每步中,所有节点的发送和接收带宽都被利用起来了,如果节点数是2的幂,所需通信步数只有log2N。优点是所有节点的发送和接收带宽充分利用;缺点是大数据块时性能不理想,容易出现时延抖动。
Ring算法默认把每个节点的数据切分成N份,可以充分利用所有节点的发送和接收带宽,同时也改善了大数据块时的性能和时延抖动问题。Ring算法更容易实现高带宽,发送的数量量少,集合大数据的性能更好,但时延也更高。
Ring算法在做AllReduce算法时,分两个环节,分别是Reduce-scatter和AllGather。
递归加倍算法,步骤少,整合小数据时性能好,整合大数据块时性能不理想,容易出现时延抖动。
Rabenseifner算法,步骤数相对较少,发送数量量少,聚合大数据的性能较好。
上面简单总结了一下各种AllReduce算法实现,由于AllReduce算法的优化空间越来越少,业内逐渐转移到了拓扑感知的AllReduce算法,即在特定的拓扑上优化Allreduce算法,如2D-Torus算法、2D-Mesh算法、3D-Torus算法、Double binary tree算法等。
其中,Double binary tree(双二叉树)算法在多层CLOS架构组网中也有比较多的应用,前面提到经典树形组网优点是简单、无单点瓶颈,缺点是时延高,不能同时利用发送和接收带宽,为了充分利用带宽,提出了Double binary tree算法。
假设一共有N个节点,MPI会构建两个大小为N的树T1和T2,T1的中间节点在T2中是叶节点,T1和T2同时运行,各自负责消息M的一半,这样每个节点的双向带宽可以都被利用到。以十台机器为例,构建出的结构如下:
下面是一个32节点的双二叉树结构:
为什么要用到在网计算呢?
在一个多层CLOS架构的网络中进行集合通信操作,传统方案和在网计算方案的比较如下图所示。在网计算时需要传输的数据量大大减少,提升了数据传输的效率,同时也卸载了端侧节点上CPU的计算量。
在网计算模式
为了加速集合通信操作,业内尝试将集合通信操作卸载到网络路径设备中执行,主要实现思路有两个,基于网卡的在网计算和基于交换机的在网计算。
基于网卡的集合操作卸载,处理器提交集合操作请求到网卡队列,由网卡接管集合操作,当操作完成后,网卡发送完成事件以通知处理器。相对于基于软件的集合操作,这种方法主要有两个方面的优点:一是提供了非阻塞的操作方式,处理器在提交操作请求后,可以继续处理其它计算任务,这种方式有利于计算和通信的重叠,从而减少程序整体执行时间;二是集合操作中的计算大多是累加,求和等操作,适合采用SIMD的处理模式,与网卡的处理架构非常匹配,相对于软件执行能够获得较好的加速效果。但基于网卡的集合操作加速卸载也有两方面不足:一是无法减少集合操作在网络中的流量;二是其性能和网络拓扑的选择关系密切。由此,基于交换机的MPI_AllReduce操作应运而生。
基于交换机的集合操作加速,是指在交换芯片中加入对集合操作的支持,将集合操作卸载到各级交换机上完成,这将带来以下两个方面的收益:一是集合操作的计算部分由交换机完成,处理器资源得到一定程度的释放;二是对于规约操作,每级交换机在完成计算后,其出端口流量相比入端口流量有所降低,有利于提高整体网络性能。
英伟达的Quantum InfiniBand交换机支持可扩展分层聚合和缩减协议(SHARP,Scalable Hierarchical Aggregation and Reduction Protocol)实现在网计算,另外在英伟达最新发布的产品中,在NVSwitch芯片内通过硬件加速器也可以支持SHARP。在新版NCCL中除了支持Ring和Tree(双二叉树)的算法,还支持针对SHARP的CollNet算法。
除英伟达,中国移动研究院发布了《在网计算(NACA)技术白皮书(2023)》,华为也提出了NetReduce架构的在网计算交换机实现。
来看一下SHARP技术实现,在多交换机组成的机群环境下,由聚合管理器(Aggregation Manager)在物理拓扑中构造一个逻辑的SHARP树,由SHARP树中的多个交换机并行分布式处理集合类通信操作。当主机需要进行全局通信,如AllReduce时,所有主机把通信数据提交到各自连接的交换机,第一级交换机收到数据后,会使用内置的引擎对数据进行计算和处理,然后把结果数据提交到SHARP树的上一级交换机,上一级交换机也使用自己的引擎对从若干个交换机收上来结果数据做聚合处理,并继续向SHARP树的上一级递交,到达SHARP树的根交换机后,根交换机做最后计算并把结果回发给所有的主机节点。通过SHARP方式,只需发送一次数据,接收最终结果,没有中间结果,从而可以有效的降低网络通信量,减少网络拥塞,减少跳数,提供更低的延迟,并提升机群系统的可扩展性。
使用SHARP在网计算和不使用的对比数据。
SHARP技术已发展至第四代,即SHARPv4。第一代SHARPv1出现在EDR时代,能够支持256字节的完整硬件卸载。第二代SHARPv2在HDR时代推出,支持更大的message size,如1GB至2GB,以满足AI训练时大量数据通信的需求,这对深度学习和神经网络等AI应用性能提升显著。到了SHARPv3,在交换机中集成了更多的引擎。每个ASIC中集成了数十个SHARP引擎,使得性能比上一代提升了32倍,由于每个ASIC中都有多个引擎,这使得SHARPv3非常适合多租户的公有云场景。在这种场景下,每个租户可以申请到自己独立的SHARP引擎,满足不同租户的数据请求,从而在多租户场景下很好地满足云用户的需求。SHARPv4的详细信息暂时没有看到。
硬件加速的在网计算实现方案
使用ASIC作为加速器:英伟达的IB交换机和NVSwitch都采用这种架构。
使用FPGA作为加速器:NetReduce架构将FPGA接在交换机内部(下面左图),而Panama架构将FPGA连接在主机和交换机之间(下面右图)。
另外,HiNA研究组在ACM国际超级计算会议ICS上提出了Roar架构,在标准路由器中添加一个处理单元(Roar's Unit)作为加速器,需要聚合的数据被路由进处理单元,聚合结果发送回输入单元,再通过输出端口被发送到下一跳,该架构专门为RDMA网络定制。
中国移动的NACA白皮书规定了NACA的技术架构,但没有明确硬件上的技术实现模式。
P4可编程交换机也是其中的一个可能的实现思路,也有个别厂家在做相应的工作,但是P4可编程交换芯片供应问题、计算性能问题、灵活性、实际应用效果等方面还有待检验。
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-03-30
2024-04-26
2024-05-10
2024-04-12
2024-05-28
2024-05-14
2024-04-25
2024-07-18
2024-04-26
2024-05-06
2024-12-22
2024-12-21
2024-12-21
2024-12-21
2024-12-21
2024-12-20
2024-12-20
2024-12-19