AI时代的GPU集群网络算力分析

news2024/11/17 21:19:59

da9ff749df22a797dda6f3bfb134a66a.jpeg

 

浅谈GPU集群网络、集群规模和集群算力

 

引言
在生成式AI(GenAI)和大模型时代,不仅需要关注单个GPU卡的算力,更要关注GPU集群的总有效算力。单个GPU卡的有效算力可以通过该卡的峰值算力来测算,例如,对于Nvidia A100,峰值FP16/BF16稠密算力是312 TFLOPS,单卡有效算力约为~298 TFLOPS [1, 2]。
本篇将聊聊GPU集群网络配置和GPU集群规模以及总有效算力,重点讨论算力网络平面。因为存储和管理网络平面相对比较简单,本文就不赘述了。
407dba0d8b487ef0085bb46c002eae0d.jpegGPU集群网络架构示例(两层计算网络)[3]

GPU服务器网卡配置
GPU集群的规模和总有效算力,很大程度上取决于GPU集群网络配置和使用的交换机设备。对于每一款Nvidia GPU服务器,Nvidia都有对应的推荐GPU集群网络配置,例如,对于DGX A100服务器,推荐的服务器之间网络连接是 200 Gbps/卡(即每张A100卡都对应200 Gbps网络连接与其他服务器中的A100卡通信),单台DGX A100服务器配置8张计算网络卡(如InfiniBand 200 Gbps)[1, 2]。
34721edcd9efd8ea420e9b2e5c0f09b6.jpegDGX A100 System, Server Block Diagram [2]
那么GPU服务器之间的计算网络带宽是依据什么来确定的呢?
除了成本因素之外,GPU服务器之间的计算网络带宽是由GPU卡所支持的PCIe带宽决定的,这是因为GPU服务器配置的计算网络的网卡是通过PCIe Switch与GPU卡进行连接的(GPU <--> PCIe Switch <--> NIC),那么PCIe的带宽就限制了计算网络的带宽。
举例而言,对于Nvidia DGX A100服务器,因为单张A100卡支持的是PCIe Gen4,双向带宽是64 GB/s,单向带宽是 32 GB/s,即 256 Gbps。所以,为单张A100卡配置 200 Gbps 的网卡就足够了。

所以,单看计算网络,Nvidia DGX A100服务器配置的是8张 Mellanox ConnectX-6 InfiniBand 网卡(注:也可以配置 Mellanox ConnectX-7,因为ConnectX-7也支持 200 Gbps)。如果是给A100卡配置 400 Gbps 的网卡,因为受到PCIe Gen4带宽限制,400 Gbps 的网卡作用是发挥不出来的(那么就浪费了很多网卡带宽)。
674f1a26fef74789c61ba6e1598329bc.jpegNvidia DGX A100 system topology [4]
对于Nvidia DGX H100服务器,因为单张H100卡支持的是PCIe Gen5,双向带宽是128 GB/s,单向带宽是 64 GB/s,即 512 Gbps。所以,为单张H100卡配置 400 Gbps 的计算网卡是Nvidia推荐的标准配置&nbsp;。

单看计算网络,Nvidia DGX H100服务器配置的是8张 Mellanox ConnectX-7 InfiniBand 网卡,单个H100卡拥有 400 Gbps 对外网络连接 [5]。
4c521bb38bed997929d2e1ce7a26b962.jpegDGX H100 Configuration [5, 6]
需要说明的是,对于A800和H800服务器的计算网络配置,国内使用A800和H800服务器一般不是采用Nvidia DGX推荐的标准配置。例如,对于A800服务器,计算网卡配置常见的有两种方式:第一种是 8 x 200 GbE,即每张A800卡有单独的200 GbE网卡配置(8张A800卡一共有 ~1.6 Tbps RoCEv2计算网络连接[7]);

第二种是 4 x 200 GbE,即每两张A800卡共享一个200 GbE网卡,单卡最高是200 GbE网络,平均每张A800卡有对外100GbE的连接&nbsp;[7]。第二种方式类似Nvidia DGX V100的设计 [8]。考虑到可以先在A800服务器内进行通信聚合,然后再与其他服务器通信,所以这两种计算网卡配置方式对于整个集群效率的影响基本一致。
H800支持PCIe Gen5,对于H800服务器,常见的计算网卡配置方式是 8 x 400GbE,即每张H800卡有单独的400 GbE网卡配置,每张H800卡都有对外400 GbE的计算网络连接,8张H800卡一共有 ~3.2 Tbps RoCEv2 计算网络连接 [7]。
这里还想谈一下华为昇腾910B NPU卡。

