
前言
NCCL、ACCL等集合通信库发展的早期,并没有超节点(SuperNode/SuperPod)的概念,这些集合通信库是如何支撑超节点集合通信的?
AllReduce、AlltoAll等集合通信,是现在大模型训练/推理必不可少的底层支撑。并且随着大模型参数量不断上升,对集合通信性能的要求越来越高,超节点(SuperNode/SuperPod)应运而生。
哈哈哈,本文分享:
1、什么是超节点
2、非超节点的传统集合通信
3、超节点集合通信
哈哈哈,针对本文的部分视频说明:
MNNVL 超节点集合通信初识、NCCL、SuperPod、SuperNode,scale-up,Multi-Node NvLink、啥是超节点_哔哩哔哩_bilibili
随着 AIGC 等大模型参数规模的不断增长,对 GPU 集群的规模需求也在不断扩大,从千卡级到万卡级甚至更高。传统的单台服务器受限于空间、功耗和散热等因素,能塞入的 GPU 数量有限,且基于 PCIe 协议的数据传输速率慢、时延高,无法满足需求。为了解决这些问题,超节点(SuperNode/SuperPod)被提出。超节点是通过超大带宽低延迟互联的多 GPU系统,由多台服务器和网络设备共同组成,这些设备处于同一个超带宽域。
在集合通信超节点编程中,一个超节点就被叫做一个NvLink域或AccLink域。也就是大家所熟知的MNNVL(Multi-Node NvLink)多节点NvLink或MNACL(Multi-Node AccLink)多节点AccLink。
来个形象点的解释就是:能够通过Nvlink/AccLink进行跨服务器(跨节点)超高带宽超低延迟通信的众多GPU,就构成了一个超节点。
哈哈哈,再来两个图直观的感受下。

图1是一个超节点么?显然不是!服务器A是节点,服务器B是节点,但是服务器A和B之间是通过延迟较高网卡相连,不是通过高带宽低延迟的NvLink/AccLink相连,不构成一个超节点。
下面的图2是一个超节点么?哈哈哈,是的!服务器节点A和服务器节点B的众多GPU通过NvLink/AccLink相连,构成了NvLink/AccLink域,是多节点的NvLink/AccLink。

哈哈哈,浅浅回顾一下非超节点的集合通信。集合通信早期没有超节点,集合通信也相对简单点。
非超节点的传统集合通信拓扑识别核心流程如图3所示。
1.构建GPU的PCIe树
2.将网卡添加到GPU的PCIe树中
3.如果有NvLink/AccLink连接,将NvLink/AccLink添加到拓扑中。

没有超节点时,每个服务器节点只需完成自生的拓扑识别,如图4所示,给出了ACCL识别出来的一台服务器拓扑文件,可以看到CPU、GPU、NIC、直连AccLink、PCIe等信息。

可以看出,没有超节点时,每个服务器只完成服务器内拓扑识别,难以满足超节点集合通信需求。那超节点的拓扑识别是如何做的,见下一章?
传统非超节点集合通信,由于节点内NvLink/AccLink的通信延迟带宽性能远高于跨服务器的网卡通信,因此集合通信算法严格区分节点内和节点间通信。
最常见的集合通信算法就是服务器内构建ring环,服务器间构建tree树。
如下图所示,rank就代表GPU,服务器内构建ring环。

node就代表服务器节点,服务器间构建tree树。

由于超节点NvLink/AccLink是跨服务器的,还这么搞肯定有问题。
超节点出现后,集合通信的整个框架都做了相应修改和调整。今天呢,我们初步了解一下其中一部分内容。
早期集合通信中,由于GPU数量有限,直接GPU间直连即可,没有NvSwitch/AccSwitch(NVS/ACS),不需要识别交换芯片。因此在超节点拓扑识别中所要做的第一步就是将NvSwitch/AccSwitch交换芯识别出来。

如上图代码所示,ACS就代表AccSwitch交换芯,将AccSwitch交换芯识别出来,并增加到集合通信的拓扑图中。
并且只要在system->nodes[ACS].count == 0时才会创建ACS节点,本质如图5所示,不管实际有多少个AccSwitch交换芯拓扑上将其合并为一个,标识当前服务器里面有AccSwitch。当然探微芯联ACCL集合通信库也支持不合并AccSwitch交换芯的拓扑架构,来进行通信优化,这又是另外一套了,挖个坑,有时间再介绍,哈哈哈,此次我们还是偏NCCL。

超节点,当然不能只在服务器节点内搞一搞,必须得跨服务器。如下面的图所示,建立集群和AccLink域的超节点标识clusterUuid、CliqueId。


标识通信域之后,进行跨服务器拓扑融合,得到如图6的AccLink域的超节点拓扑。自此,ACCL构建了自己的超节点拓扑,一个AccLink通信域

针对超节点的集合通信,有一个两个需要注意的点。
1.有跨服务器的AccLink,当然不用网卡进行通信。
2.多级AccSwitch的影响。
针对第一条,如下图所示,集合通信时,检测两个服务器间能否进行AccLink通信,如果能进行AccLink通信,用AccLink通信,否则才使用网卡进行通信。

针对第二条,多级AccSwitch的影响,我们将下面的图7抽象一下。

抽象一下,得到下面的图8,可以明显看出GPU1和GPU2只通过一级ACS(AccSwitch)就能进行通信,而GPU1和和GPU9需要进行两级ACS(AccSwitch)进行通信,在集合通信中,对能够一级ACS(AccSwitch)进行通信的GPU进行标记,优先一级ACS,优化通信过程。

当然ACCL/NCCL超节点还有在网计算、Symmetric Memory对称内存、单端put/fetch操作,AccSwitch/NvSwitch特性等等。记得点个关注、我们下次有时间继续分享。就道是纸短情长啊,哈哈哈纸也不短,毕竟电子纸,就是得早点睡觉明天继续奋斗。

本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。