首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >MNNVL(Multi-Node NvLink)、NCCL超节点集合通信

MNNVL(Multi-Node NvLink)、NCCL超节点集合通信

作者头像
爱串门的小马驹
发布2025-11-30 15:41:17
发布2025-11-30 15:41:17
500
举报
文章被收录于专栏:RDMARDMA

前言

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。

二、非超节点的传统集合通信

哈哈哈,浅浅回顾一下非超节点的集合通信。集合通信早期没有超节点,集合通信也相对简单点。

2.1 拓扑识别

非超节点的传统集合通信拓扑识别核心流程如图3所示。

1.构建GPU的PCIe树

2.将网卡添加到GPU的PCIe树中

3.如果有NvLink/AccLink连接,将NvLink/AccLink添加到拓扑中。

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

可以看出,没有超节点时,每个服务器只完成服务器内拓扑识别,难以满足超节点集合通信需求。那超节点的拓扑识别是如何做的,见下一章?

2.2 集合通信算法

传统非超节点集合通信,由于节点内NvLink/AccLink的通信延迟带宽性能远高于跨服务器的网卡通信,因此集合通信算法严格区分节点内和节点间通信。

最常见的集合通信算法就是服务器内构建ring环,服务器间构建tree树。

如下图所示,rank就代表GPU,服务器内构建ring环。

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

由于超节点NvLink/AccLink是跨服务器的,还这么搞肯定有问题。

三、超节点集合通信

超节点出现后,集合通信的整个框架都做了相应修改和调整。今天呢,我们初步了解一下其中一部分内容。

3.1 拓扑识别

3.1.1 NvSwitch/AccSwitch交换芯识别

早期集合通信中,由于GPU数量有限,直接GPU间直连即可,没有NvSwitch/AccSwitch(NVS/ACS),不需要识别交换芯片。因此在超节点拓扑识别中所要做的第一步就是将NvSwitch/AccSwitch交换芯识别出来。

如上图代码所示,ACS就代表AccSwitch交换芯,将AccSwitch交换芯识别出来,并增加到集合通信的拓扑图中。

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

3.1.2 跨服务器拓扑识别

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

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

3.2 集合通信算法

针对超节点的集合通信,有一个两个需要注意的点。

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特性等等。记得点个关注、我们下次有时间继续分享。就道是纸短情长啊,哈哈哈纸也不短,毕竟电子纸,就是得早点睡觉明天继续奋斗。

文章出处:https://mp.weixin.qq.com/s/OUmLAvBpK_U_QBtO36IOmw

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、什么是超节点
  • 二、非超节点的传统集合通信
  • 2.1 拓扑识别
  • 2.2 集合通信算法
  • 三、超节点集合通信
  • 3.1 拓扑识别
    • 3.1.1 NvSwitch/AccSwitch交换芯识别
    • 3.1.2 跨服务器拓扑识别
  • 3.2 集合通信算法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档