昇腾910B支持PCIe Gen5 [15],也就是说理论上昇腾910B单卡可以配置400 GbE的对外网络连接。例如,装配有16卡昇腾910B的服务器一般可以选择配置 8 x 400 GbE网卡,也就是单卡最高是400 GbE网络,平均每卡是200 GbE网络。

华为昇腾910B采用的是NPU直出200 GbE的设计,所以每个NPU直接连接的是200 GbE的网络,那么装配有16卡昇腾910B的服务器一般配置 16 x 200 GbE网卡,装配有8卡昇腾910B的服务器一般配置 8 x 200 GbE网卡。
Nvidia使用NVLink和NVSwitch实现了单个服务器内多个GPU之间的高速互联,而使用多个服务器组建集群时,PCIe带宽仍然是主要性能瓶颈(集群网络瓶颈),这是因为当前网卡和GPU卡之间的连接主要还是通过PCIe Switch来连接。

随着未来PCIe Gen6(2022年标准发布)普及应用,甚至PCIe Gen7(预计2025年标准发布)普及应用,GPU集群的整体性能又会上一个新台阶。还有2024年将要发布的Nvidia H20也是支持PCIe Gen5。

GPU集群网络和集群规模
上面讨论了单个GPU服务器的网卡配置,接下来讨论GPU集群网络架构(GPU cluster fabrics)和集群规模。实践中最常用的GPU集群网络拓扑是胖树(Fat-Tree)无阻塞网络架构(无收敛设计),这是因为Fat-Tree架构易于拓展、路由简单、方便管理和运维、鲁棒性好,且成本相对较低。

实践中,一般规模较小的GPU集群计算网络采用两层架构(Leaf-Spine),而规模较大的GPU集群计算网络采用三层架构(Leaf-Spine-Core)。这里 Leaf对应接入层(Access),Spine对应汇聚层(Aggregation),Core对应核心层。
468fdfe52fa7d8ed7cc84f573cd0b54d.jpeg三层Fat-Tree计算网络示例 [9]
假设一个GPU集群的计算网络里采用相同的交换机,每台交换机端口数为P,使用两层Fat-Tree无阻塞计算网络(Leaf-Spine),一个GPU集群里GPU卡的数量最多为 P*P/2 [9, 14]。
在两层Fat-Tree无阻塞计算网络里(Leaf-Spine),第一层中每一台Leaf交换机用P/2个端口来连接GPU卡,另外P/2个端口向上连接Spine交换机(无阻塞网络要求向下和向上连接数量相同)。

第二层中每台Spine交换机也有P个端口,可以向下最多连接P台Leaf交换机,所以在两层Fat-Tree无阻塞计算网络里最多有P台Leaf交换机,所以总的GPU卡的数量最多为P*P/2。因为有P个Leaf交换机,每台Leaf交换机有P/2个端口向上连接Spine交换机,所以有P/2个Spine交换机。
例如,对于Nvidia A100集群,假设使用40端口的交换机(如Nvidia Mellanox QM8700),在使用两层Fat-Tree计算网络情况下,一个A100集群最大可以有800个A100卡(40*40/2 = 800)。
b82c264989c5d1b0c4a39240a3b53397.jpeg两层Fat-Tree计算网络示例 [10]
值得注意的是,如果一台GPU服务器内已经有卡间高速互联了(如NVLink和NVSwitch),则同一台服务器中的GPU卡不应该连接到相同的Leaf交换机上;不同服务器中的编号相同的GPU卡(例如,A服务器中的3号卡 与 B服务器中的3号卡)应该尽量连接到同一个Leaf交换机上,以便提高分布式计算效率(例如,提高跨服务器AllReduce操作的效率)。
需要特别说明的是,对于GPU服务器内没有卡间高速互联解决方案的(例如,L20服务器、L40S服务器),需要尽量将一台服务器内的GPU卡连接到同一台Leaf交换机上 [4],以便避开跨NUMA通信。
我们从上面的分析可以看到,假设使用128端口的交换机,两层Fat-Tree无阻塞计算网络能够接入的最大GPU数量仅为8192(128*128/2 = 8192)。如果要构建更大规模的GPU集群,我们需要从两层计算网络扩展到三层计算网络。
对于规模较大的GPU集群,一般需要采用三层计算网络架构。

