GPU和TPU差异之联网

网络是GPU和TPU差异最大的领域之一。正如我们所见,TPU之间以二维或三维环面连接,每个TPU仅与其相邻的TPU相连。这意味着在两个TPU之间发送消息必须经过中间所有TPU,这迫使我们只能在网状网络中使用统一的通信模式。虽然这在某些方面不太方便,但也意味着每个TPU的链路数量是恒定的,我们可以扩展到任意规模的TPU"pod"而不会损失带宽。

另一方面,GPU 使用更传统的基于树状结构的层级交换网络。8 个 GPU 组成一组,称为节点(GB200 最多可达 72 个)。这些节点之间通过称为 NVLink 的高带宽互连线以 1 跳的距离连接,然后通过连接到每个 GPU 的网卡,使用低带宽的 InfiniBand (IB) 或以太网连接成更大的单元(称为SU或可扩展单元)。这些 SU 又可以通过更高级别的交换机连接成任意大小的单元。

**图:**典型的 H100 网络示意图。一组 8 个 GPU 通过 NVSwitch(也称为 NVLink 交换机)连接到一个节点或 NVLink 域,这些节点之间通过交换式 InfiniBand 架构相互连接。每个 H100 在 NVLink 域中具有约 450GB/s 的出口带宽,每个节点在 IB 网络中具有 400GB/s 的出口带宽。

在节点层面

GPU 节点是一个小型单元,通常由 8 个 GPU 组成(GB200 最多可达 72 个),通过全带宽、低延迟的 NVLink 互连连接。每个节点包含多个高带宽 NVSwitch,用于在所有本地 GPU 之间交换数据包。实际的节点级拓扑结构随着时间的推移发生了相当大的变化,包括每个节点的交换机数量,但对于 H100,每个节点有 4 个 NVSwitch,GPU 以5 + 4 + 4 + 5链路模式连接到这些交换机,如下图所示:

**图:**从 Pascall (P100) 开始的节点(又称 NVLink)域图。自 Volta (V100) 起,我们使用一组交换机实现了节点内所有设备的互联。H100 节点有 4 个 NVSwitch 连接到所有 8 个 GPU,链路速率为 25GB/s。

对于 Hopper 一代(NVLink 4.0),每个 NVLink 链路都具有 25GB/s 的全双工传输速率。16带宽(B200 为 50GB/s),使18 * 25=450GB/s每个 GPU 都能以全双工带宽连接到网络。大型 NVSwitch 最多可配备 64 个 NVLink 端口,这意味着一个配备 4 个交换机的 8xH100 节点可以处理高达 50GB/s64 * 25e9 * 4=6.4TB/s的带宽。以下概述了这些数字如何随 GPU 代际变化:

Blackwell (B200) 拥有 8 个 GPU 的节点。GB200NVL72 支持更大的 NVLink 域,最多可容纳 72 个 GPU。我们将详细介绍 8 个 GPU 和 72 个 GPU 的系统。

测验 2:GPU 节点

这里还有一些关于网络通信的问答题。我觉得这些题特别适合课后练习,因为它们能让你深入了解实际的通信模式。

问题 1 [H100 节点的总带宽]

在一个包含 8 个 H100 节点和 4 个交换机的节点系统中,每个节点的总带宽是多少?*提示:*同时考虑 NVLink 和 NVSwitch 的带宽。

:我们有 4 台 Gen4 NVSwitch,每台交换机都具有64 * 25e9=1.6TB/s一定的单向带宽。这可以提供4 * 1.6e12=6.4e12交换机级别的带宽。但是,请注意,每台 GPU 只能处理 450GB/s 的单向带宽,这意味着我们最多只能获得 450GB/s 的450e9 * 8 = 3.6TB/s带宽。由于这个值较小,峰值带宽为 3.6TB/s。

问题 2 [二分带宽]

二分带宽定义为网络中任意两个相等分区之间可用的最小带宽。换句话说,如果将网络分成两个相等的部分,这两个部分之间有多少带宽?你能计算一个 8x H100 节点的二分带宽吗?*提示:*二分带宽通常包含双向流量。

:任何偶数分区,每一半都将包含 4 个 GPU,每个 GPU 都可以访问4 * 450GB/s另一半。考虑双向流量,这可以提供8 * 450GB/s跨越分区的字节数,或 3.6TB/s 的二分带宽。这是 NVIDIA 报告的数据,例如此处所示

问题 3 [AllGather 开销]

