阿里 HPN:针对大规模 LLM 训练的万卡集群

发布于 2024-6-27 15:42
浏览
0收藏

一、背景

之前的文章中我们具体介绍了万卡 GPU 集群中的网络拓扑以及在万卡 GPU 集群中进行大规模 LLM 训练面对的挑战和解决方案;也进一步介绍了阿里云的集合通信调度框架 C4 和 C4 底层的阿里云新一代智算集群网络架构 HPN 7.0。不过上述 HPN 7.0 的相关介绍都是基于阿里官网或者之前的公开分享,最近阿里正式公布了 HPN 相应的 Paper,与我们之前了解到的稍有不同,此处进行相应补充。有关双上联、双平面介绍这里不再赘述。

对应的论文:​​https://ennanzhai.github.io/pub/sigcomm24-hpn.pdf​

上面提到的几个介绍可以参考:

二、拓扑

如下图所示为我们之前介绍的拓扑方式(图片来自 Revolutionizing Data Center Networks: Alibaba’s SONiC Journey),是一个完全无收敛的方案。对于下图的拓扑中:

  • 每个 Segment 有 128 个节点,共 1024 GPU(单层千卡)。
  • 每个 Pod 有 8 个 Segment,也就是每个 Pod 有 8192 GPU。
  • 总共有 128 个 Pod,也就是可以支持 1,048,576 个 GPU(三层 100 万)。​

阿里 HPN:针对大规模 LLM 训练的万卡集群-AI.x社区

如下图 Figure 7 所示,在 HPN Paper 中的拓扑方式与我们之前看到的稍有不同(双上联、双平面等思路都是完全一样的),我们这里简单进行介绍:

  • 下面的拓扑中包含了前向网络(Frontend Network)和后向网络(Backend Network):

后向网络:有收敛,使用每个节点 9 个 NIC 中的 NIC1-NIC9 这 8 个互联,主要用于大规模分布式训练,并且一个 GPU 连接一个 NIC。

前向网络:无收敛,使用每个节点 9 个 NIC 中的 NIC0 互联。为了支持更多的场景,比如训练/推理混部,模型传输,数据加载等场景。

  • 后向网络依然是 3 层:
  • Segment:依然采用双上联方式,一个 NIC 上有 2 个 200Gbps 的 Port(PS:没有采用之前介绍的 2 个 200 Gbps NIC 的方式),会连接两个不同的 ToR 交换机。

一个 Segment 里面依然有 16 个 ToR 交换机,每个交换机 128 个 400Gbps Port,但是有 60 连接 Spine 交换机,68 个连接节点的 NIC。

68 个 400Gbps Port 可以对应 136 个 200Gbps NIC Port,也就是一个 Segment 里面 136 个节点,共 138*8=1104 个 GPU。

实际上 136 个节点中有 8 个是备份,以便节点故障(比如 GPU、网卡、硬盘、CPU 等)时可以快速替换。实际使用 128 个节点,共 1024 GPU,对应的网络收敛比为 (1024*400)/(60*400*16)=1.067:1。

Pod:一个 Pod 中的 Segment 从 8 个变成 15 个,所以最多能支持 15*1024=15K GPU。

  • 在 Spine(Agg)交换机上采用 15:1 的收敛比,因此可以有更多的下行 Port 连接 Leaf 交换机。
  • 具体来说,每个 Spine 交换机有 120 个 Port 连接 Leaf 交换机,也就可以连接 120/8=15 个 Segment(每个 Segment 里面同一平面的 8 个 Leaf 交换机连接到同一个 Spine 交换机)。
  • Cluster:一个 Cluster 可以包含多个 Pod,通过 Core 交换机连接。
  • Spine(Agg) 交换机有 8 个 Port 连接 Core 交换机。这个是为了支持更大规模的 GPU,比如 8 个 Pod,则可以支持 120K GPU。
  • 在大规模模型训练时,可以将 PP(Pipeline Parallelism)中的不同切片放在不同的 Pod,这样跨 Pod 的通信量比较小,也就不容易出现瓶颈。​

阿里 HPN:针对大规模 LLM 训练的万卡集群-AI.x社区

三、附录

3.1 单 Segment 千卡

如下图 Figure 6 所示,生产环境中 96.3% 的训练任务需要的 GPU 数都不超过 1024 GPU,也就是都可以放在 1 个 Segment 里,这样通信是非常高效的,不同 GPU 通信最多只用经过 1 跳即可:

阿里 HPN:针对大规模 LLM 训练的万卡集群-AI.x社区

3.2 多 Pod 互联

HPN 中在 Core 交换机上采用 15:1 的收敛比,也就是有额外 87.5% 的 Port 可以用于同一个 Pod 中的 Segment。所以同一个 Pod 的 Segment 从 8 个变成 15 个,GPU 数从 8192 增加到 15360,可以支持更多的任务在同一 Pod 内执行。同一个 Pod 内的 GPU 通信最多只用通过 3 跳即可,而如果是 3 Tier 网络,则最多可能需要 5 跳。

那么为什么没有直接搞成 2 Tier 网络呢?主要是还需考虑到技术的演进,模型在不断扩大,训练的数据也越来越多,相应需要的 GPU 也就越来越多,这就很难说是否未来的某一天需要超过 15K GPU 来训练大模型。与此同时,大模型训练通常会使用 DP(Data Parallelism)、TP(Tensor Parallelism)和 PP(Pipeline Parallelism)技术,而 PP 相对 DP 和 TP 的通信量要小得多,如下图 Table 3 所示(GPT-175B,TP=8,PP=8,DP=512),因此就可以考虑为其提供较低的通信带宽,比如跨 Pod。

阿里 HPN:针对大规模 LLM 训练的万卡集群-AI.x社区

3.3 大规模预训练对比

如下图 Figure 20 所示为作者原来使用的 DCN+ 集群拓扑,采用无收敛设计。一个 Segment 中只有 16 个节点,128 个 GPU,一个 Pod 只有 512 个 GPU:

阿里 HPN:针对大规模 LLM 训练的万卡集群-AI.x社区

作者用一个相同的 LLM 预训练任务进行了对比,该任务需要 2300+ GPU,共 288+ 个节点,训练几个月。在 DCN+ 中需要至少 5 个 Pod,19 个 Segment,而在 HPN 中只需要 3 个 Segment。如下图 Figure 15所示:

  • 15a:端到端训练吞吐提升 14.9%。
  • 15b:跨 Segment 流量平均降低 37%。
  • 15c:Agg 交换机下行队列长度大幅降低。


阿里 HPN:针对大规模 LLM 训练的万卡集群-AI.x社区

四、参考链接

  1. ​https://ennanzhai.github.io/pub/sigcomm24-hpn.pdf​
  2. ​https://sonicfoundation.dev/revolutionizing-data-center-networks-alibabas-sonic-journey/​

本文转载自 AI闲谈​,作者: AI闲谈

收藏
回复
举报
回复
相关推荐