假设一个GPU集群计算网络里采用相同的交换机,交换机端口数为P,对于三层Fat-Tree无阻塞计算网络(Leaf-Spine-Core),一个GPU集群里GPU卡的数量最多为 P*P*P/4 [9, 14]。
从两层Fat-Tree网络向三层Fat-Tree网络扩展,我们可以把两层Fat-Tree网络看成一个单元(即一个两层Fat-Tree子网络)。因为每台Spine交换机有一半端口向下连接Leaf交换机(每台Spine交换机最多只能连接P/2个Leaf交换机),另一半端口向上连接Core交换机,所以每个两层Fat-Tree子网络里只能有P/2个Leaf交换机。

在无阻塞网络里,各层的连接数量都要保持相同,所以Spine交换机和Leaf交换机的数量相同。
因为Core交换机也有P个端口,可以连接P个这样的两层Fat-Tree子网络,所以三层Fat-Tree无阻塞计算网络(Leaf-Spine-Core)中一共有P*P/2个Leaf交换机和P*P/2个Spine交换机,所以GPU卡的总数量最多为(P/2)*(P*P/2),即 P*P*P/4。Spine交换机向上连接Core交换机的连接数为P*P*P/4,所以一共有P*P/4个Core交换机。
162c21dc9ca0e7a283f461e198ab11b5.jpegH800 GPU集群网络拓扑举例 [11]
从上面的分析我们看到,GPU集群的规模是由计算网络的架构和交换机的端口数决定的(当然,GPU集群规模也受限于机柜、供电、制冷和机房等硬件因素)。我们在下表中举例说明集群规模与交换机端口数的关系,以三层Fat-Tree无阻塞网络为例。
如果一个服务器内有M个GPU共享一个网卡,则GPU总数量要乘以M。例如,如果一个服务器内的两个GPU卡共享一个网卡,例如,装有8卡的A800服务器配置的是 4 x 200 GbE网卡方案,那么GPU卡的总数量还要乘以2(参考Nvidia DGX V100 [8])。
606e6d9e1f2499f1bfdc883c343dd3f4.jpeg
我们从上面的表格可以看到,基于三层Fat-Tree无阻塞网络构建的GPU集群,其规模能够满足大部分大模型训练和分布式计算的需求了,所以就不再需要考虑四层或者更复杂的网络拓扑了。
在上面的分析中,我们假设了整个GPU集群计算网络都是使用相同的交换机,如果Leaf、Spine、Core分别使用不同的交换机(甚至某一层都可能使用不同的网络交换机),那么对于GPU集群网络和集群规模的分析就变得比较复杂了。

GPU集群算力
一个GPU集群的有效算力可以用下面公式表示:Q = C*N*u。其中,Q表示集群总有效算力;C表示集群中单个GPU卡的峰值算力;N表示集群中GPU卡的数量;u表示集群中GPU卡的算力利用率。这里,C是指一个计算任务使用N个GPU卡所能获得的总有效算力。如果使用GPU集群进行大模型训练,那么算力利用率u就是我们常说的MFU (Model FLOPS Utilization)。
关于算力利用率u,我们要进一步区分算力利用率与线性加速比k。即便是我们在使用单张GPU进行计算,也有算力利用率的问题(相应的,也有显存利用率的问题,Model Bandwidth Utilization (MBU)[12]),例如,单卡算力利用率 u = 75%。如果一个计算任务里使用了N个GPU卡,那么算力利用率u一般会随着GPU数量N的增加而变小;总有效算力C会随着N的增加而增加,直到饱和(即N增加的边际效用递减)。一个GPU集群的总有效算力C随着N增加的变化速度就是线性加速比k。
74834ddc79b4645b84a58827df995636.jpegGPU集群总有效算力随着GPU卡数量的变化情况示例 [11]
举例而言,Q1 = C*N1*u1,Q2 = C*N2*u2,那么 k = (Q2/N2) / (Q1/N1) = u2/u1,这里假设 N2 >= N1(所以u2 <= u1),且 Q2 >= Q1。
假设理想情况下,单卡算力利用率 u2 = u1,即线性加速比k为100%,那么随着N的增加,集群总有效算力线性增加。这里线性加速比是说集群总有效算力随着GPU卡数量增加而变化的情况,假设k为100%,那就是完美的线性增长。虽然假设线性加速比k为100%,但是单卡的有效利用率可能会比较低,例如,u2 = u1 = 50%。所以,算力利用率和线性加速比是从两个不同的维度来描述GPU集群性能。
如果假设 u1 = 45.29%(@N1 = 3584),u2 = 42.19%(@N2 = 10752),那么线性加速比就是k = 93% [13]。
实践中,GPU集群的线性加速比受到很多因素影响,包括GPU卡的峰值算力、显存容量、显存带宽、卡间互联方式、服务器间的网络带宽、网络架构、网络交换机、软件和算法等等。在比较好的情况下,一般可以做到线性加速比在90%以上。对于大规模GPU集群,GPU算力利用率一般在50%左右。