给定一个 B 字节的数组,在 8xH100 节点上执行一次(吞吐量受限的)AllGather 操作需要多长时间?计算 bf16[D X , F]的值D=4096,其中F=65,536。建议在回答此问题之前阅读 TPU 集体操作 部分。在这里先思考一下,我们接下来会更详细地讨论集体操作。

答:每块GPU可以输出450GB/s的数据,并且每块GPU有B / N 字节(其中 是N=8节点大小)。我们可以想象每个节点将其字节发送给其他所有节点。N− 1节点一个接一个地连接,总共需要 (N - 1) 圈,每一圈都......T 通讯= ( B / ( N ∗ W 单向) ),或者T 通讯= ( N − 1 ) ∗ B / ( N ∗ W 单向)这大约是B / ( N ∗ W 大学)或者B / 3.6e12二分带宽。

对于给定的数组,我们有B=4096 * 65536 * 2=512MB,因此总时间为536e6 * (8 - 1) / 3.6e12 = 1.04ms。这可能受限于延迟,因此在实践中可能需要更长时间(在实践中大约需要 1.5 毫秒)。

超越节点级别

在节点级别之外,GPU 网络的拓扑结构标准化程度较低。NVIDIA 发布了参考架构 DGX SuperPod,该架构使用 InfiniBand 连接比单个节点更多的 GPU,但客户和数据中心提供商可以根据自身需求进行定制。

以下是一个参考 1024 GPU H100 系统的示意图,其中底行的每个盒子都是一个 8xH100 节点,包含 8 个 GPU、8 个 400Gbps CX7 网卡(每个 GPU 一个)和 4 个 NVSwitch。

**图:**参考级 1024 H100 DGX SuperPod 的示意图,包含 128 个节点(有时为 127 个),每个节点配备 8 个 H100 GPU,并连接到 InfiniBand 横向扩展网络。32 个节点(256 个 GPU)组成的一组称为"可扩展单元"(SU)。叶脊式 InfiniBand 交换机提供足够的带宽,以实现节点间的全二分带宽。

可扩展单元:每组 32 个节点称为一个"可扩展单元"(或 SU),它们隶属于一组 8 台叶级 InfiniBand 交换机。该 SU 包含 256 个 GPU,每个节点配备 4 台 NVSwitch,并由 8 台 InfiniBand 叶级交换机组成。图中所示的所有线缆均为 InfiniBand NDR(50Gb/s 全双工),并配备 64 端口 NDR IB 交换机(每个端口也支持 50Gb/s)。请注意,IB 交换机的带宽是 NVSwitch 的两倍(64 个端口,链路带宽为 400 Gbps)。

SuperPod:整个 SuperPod 将 4 个 SU 与 16 个顶层"脊"IB 交换机连接起来,从而形成 1024 个 GPU,其中包含 512 个节点级 NVSwitch、32 个叶 IB 交换机和 16 个脊 IB 交换机,总计 512 + 32 + 16 = 560 个交换机。叶交换机以 32 个节点为一组连接到节点,因此每组 256 个 GPU 有 8 个叶交换机。所有叶交换机都连接到所有脊交换机。

我们有多少带宽? InfiniBand 网络(称为"横向扩展网络")的整体拓扑结构是一个胖树,其电缆和交换机保证了节点级以上的完全二分带宽(此处为 400GB/s)。这意味着如果我们把节点分成两半,每个节点都可以同时以 400GB/s 的速率向另一分区中的一个节点输出数据。更重要的是,这意味着在横向扩展网络中,AllReduce 的带宽应该大致恒定!虽然实际实现可能并非如此,但您可以想象在横向扩展网络中对任意数量的节点进行环形归约,因为您可以构建一个包含所有节点的环。

相比之下,TPU v5p 的单链路出口带宽约为 90GB/s,或沿 3D 环面所有轴向的出口带宽约为 540GB/s。虽然这不是点对点通信,因此只能用于受限的、统一的通信模式,但它仍然提供了更高的 TPU 间带宽,可以扩展到任意规模的拓扑结构(至少最多可达 8960 个 TPU)。

理论上,通过添加额外的交换机或间接层,可以将 GPU 交换结构扩展到任意大小,但代价是会增加延迟和昂贵的网络交换机。

GB200 NVL72: NVIDIA 近期开始生产新型 GB200 NVL72 GPU 集群,该集群将 72 个 GPU 集成在一个 NVLink 域中,GPU 间带宽高达 900GB/s。这些域可以链接成更大的 SuperPod,从而获得更高(9 倍)的 IB 胖树带宽。下图展示了该拓扑结构:

**图:**示意图展示了一个包含 576 个 GPU 的 GB200 DGX SuperPod。底层每个机架包含 72 个 GB200 GPU。

计算单个节点的出口带宽(上图中的橙色线),我们得到的4 * 18 * 400 / 8 = 3.6TB/s到叶节点的带宽是 H100 的 9 倍(正如该节点包含的 GPU 数量是 H100 的 9 倍一样)。这意味着关键节点的出口带宽要高得多,因此 跨节点的总带宽实际上可能低于节点内部的带宽。

测验 3:超越节点层级

问题 1 [胖树拓扑]

使用上图所示的 DGX H100 图,计算节点级 1024 个 GPU pod 的二分带宽。证明每条链路的带宽选择都确保了二分带宽的完整性。提示:务必同时计算链路带宽和交换机带宽。

:我们逐个组件进行分析:

  • 首先,每个节点都通过 8 条 400Gbps NDR IB 线缆连接到叶交换机,从而为每个节点提供8 * 400 / 8 = 400 GB/s到叶交换机的带宽。我们有 8 台叶交换机,每台的带宽为 3.2TB/s(64 条 400Gbps 链路),但我们只能使用 64 个端口中的 32 个端口从 SU 接入数据,因此这32 * 400 / 8 = 12.8TB/s32 个节点的带宽正好是 400GB/s。

  • 然后,在脊交换机层,我们使用8 * 16 * 2400Gbps NDR IB 线缆将每个 SU 连接到脊交换机,从而为每个 SU 提供8 * 16 * 2 * 400 / 8 = 12.8 TB/s到叶交换机的带宽。同样,每个节点的带宽为 400GB/s。我们有 16 台脊交换机,每台交换机的带宽为 3.2TB/s,因此16 * 3.2 = 51.2 TB/s,在 128 个节点上,总带宽同样为 400GB/s。

因此,如果我们以任何方式对节点进行二分,每个GPU将获得400GB/s的带宽。每个组件都拥有足够的带宽来确保树的完整性。

问题 2 [扩展到更大的 DGX pod]

假设我们想用 2048 个 GPU 而不是 1024 个进行训练。修改上述 DGX 拓扑结构以处理这种情况的最简单/最佳方法是什么?如果是 4096 个 GPU 呢?提示:没有唯一正确答案,但尽量降低成本,同时考虑链路容量。

:一种方案是保持SU架构不变(8台交换机下32个节点),然后增加SU的数量和顶层交换机的数量。这样我们需要两倍数量的脊交换机,也就是8个SU,每条SU配备32台脊交换机,就能满足带宽需求。

这样做的一个问题是,每个叶交换机只有 64 个端口,而上图中我们已经用完了所有端口。但我们可以简单地在每个脊交换机上使用一根 400 Gbps NDR 线缆,而不是两根,这样既能保持总带宽不变,又能节省一些端口。

对于 4096 个 GPU 来说,端口数量实际上已经不够用了,所以我们需要增加一层间接层,也就是增加一个层级结构。NVIDIA 将这些称为"核心交换机",并使用 128 个脊交换机和 64 个核心交换机构建了一个 4096 GPU 集群。你可以自己计算一下,这足以提供足够的带宽。

相关推荐
想用offer打牌3 小时前
一站式了解长轮询,SSE和WebSocket
java·网络·后端·websocket·网络协议·系统架构
网安Ruler3 小时前
崭新出厂,自研CipherForge小工具,攻破 D-Link M30 固件加密
前端·网络·python
小熊哥^--^3 小时前
谈谈我对HTTP的理解
网络·网络协议·http
小熊哥^--^3 小时前
HTTP一些问题的解答(接上篇)
网络·网络协议·http
Bruce_Liuxiaowei3 小时前
Windows系统中msg命令的完整使用方法及相关示例
运维·网络·windows·网络安全
周杰伦_Jay3 小时前
【计算机网络】TCP/IP模型核心层解析(网络/传输/应用层)
网络·tcp/ip·计算机网络
white-persist3 小时前
网络空间安全核心领域技术架构深度解析
c语言·开发语言·网络·python·安全·网络安全·架构
专家大圣3 小时前
摆脱局域网!Logseq 搭配cpolar公网访问让笔记管理更自由
linux·网络·docker·内网穿透·cpolar
极地星光4 小时前
Asio应用(高级):构建高性能、安全、跨平台的网络系统
网络