57561d6a8aa9d62a230286eaba5df8ba.jpeg

-对此,您有什么看法见解?-

-欢迎在评论区留言探讨和分享。-

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1619684.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【01-机器学习入门:理解Scikit-learn与Python的关系】

文章目录 前言Python与机器学习Scikit-learn简介Scikit-learn与Python的关系使用Scikit-learn进行机器学习结语前言 在当今的数据科学和人工智能领域,机器学习已经成为了一个不可或缺的组成部分。而对于那些刚刚踏入这一领域的新手来说,理解机器学习的基本概念和找到合适的工…

UDS报文传输的四种帧

ISO14229-1规定了26个诊断服务细节&#xff0c;也就是UDS诊断报文的细节。它只规定了各个服务每个字节的含义&#xff0c;它不关心底层到底是怎么传输的。 ISO15765-2规定了基于CAN总线进行UDS报文传输的细节&#xff08;包括四种帧&#xff09;。是在CAN总线传输的情况下&…

Vitis HLS 学习笔记--对于启动时间间隔(II)的理解

目录 1. II的重要性 2. 案例分析 3. 总结 1. II的重要性 在Vitis HLS&#xff08;High-Level Synthesis&#xff09;中&#xff0c;启动时间间隔&#xff08;II&#xff0c;Iteration Interval&#xff09;是一个非常关键的概念&#xff0c;对于实现高性能的硬件加速器设计…

SpanBert学习

SpanBERT: Improving Pre-training by Representing and Predicting Spans 核心点 提出了更好的 Span Mask 方案&#xff0c;也再次展示了随机遮盖连续一段字要比随机遮盖掉分散字好&#xff1b;通过加入 Span Boundary Objective (SBO) 训练目标&#xff0c;增强了 BERT 的性…

蓄能勃发,酷开科技携酷开系统“软硬结合”提升大屏实力

智慧大屏以全新媒体形态之姿在过去几年快速增长&#xff0c;截至去年上半年&#xff0c;国内联网电视总量覆盖达5.26亿&#xff0c;其中智能电视终端活跃量达3.22亿&#xff0c;在PC、Mobile流量增长已显疲态的背景下&#xff0c;大屏的高速发展意味着一个新的赛道的崛起&#…

程序员英语之Spring篇

spring.io/quickstart 本期课程讲解Spring官网的快速上手页面 官网地址 https://spring.io/quickstart Spring Quickstart Guide Spring 快速开始指南 Guide 指南 What you’ll build 接下来你将要构建的是什么&#xff1f; build 构建 You will build a classic “H…

Sectigo证书申请流程及价格介绍

Sectigo 是一家全球知名的数字证书颁发机构&#xff08;Certificate Authority, CA&#xff09;&#xff0c;自1998年起就开始提供 SSL 证书服务&#xff0c;是全球最早的 CA 机构之一。 一 Sectigo证书申请流程 1 确定证书类型 根据自身的需求确定证书的类型&#xff0c;一…

from_pretrained明明以及下载好模型,却突然不能加载了报错

本人报错&#xff1a;OSError: Error no file named model_index.json found in directory /home/xxx/我的python学习/textToImage/sdxl-turbo. 原因&#xff1a;路径错误导致无法加载模型的配置文件 pipe AutoPipelineForText2Image.from_pretrained("stabilityai/sdx…

Gopher的Rust第一课:Rust的那些事儿

要说这两年后端编程语言谁最火&#xff0c;Rust[1]说自己第二&#xff0c;没人敢说第一。Rust连续8年霸榜stackoverflow最受推崇的编程语言[2]&#xff0c;甚至被推特之父Jack Dorsey称为“完美的编程语言”&#xff1a; 注&#xff1a;最火&#xff1a;仅代表人气最旺&#xf…

算法刷题day46

目录 引言一、树的重心二、毕业旅行问题三、高精度乘法 引言 今天复习了一下高精度的所有模板&#xff0c;包括加法、减法、乘法、除法&#xff0c;因为自己当时在蓝桥杯的时候没有看出来那个题使用高精度&#xff0c;因为对于一个数的大小和一个数的长度&#xff0c;自己有时…

【FX110网】股市、汇市一年有多少个交易日?

事实上&#xff0c;作为交易者&#xff0c;重要的是要了解并非每天都是交易日。虽然金融市场在大多数工作日开放交易&#xff0c;但在某些特定情况下无法进行交易。这些非交易日可能因各种原因而发生&#xff0c;包括节假日、周末和市场休市。 通过随时了解假期、交易时间表和市…

报名 | Qt汽车及工业行业解决方案及实战训练 深圳站(5月15日 星期三)

加入我们的Qt技术培训&#xff0c;探索跨平台应用开发的无限可能&#xff01;本次培训将深入Qt框架&#xff0c;涵盖从基础概念到高级功能的全方位知识&#xff0c;无论您是刚入门的新手还是希望提升技能的资深开发者&#xff0c;都能在此找到适合自己的学习路径。通过实践案例…

《XR806开发板试用》硬件IIC驱动MPU6050

1.环境配置 总结一下遇到的问题&#xff1a; 1.需要修改配置文件中的文件路径 2.固件编译出现以下问题时&#xff0c;需要修改文件内容 2.工程目录结构 device/xradio/xr806/ohosdemo/car_demo └── src #源文件 └── main.c #主函数 └── mpu6050.c #驱动代码 └…

golang 流程控制

流程控制 一 if条件语句 1 if单分支 if条件表达式{ //条件表达式不建议写括号 if后一定要有空格与条件表达式分开 逻辑代码 /大括号一定要写不能省略 } 例如 var age int fmt.Println("请输入学生1年龄:") fmt.Scanln(&age) fmt.Println(&quo…

光伏并网逆变器IEEE 1547测试

光伏并网逆变器IEEE 1547测试 IEEE 1547A-2014 有电力系统的互连配电资源;修改件1 IEEE 1547.2-2008 IEEE 1547《分布式资源与电力系统互连用IEEE标准》应用指南 IEEE 1547-2003 有电力系统的互连配电资源 IEEE P1547/D08-2001 IEEE 1547-2018(Revision of IEEE Std 1547-…

凌恩病原微生物检测系统上线啦,助力环境病原微生物检测

病原微生物是指能够引起人类或动物疾病的微生物&#xff0c;包括病毒、细菌、真菌、衣原体和支原体等。病原微生物可以通过空气、体液等介质传播&#xff0c;危害人体健康&#xff0c;造成财产损失。因此&#xff0c;快速、准确地检测病原微生物对于疫情防控和保障人民生命健康…

C++之类与对象(1)

目录 一、面向对象的思想 二、类 2.1 类的引入 2.2 类的定义 2.3 类的访问限定符及封装 2.3.1 访问限定符 2.3.2 封装 2.3.3 类的作用域 2.3.4 类的实例化 2.4 this指针 一、面向对象的思想 在正式介绍类与对象之前我们首先先简单了解一下面向对象的思想&#xff0c;提到…

4G车牌识别如何实现低功耗AOV唤醒拍照?

车牌识别摄像机&#xff0c;一般的做法是有线方式&#xff0c;并且采用有线网络或者是RJ45网络&#xff0c;如果换个方式&#xff0c;比如在野外工地&#xff0c;矿场&#xff0c;需要识别一些车牌&#xff0c;上传到服务器平台&#xff0c;要考虑的是无线&#xff0c;无电&…

Mybatisplus LambdaQueryWrapper表达式使用DATE_FORMAT比较日期函数

背景&#xff1a; 最近遇到一个问题&#xff0c;数据库保存的日期字段是如下格式 但是我们需要比较的日期为 2020-08-01格式&#xff0c; 所以我们要将日期格式化 使用 Mybatisplus LambdaQueryWrapper的情况下可用下面的方式做参考 LambdaQueryWrapper<SysDicCode> la…

C++“流”风格日志系统实战-课程简介

一个能快速提升C复杂代码设计的学习项目&#xff0c;一个能迅速让C面试官会心一笑的简历项目&#xff0c;一个能在实际项目中使用的项目……学习什么是流&#xff1f;如何利用抽象层面的流编写适用面更广的代码&#xff1f; 每天在用的cout和cin 它们是什么类型&#xff1f;最后…