绑定手机号
获取验证码
确认绑定
提问
0/255
提问
订阅开课提醒需关注服务号
回答成功
知道了
扫码关注智猩猩服务号登录
请使用微信扫描二维码
扫描二维码分享给微信好友
您已订阅成功,有新课程,我们将第一时间提醒您。
知道了
发送提问成功
回答可在
“我的——我的提问”中查看
知道了
失败
欢迎来智东西
关注我们
智东西
车东西
芯东西
智猩猩
0
0
直播实录 | 百度智能云&英伟达4位大咖全面剖析新一代高性能AI计算集群中的技术方案和应用
分类: 智能计算
2022-04-22 18:31:32

百度智能云异构计算产品经理玄凌博

从算力维度出发,首先回顾企业在计算方面的发展

按照时间维度,企业有四个典型的计算发展阶段:

1、2006年以前,大多数企业仍是以传统物理机为主的单体IT架构;

2、2006年以后,随着企业上云的大趋势,迎来了云计算的时代,并随着云服务器、弹性裸金属等产品的爆发,能够弹性按需的满足企业对IT资源的使用诉求;

3、2017年以后,随着云原生技术的成熟,像容器、微服务等技术不断的商业化落地,能够为企业提供极致弹性,云原生应用的开发架构;

4、2020年以后,随着人工智能技术不断的爆发及增长,现在正迎来一个AI原生云的阶段。

企业需要极强的AI算力,来满足各个AI应用相关的开发及训练。在这个时代,云服务器厂商需要提供极致弹性且高性能AI算力,是适用于AI应用开发的云架构。

为了更好的解决人工智能计算的并发问题,通常会使用适用于计算密集且易于并行计算的GPU。

随着计算架构的不断发展,异构计算加速器通常会包含多种计算核心,来更有效率的加速特殊数据格式的计算。以NVIDIA GPU为例,通常CUDA Core是面向通用计算的计算核,能够计算几乎所有的数据格式。RT Core则是面向渲染里做光线追踪的加速单元,而Tensor Core则是面向人工智能或深度学习里做矩阵向量乘加的核心。近年来,很多国产的AI芯片也采取了类似的思路和策略,例如昆仑芯,包含拥有大量的面向矩阵做加速的处理单元。

异构计算是AI原生时代重要的算力底座。百度内部拥有大量的AI应用场景,多年的AI算力建设经验和技术积累,通过百度智能云对外提供的异构计算云服务,能够赋能千行百业。

云上的异构计算服务主要分为两种:一种是以BCC异构计算云服务器的形态,提供极致弹性、灵活、高性价比的算力规格。而搭配BBC异构计算的弹性裸金属服务器,能够做到算力的零虚拟化损失、百分百服务于客户业务,提供极高性能的算力,且满足部分客户对安全隔离性的要求。

百度智能云支持丰富的异构加速卡的型号,支持英伟达最新的安培架构计算卡,也提供自研的加速芯片昆仑芯。在高性能的异构计算上,用户可以在分钟级创建以往可能花费需要数月来构建的InfiniBand集群环境。

在产品命名上,主力产品的实例规格族和异构卡类型是一一对应的,比如GN5通常会支持英伟达安培架构的卡,GN3会支持上一代的架构,像V100、T4等。在实例规格的搭配方面,实例根据GPU的一些物理规格,例如显存、SM等,经过了合理CPU、内存配比。针对部分的异构计算卡也提供了像vGPU的实例,能够提供更具性价比的计算算力和渲染算力服务。

在面向AI应用爆发的时代,异构计算产品也在不断打磨,推出新的产品特性。除了业界对云服务的一些通用要求,像运维及弹性按需之外,百度智能云也深耕GPU虚拟化技术,通过透传、GPU分片以及多容器共享等技术,能够更好的提高客户对资源的利用率。在硬件层面上,也是百度智能云投入的重点,陆续推出了自研的AI芯片、AI架构服务器,即X-MAN,以及云上高性能的网络组网方式,目的是能够不断提高AI全栈的负载计算效率

在异构计算卡、服务器和网络等方面,百度智能云的产品能力有哪些?

不同GPU的型号都有不同的定位,面向计算的GPU,比如AI推理、训练或者HPC的型号,通常会在双精度浮点FP64以及半精度FP 16上做一些特殊的加强。有些GPU则会支持更多的应用场景,例如A10,有更多的CUDA Core和RT Core,在渲染场景也有很好的性能,提供更强的单精度算力。

除了计算单元,显存也是一个很重要的参数。A100和A30都是支持HBM的。对于一些访问密集型的计算,HBM显存会有更强的性能表现。此外一点是GPU的P2P能力,PCle这一代在双向带宽上可以做到64GB,而支持NVLink的计算卡,比如A100、V100,能够在GPU P2P上有进一步的能力提升,像最新的NVLink 3.0,可以做到双向600GB的量级。

除了英伟达的卡,昆仑芯也来迎来了第二代。第二代的昆仑芯在性能上都有了全方位、大幅度的提升,比如在通用性以及各个规格的算力,工艺也从13纳米到了7纳米。除了性能的提升,也集成了ARM核,可以更好的适用于一些边缘计算场景。此外,也考虑到了分布式的典型AI应用场景,昆仑芯也可以支持K-Link这种高速P2P能力。如果客户在云上突然对虚拟化有一些诉求,昆仑芯可以在物理上支持虚拟化。在软件的适配性上,提供了更友好的开发环境,支持C和C++编程

本次讲解的重点话题是云上的高性能计算集群,以往企业搭建一套高性能计算集群,需要投入极高的人力成本和数月的时间成本。而大部分客户使用高性能计算,追求的是极高的业务时效性。使用百度智能云可以分钟级获取到一套高性能的异构计算实例,也就是利用最新发布的高性能H5系列,来组建高性能集群,这套实体也是基于X-MAN架构来对外提供服务。

在计算效率上,数据的访问效率及通信效率都进行了硬件层面的升级与增强;在配置上,标配了业界最高规格的配置,比如英特尔铂金系列CPU,全闪存的本地盘,还有和GPU 1:1配比的InfiniBand网卡;I/O设备可以直连A 100 GPU,这样可以通过GDR、GDS加速GPU读取I/O设备的访问效率。

在集群分布式的AI训练中,往往会有一半的时间用于GPU节点之间做梯度交换,而在交换时则会造成计算资源的闲置或浪费,影响了整个模型的收敛效率。那RDMA的高性能网络,可以极大的降低节点之间的时延,而InfiniBand作为天然支持RDMA的通信协议,有极强的性能表现。InfiniBand对比传统TCP IP协议,对时延有极大的提升。

从实际模型的训练表现来看,以BERT的训练为例子,高性能计算H5对比云上普通的A100,在单节点上差距并不明显,但在整个集群训练中,即便是4节点的小规模计算集群,高性能计算H5也可以带来近2倍的吞吐性能。更高的吞吐意味着模型收敛时间可以进一步降低,一个小时的训练任务可以缩短到接近半个小时,成本可以节约近50%。

那么如何更有效率的发挥硬件的性能?百度在去年推出了百度百舸·AI异构计算平台,除了高性能H5这些计算实例外,也推出了AI容器、AI存储,进一步能提高GPU工作效率和作业效率,像AI存储可以提供百万级IOPS和百万GB吞吐的能力,可以进一步的提高训练数据读取效率;AI容器则提供多种调度以及GPU增强能力,比如AI作业调度、集群管理能力,并且提供GPU容器虚拟共享。

 超大规模AI异构计算集群的设计和优化

百度智能云资深研发工程师孙鹏

最近,业界有一个很大的趋势是训练规模越来越大的模型。从GPT-3开始,模型已经被推到了千亿参数量的维度。从2020年到现在,各个厂商也在不断推出更大参数量的模型,比如OpenAI的GPT-3、Google的Switch Transformer,百度去年也先后推出了多个大模型,像ERNIE 3.0 Titan,它是全球最大的中文单体模型。

现阶段大模型还会成为一个逐渐演进趋势,比如可以类比人脑,通常认为人脑中有861亿个神经元,每个神经元大概有7000多个突触,近似的做一个类比或代换,大概有60万亿的参数规模,约是GPT-3模型参数量的300多倍。现在的模型规模离人脑的通用智能还有很大差距,这会是一个值得持续投入和研究的领域。

那大模型究竟是个什么样子?该怎么用它呢?文心大模型提供了一个线上试用的地址:

https://wenxin.baidu.com/wenxin/ernie,感兴趣的同学可以打开试一试。

文心大模型可以在NLP领域支持多个任务,包括歌词续写、旅行问问、剧本生成、对联续写等。举个简单例子,输入文本“7月11日准备去青海,该准备怎么样的服装”,文心大模型会根据训练过的模型数据自动生成一段对话:“如果是自己去,要准备好衣服、雨衣、帽子、墨镜、手机、相机,还有一些生活必需品,如手表、相机、雨衣、防晒霜、太阳伞、洗发液等。这些是在青海的基本必需品。”,结果看起来比较符合真实场景,也比较符合人类智能,这就是用大模型的实际感受。

同时,大模型不仅业务效果好,而且对业务还会产生很多的收益,比如随着模型规模越来越大,业务训练过程中的损失会越来越低,而且呈Power-law的趋势。并随着参数规模的倍数增长,Test Loss会线性下降,这也带来了一个启发:可以用大模型的方式提升整体业务的训练效果,或整体业务在线上的效果。

除此之外,研究人员还发现大模型可以通过小样本在其他领域取得很好的效果,不需要像原来一样,对每个业务场景都重新训练一遍,而是先拿一个大参数的预训练模型,结合特定领域的小样本做finetune,可以很快完成业务的迭代。而从一定程度上也反映,它其实是一种更接近通用智能的方式。

虽然大模型有很多好处,但大模型训练会很难,那究竟多难呢?比如有3000亿条词语,需要1750亿的参数,这样的模型计算量大概是420ZFLOPS,其中1 ZFLOPS是1024 EFLOPS,1 EFLOPS又是1024 PFLOPS,这是一个非常大的数量级。也有论文分析,对于这么大的参数、这么多的样本,用1024张A100卡,也需要月级别才能完成训练,这对整个训练和技术架构的挑战都是非常大的。

百度智能云现在做的就是如何在大规模参数情况下完成高效稳定的持续训练。模型训练需要这么多的参数,也需要很多的计算资源,因此需要搭建一个集群来支撑整个训练。

有集群建设经验的同学可能知道,搭建一个集群并非易事,这个过程会有很多不同的选择,比如单机该如何选,训练卡是什么样,训练卡内部的互联方式是什么样,多机之间又应该如何架设网络保证它们之间能高效通信,网络规模又需要是什么样的,这些都是在集群建设中很关键的问题。

要解答这些问题,必须深入整个理解大模型训练的过程和模式。所以接下来会结合现在业界比较主流的几种大模型训练方式,对它进行展开和剖析,看看完整的训练一个大模型需要什么样的计算、通信和过程。

先来看下业界比较主流的混合并行的模式,混合并行是指什么?先来做一个简单的数学计算题,在当前的大模型下,假设以1000亿参数为例,每个参数需要占4个字节,是FP 32的数据类型,因此仅对于这个参数来说,就需要400G左右的存储空间。对比市面上最大的计算卡,一张卡可能只有80G,像NVIDIA A100,在400G到80G之间存在一个很大的GAP,尤其是包含了其他的一些梯度等中间变量之外,GAP会变得越来越明显,所以无法简单粗暴的像以前一样把一个模型塞到一张卡里,然后通过纵向扩展数据卡来提升训练效率,而是一定要把模型做切分。

目前,大模型通常都是BERT类模型,BERT类模型的特点是不断的堆叠Transformer层,这种堆叠天然的带来一些切分的策略和方式。业界通常有几种切分策略,如BERT模型中的两个Transformer层,这两个Transformer层之间会有前后的依赖关系,即在第一层计算完之后,把计算结果传送到第二层再开始计算,这就带来了一种切分的可能性,就是按层切分,

把这种每层切分的方式叫做流水线并行,因为层与层之间可以认为是流水线的过程,先把第一层计算完,然后再流水的计算第二层。

除此之外,再观察每一层内部,在大模型的环境下,MatMul参数会特别大,导致其中的矩阵张量都会很大,在一张卡上计算会比较慢,那如何加速这个过程呢?可以把模型中的张量一分为二,一部分卡负责其中的一部分计算,它们之间的额外代价需要进行一些通信操作,这种切分由于是把一个张量一分为二,所以这种切分策略通常称为张量切分或模型并行

有了这样的切分方式之后,模型基本可以做一个完整的训练。由于样本比较多,这时训练效率会比较低,可以通过传统的数据并行方式,不断的堆叠这些层做数据训练的加速,这就是纵向扩展方式,也是大家比较熟悉的数据并行方式

因为显存占用还是比较紧张的,还有一些减少显存占用的策略和方式,大家比较熟悉的是Sharding方式。这些混合策略整合起来,会形成混合并行的策略,像百度飞桨提出的4D混合并行策略就是将这几种运行策略做了组合。这个是第一种大模型训练方式,即混合并行的模式。

业界还有另外一种训练方法,称为混合专家模式,或专家并行模式。专家并行模式是原来一个模型由一张卡的一部分做计算,但由于模型参数很大,所以需要把它打散到不同的卡上。现在对一些层面压缩模型的大小,让每一个卡或每一个专家只负责处理其中的一部分参数,然后只需要横向扩展不同的专家个数,就可以达到参数上的成倍或者线性的扩展。好处是可以在计算量基本不变的情况下,大幅增加模型的参数量,从而在更低廉的规模集群上完成训练,但这个训练同样也会带来一些通信能力上的要求。举个例子,原来每一个专家可能分别会有自己的一些数据,但是现在要把这些数据分发给不同的专家,所以会做一个给所有人发送数据的操作,即是All2All的操作。这个操作对整个集群的网络压力或网络要求非常高,这就是常见的专家并行模式。

在百度内部我们对整个训练的模式做了更细微的观察,以及更量化的计算。如果以1000亿参数的模型为例,对于不同的切分模式、切分策略,在通信的卡数、通信量上以及在通信过程中做计算时间都会有不同的差异,这就能整体推导出对集群需求会不一样。比如流水线并行,一般会把不同流水线的层放到不同机器上,机器之间需要互相传递最后一层的激活以及反向梯度,这通常是一个标准的Send/Recv操作,而这个数据量大概在MB级别。这种并行模式对集群的要求是机间的P2P带宽延迟要非常低,从而尽量减少对整个模型训练的阻塞。

大家比较常见的数据并行模式,同样也会把它分成不同的组,然后组内全部卡都要做数据并行的AllReduce操作。虽然看起来数据通信量很大,但是留给它的计算时间相对的充裕一些,不过整体上来看,仍然要求很高的机间高吞吐AllReduce操作。

最后一个是专家并行模式或者混合专家模式,它要做全卡之间的All2All操作,每张卡在往外发数据的同时,每张卡还要做收数据,这对整个集群要求非常高,尤其是对网络上的吞吐和整体网络的交换能力,这个也导出了要求机间高吞吐All2All的需求。

结合论文来看,还有一个隐式的需求,比如在英伟达在《Efficient Large-Scale Language Model Training on GPU Clusters》论文中预估过:1750亿参数的模型,在3000亿样本的规模下,即使是1024卡,也需要训练34天。维护过集群或做过分布式学习的同学可能都会知道,这么多卡在这么长时间之内不出现故障基本是不可能的,那如何保证在有故障发生的情况下,模型能持续稳定的训练,也是亟需解决的问题。

总之,为了训练一个完整的大模型,要建设一个机内高速通信、机间有低延迟高吞吐能力,同时支持大规模算力的集群,还要保证它能持续稳定的月级别训练。

百度智能云推出的百度百舸·AI异构计算平台,就是基于这样的AI工程能力构建的解决方案。

百度百舸·AI异构计算平台在底层使用了超级AI计算机X-MAN,也基于InfiniBand做了一个大规模网络的建设,同时还配合上自己的高性能存储,解决了数据I/O的问题。在这之上,还给AI容器做了一些优化,比如有高效的AI作业调度、AI加速引擎,再配合上PaddlePaddle框架、TensorFlow框架、PyTorch框架,可以很方便的给开发者提供高性能、高效率且稳定的大规模模型训练的平台和场景。

首先,从单机层面看,单机用的是X-MAN 4.0超高性能计算机。这款计算机上搭载了8块NVIDIA A100 80GB GPU,共提供640G显存,因为需要卡与卡之间的高性能通信,所以启用了NVSwitch,保证机内带宽能做到134GB每秒。同时,为了能保证机间能做高性能的互联,最终选择了8×200G的网卡,接下来会用IB网络做互联。这台机器的效果怎样呢?在最近发布的MLPerf 1.1单机训练A100 80G规格中,做到了全球TOP 2

再来看下集群,集群上关注的是规模如何以及集群互联方式是什么样的。这里选用了一个面向大模型优化过的三层Clos架构,分别是Tor层、Leaf层、Spine层,它最大能支持到16000卡的超大规模集群,这个规模是现阶段全IB网络盒式组网的最大规模

上面提到在计算过程中会频繁做AllReduce操作,甚至会做All2All操作。结合这些计算模式,尤其是针对AllReduce需求,做了一个8导轨网络的定制优化,即在同号卡尽量减少跨网络的跳步数,从而增加网络的稳定性,以及减少对整体网络的冲击。此外还充分使能了IB网络中的Sharp能力,整体支撑集群的稳定和持续训练。

网络架构上,结合CPU、 GPU做了联合网络规划,从而高效的提供网络拓扑感知能力。那这个集群的效果如何?在建完之后做实测,发现集群中的P2P延迟能做到1.4us左右,网络中平均时延小于2us。单机转发延时小于200ns,远低于以太网络的400~500ns。在96机All-Reduce算法带宽实测为78GB每秒。同时,为了保证作业能稳定的训练,还特意测试了性能稳定性,性能稳定一致性能做到98%的水平,也就是接近一个一直在稳定通信的状态。有了这样的集群就可以让算力发挥的更好,从而让训练时间变得更短。

即使集群搭建好了,但上面的所有软件或模型也不可能一直安全的运行下去。除了硬件之外,还要在软件层面做一些软硬结合的联合优化。百度有8年多的万卡规模EFLOPS算力最佳实践的能力和积累,然后把这些最佳实践统统用到了自研的平台上,下面介绍几个比较有特色的:

首先是自研的异构集合通信库ECCL。由于内部有很多不同代的GPU,还有昆仑芯等不同的异构芯片,如何把所有的芯片都高效使能起来,是要解决的一个关键问题。同时,在大规模上还需要解决一些拓扑探测、拓扑感知的问题,所以也把它放在通信库中。

在此有这么多资源,还需要做一个比较好或比较科学的调度和管理,包括AI作业调度、硬件感知,及在训练过程中发现的故障节点和慢节点的感知,放到了集群资源管理层中。

百度自研的PaddlePaddle框架,提供了从框架到集群再到通信联合优化的可能性。

下面会为分享一些具体的case。先从通信来看,自研的异构集合通信库ECCL是为了解决现在集群中同时存在多类芯片,但集群中的容错能力有限,而且有一些慢节点业务感知不到,慢慢的拖慢了训练效率。为了解决这些问题,设计了一款自研高性能集合通信库,它首先是面向超大规模设计的,专门为这些弹性能力做了一些考虑。此外,还提供了一些拓扑探测、通信算法的高性能实现,加上刚才提到的在训练过程中很敏感的故障感知,提供了部分的自愈能力,这些都在大集群中做过验证。除此之外,还具备异构多芯的特点,能支持GPU和CPU之间、GPU和昆仑之间的高性能通信。总之,它就是为了加速卡与卡之间AllReduce等级流动性操作而设计。

异构芯片通信通过联合GPU、昆仑团队,把传统需要通过CPU中转、CPU过滤转发进行通信的方式,通过Direct RDMA的方式直接进行实现,这样可以有效减少数据拷贝的次数,提升通信性能。

IB网络中也有很多有意思的能力,比如做AllReduce操作时,为了保证网络吞吐尽可能发挥,会在算法层做一些AllReduce实现。AllReduce本身会进行两次操作,比如同一块数据要做两份,但会给集群带来的是数据要在整个网络和集群中进行两次。IB有一个很有意思的特点叫Sharp,即把整个计算卸载到交换机中,对于用户来说,只需要把数据传给交换机,交换机就可以把AllReduce计算完的结果再反馈给我,整个过程能使数据通信的带宽降低、减半,也能使算法翻倍。同时,由于减少跳步之间的次数,可以让通信延迟更加稳定,这也是在大集群中跟英伟达联合使能的一个工作。

在大集群训练中会需要做All2All操作,这对网络中的需求或对整个网络的冲击都非常大,因为所有的节点都在同时的收发数据,在NCCL 2.12版本中也使能了一个新的功能,就是做Rail-local的All2All,即可以利用本机高性能的NVSwitch的一些通道,减少对网络的冲击。尤其是在8导轨设计下,能很好的减少网络中的流量。在使能英伟达的联合工作之后,本地也做了一些性能测试,在64机的情况下有70%的性能提升。

在集群资源的管理层面也做了很多工作,包括面向AI训练作业的特点,提供了一些Gang调度、优先级资源管理的能力。还结合硬件的特点,尤其是结合通信中提供的拓扑能力、组网能力,做了一些相关的拓扑感知,以及TOR亲和、TOR反亲和之类的调度策略,从而更好的支撑做训练。联合框架进行了一些弹性扩缩容,包括故障容错、慢节点巡检等,都是在集群调度层面去实现的。

接下来分享下端到端自适应训练框架,众所周知,在训练过程中经常会发生故障,发生故障之后有几种做法,一种是做容错的替换,还有一种可以做弹性的扩缩容。无论是替换还是扩缩容,由于参与计算的节点所在位置发生了变化,它们之间的通信模式也许不是最优,也许可以通过作业重新排布、调度,在更好的放置来提升整体训练作业的效率。

这个过程中联合PaddlePaddle框架,整体提供了端到端自适应训练框架的能力。具体来说,当发生节点替换时,无论是因为容错还是节点扩缩容,都会重新做一个预跑,在小节点上去看这个模型需要什么样的计算方式和通信方式,然后结合集群拓扑探测出来的集群性能,再结合计算需求和通信需求,整体做了一个重新的映射。这是一个系统性、全生命周期的优化,在端到端上实测有2.1倍的性能提升。

映射和拓扑是两部分信息,一部分是框架告诉模型该怎么训练,或模型有哪些切分方式,切分之后计算模式是什么样的,它们之间的通信模式什么样。另一部分是结合自己在通信库中做的拓扑探测和拓扑感知,会探知出一个集群中的单节点和集群之间的计算、通信模式和能力,形成集群拓扑通信图。

这两个图之间会结合一些图算法,做最优映射,再将映射结果交由框架,再借助调度器的策略调度能力,做最终的硬件拓扑调度以及作业的重放置。通过这种方式,实现了一个框架调度通信库的联合优化,从而端到端的提升整体的训练效率。

最终的效果建立了一个完整的EFLPOS级算力的集群,真正的实现了月级别千卡大模型的训练。在训练过程中,整个GPU的利用率一直维持在95%以上,很好的发挥了硬件能力,千卡规模的加速倍也做到了90%以上,整个业务训练的吞吐结合业务实测大概有3.87倍的提升,这个集群也真实的支撑了像ERNIE 3.0 Titan等多个大模型的持续迭代。

超级AI计算机X-MAN技术揭秘

百度智能云资深系统工程师武正辉

GPU进入数据中心约有8~10年,这些年内GPU显存的容量、GPU P2P带宽、GPU性能都在不断提升。据不完全统计,每年GPU显存大约有一倍的变化, P2P带宽有1.5倍到2倍的变化,而且性能变化更多。

由于性能的变化,会引起GPU功耗的变化, GPU功耗变化从最早的40瓦一直到现在的400瓦、500瓦,以及到未来的700瓦等等,这种变化会引起算力提升。

由于业务模型的需求,算力的提升推动了硬件在整个性能方面的不断迭代。模型的变化大约在3~4个月会有一次迭代更新,每年大约有3~4次的迭代,而近几年硬件的变化速度明显低于模型的变化,这对整个硬件系统在设计过程中带来了极大挑战,主要表现在以下5方面:

1、算力挑战,主要表现在GPU的算力方面和整个系统的算力;

2、存储挑战,主要是GPU和存储之间通信的带宽和通信速度的挑战。

3、通信挑战,主要是GPU和GPU之间或者计算节点和计算机节之间的挑战

4、散热挑战,GPU 功耗增加散热的挑战越来越明显。

5、供电挑战,最早是12V的供电,近几年逐渐发展到54V供电,目的是为了解决大功率密度GPU在供电过程中的高功耗问题。

X-MAN 4.0的设计恰好解决了上面提到的几个痛点。算力问题上,因为整个设计是一个硬件解耦的设计,采用了GPU资源池化的解决方案,同时是一个模块化的设计,兼容了OAI和OAM;由于X-MAN 4.0设计有一个灵活的、拓扑的I/O,能够支持I/O扩展和多网卡的性能;在整体散热上,采用了风冷兼容液冷的设计,能够很好的发挥GPU的性能;供电上,采用了54V供电,相较于12V供电,系统更加稳定可靠,而且适合于大功率密度的GPU应用场景。

在整个硬件架构设计方面,采用了融合架构,即AI和HPC架构融合,整机柜和标准机架构融合,同时把存储靠近GPU,实现GPU和存储之间访问时延最短;

硬件解耦是GPU和计算节点完全分离,而且可以灵活支持不同的CPU,比如Intel 平台、ARM平台、AMD平台等;还有灵活分布的I/O,而且I/O可以扩展;GPU和网卡之间的配比关系可以实现1:1;在整个散热的过程中,有风冷和液冷共存;

另外,支持资源池化和模块化的设计X-MAN 4.0在相同硬件配置下,它的MLperf结果在全球名列第二。

因为X-MAN 4.0具有I/O灵活的扩展性,所以对于超大规模集群来说,它有一个很好的组网能力。因为在整个集群的组网过程中,采用了200G的IB网络,实现了上行网络和下行网络的1:1的带宽。在整个的集群设计过程中,采用了Ethernet和IB共存的模式,实现了存储和GPU之间高带宽通信,实现了GPU和存储的池化。

除X-MAN 4.0之外,也看到了一些其他的产品,比如X-MAN 1.0、X-MAN 2.0、X-MAN 3.0,还有正在开发的X-MAN 5.0。对于每一代产品都有不同的产品形态和架构设计, X-MAN 1.0采用的是一个16卡的PCIe卡架构,这种架构设计当时是为了解决多机和单机处理不同任务时,可以给一个机器分配多个任务,或者把一个任务分配给多个机器,好处是可以充分利用GPU资源,从而实现 GPU资源的最大利用。

从X-MAN 1.0到X-MAN 2.0,实现了 GPU P2P带宽的提升,从PCIe 3.0提升到NVLink 2.0,而且在X-MAN 2.0时,具有灵活I/O雏形。

在X-MAN 2.0到X-MAN 3.0之后,整个网络实现了100G RDMA的通信,同时整个架构上的设计,可以支持单机内的大模型,从而在GPU和GPU之间通信采用了NVLink 3.0技术。

从X-MAN 3.0到X-MAN 4.0,整个架构发生了一些变化,即有了更丰富的I/O,能够支持更多的网卡,而且能够实现节点和节点之间的高速互联和灵活组网,支持100G网络和200G网络以及更高的一些网络。

X-MAN还能够结合4路CPU的计算节点,解决一些行业内应用的问题。

从整个架构上来看,

  • X-MAN是硬件的解耦,而且能够灵活匹配不同的硬件平台,比如Intel平台,AMD平台,ARM平台。

  • 另外,在整个设计过程中,采用资源池化的设计思路,即可以把一个机箱里的GPU看做一个资源池,按照业务需求去分配。

  • 同时,机内的网络能够支持Fabric任务架构,动态的对GPU资源进行分配。

在整个设计过程中,是模块化设计,可以把整个架构分为4个模块:网络交换模块, GPU模块,存储模块和供电模块,以及计算模块。整个网络模块从X-MAN1.0、X-MAN2.0、X-MAN3.0、X-MAN4.0发生了重大的变化,而且整个时延在不断减小,网络带宽在逐渐提升。

X-MAN架构还引领了 OAI和OAM标准,因为它有一个丰富的I/O,能够实现灵活扩展,而且适合于匹配不同的计算节点,或适合于组成不同的网络和集群。

同时 ,X-MAN在新技术方面,也在不断的探索和尝试,比如散热方面,从最早的风冷逐渐过渡到冷背技术,而冷背技术在X-MAN 2.0上已经大规模的应用,在数据中心已经应用了长达2~3年,而且非常的稳定。随着GPU功耗和性能的不断提升,在未来的某个时刻内,会发现冷背的散热技术已经满足不了GPU的需求,所以会采取浸没的散热方式彻底解决GPU散热问题,提高GPU的性能。

未来随着模型的发展,可以看到芯片的设计越来越大,而且需求的带宽和时延越来越低,这样可能会形成一个芯片在未来代表一个集群,这种设计的好处是时延低、带宽大。但对于系统设计来说,散热是一个挑战。另外,还需要有一些非常高速的带宽网络满足节点和节点之间的通信需求。

随着网络和网络带宽的不断提升,在整个集群方面,需要有更高的带宽网络来满足GPU和GPU之间通信的需求。同时,由于显存和内存的局限性,未来在显存和内存的扩展方面会有新技术的出现,这样会形成显存和内存的池化技术,来满足业务的需求,从而提升显存和内存的利用率。

随着技术的发展,未来整个系统架构的设计,模块化的融合设计。而对于应用场景来看,需要精准的匹配不同应用,来满足不同应用场景和业务需求。

随着芯片技术的不断发展和整个行业互联技术的发展,从底层的芯片到服务器节点内部,CPU和GPU之间互联技术的带宽比原来越来越高,大约有2~3倍的提升,而时延在不断的降低,节点之间和Rack之间的带宽也越来越高。所以,未来整个通信方面或互联技术方面,需要更高的Ethernet或IB网络支持整个节点和节点之间的通信,或Rack和Rack之间的通信。

随着技术发展,不仅仅有IB网络和以太网,还有其他的网络用于节点或集群之间的通信,可能有另外一种低时延、高利用率的网络出现,来满足像HPC或者AI集群的通讯需求。

 NVIDIA SuperPOD赋能AI数据中心

英伟达解决方案架构师程帅

AI数据中心的趋势和挑战

在数据中心里,不管是数据集还是模型大小,近几年都呈现出爆炸式的增长。从数据的角度来看,数据已经非常接近100+Zettabytes量级,更可怕的是这里面数据,90%是在过去两年的时间内产生的,这也得益于智能手机、智能终端以及消费互联网的普及,使得每个终端每时每刻都在产生大量的数据。

另外,可以看到一个趋势是AI+HPC的融合,在科学领域可以看到它的数据集在不同计算领域里也呈现非常大的增长,比如正在经历的新冠病毒,如何分析它对人类细胞的攻击变化,可能需要几百T的数据量;比如做地球气候的模拟,每天会产生200+T的数据量,这些数据都是非常大的量级。对大数据更好的洞察和解析其本身内在的一些模式,由此引出需要更大的模型来处理和分析这么多的数据。

在过去三年,以Transformer为代表的语言模型,参数量已经提升了3个数量级。2020年,GPT-3有175B的参数量,达到了千亿级别。那这样的数据爆炸及模型爆炸趋势,对计算、通信和基础架构带来什么样挑战?

首先,以GPT-3为例,从计算量来看,做了一个相关的评测。根据英伟达的《Efficient Large-Scale Language Model Training on GPU Clusters Using Megatron-LM》论文中的Lower bounder of each iteration公式对GPT-3模型进行解析,可以发现GPT-3最小需要的计算量和batch size、sequence length、Transformer网络层数、hidden size以及词汇表的大小有关。在实际应用中,batch size可以选为1536,通过对Lower bounder of each iteration公式计算,一个迭代步骤的计算量大概是4.5ExaFLOPS。另外,在我们的实践中,大概需要有9万多次迭代,所以总的计算量430 ZettaFLOPS。

这个计算量有多大呢?以A100 312TFLOPS的FP 16计算能力来看,需要16000张A100算一天的规模,而且还没有考虑计算过程中效率的损耗。在实际训练中,这个大模型大概需要在1000多张卡,计算训练34天。

模型变化对底层的通信也有非常大的挑战。过去, AI模型并不大,可以在单卡GPU中放下一个模型,更多是做纯数据并行的加速、迭代。在这个过程中,只需要在模型后向时去做一次AllReduce通信,把梯度全部规约一遍。而且在很多实际优化中,通信的AllReduce有很大机率会和计算重叠,有很好的一个优化效果,所以这种模式是比较简单的。

当模型大时,需要加上Tensor模型并行,即一个GPU已经放不下大模型了,必须把模型切分开。它是把一个网络层切开,每个层的第一部分可以放在第一个GPU上,第二部分放在第二个GPU上。这样做给计算和通信都带来一个挑战,即每次前向及后向计算时,每走一遍网络都要做一次通信,通信量非常大。通信通常也是AllReduce类型,所以针对这种计算通信特点,最好把模型并行的划分限制在节点内,利用NVLink以及NVSwitch的高速带宽来缓解这一变化带来的通信压力。

如果模型大到一定程度时,单机8卡的规模也放不下一个模型,则需要做另外一种划分,即网络层之间的划分,是Pipeline并行。它的特点是在相邻划分点的前向及后向计算时都会有通信,通信的类型往往是P2P通信。每次P2P通信的计算量可能不是很大,但通信的点非常多,最好的情况是每一个GPU和相邻节点通讯时,有一个最近的网卡和它配合,这样可以运用到GPU DirectRDMA的功能。这种划分的挑战是需要多网卡来加速通信。

总之,建一个数据中心大概有三方面的挑战:第一,怎么设计一个可扩展的训练平台,它可以更好的支撑不同计算特征的业务,而且还要保证它的可扩展性,以及AI模型变化带来计算特征变化的预期;第二,一个分布式的集群系统非常复杂,它需要很长的部署过程,是否有一种方案可以快速部署搭建起来;第三,部署完之后,怎样让业务部门、云客户更快的使用起来,以及自身如何做到可持续的维护。

为什么需要GPU SuperPOD

为解决上面三个挑战,英伟达推出了SuperPOD架构。大家知道英伟达做了很多AI研究,像自动驾驶、语言模型等,它也有自己的数据中心。结合过去四五年的时间,英伟达在数据中心的迭代、运维维护以及建设经验,总结出来一套方案叫DGX SuperPOD,DGX SuperPOD分为3块,一块有一套标准化的部署流程,可以帮你快速部署;第二块是架构有最优的设计,只要参考这个架构,就可以在AI训练里面达到更好的效果;第三块有一套完整的运营流程。DGX SuperPOD可以帮用户快速的搭建、使用和可持续运维。

对一般用户可以有两个选择,一种可以直接采用NVIDIA DGX SuperPOD架构搭建自己的平台,另一种正如今天的主题,百度参考了这样的架构建设X-MAN SuperPOD。用户可以通过百度智能云灵活、按需的使用SuperPOD架构,加速自己的AI业务。

英伟达基于自己的SuperPOD架构,建了集群NVIDIA Selene。NVIDIA Selene由560台8卡计算机组成,有4000多块A100 GPU,850台 InfiniBand交换机搭建的集群,存储搭配了14PB的分布式高性能存储,计算能力可以达到2.8 EFLPOS的AI计算能力。

这个集群的性能如何呢?在MLPerf 1.1版本中,以收敛到一定程度最快的时间来看,采用分布式训练的方式加速评测中的8个任务,包括目标检测、语音、推荐系统等,可以看到在所有的任务中,NVIDIA SuperPOD架构的时间是最快的,这也足以证明了NVIDIA SuperPOD架构的可扩展性和有效性。

NVIDIA SuperPOD最新参考架构解析

SuperPOD架构的设计理念是什么呢?首先,它是一个模块化的理念,它由140台的A100服务器,即1120张A100 GPU组成,它的网络采用计算网络和存储网络相隔离的方式,计算由8张200G的InfiniBand搭建起来,存储由1个或2个200G的InfiniBand搭建起来,这样可以保证计算和存储互不干扰。另外,不管是计算网络还是存储网络,都是采用了一个胖树互联的方式,而且是无阻塞的,这样可以达到更好的扩展和低延时。而且里面可以用到InfiniBand的自适应路由,以及SHARP(Scalable Hierarchical Aggregation and Reduction Protocol)卸载的功能。

SuperPOD的可扩展单元简称为SU,每个SU有20台的规模。对于计算网来说,因为每台机器有8个200G的计算网,每个网卡都会连到Leaf层的相应位置,每台机器的第1个卡连到第1个Leaf,第2个卡连到第2个Leaf,以这样的互联方式。从Leaf层到Spine层,需要有4台Spine层交换机,然后均分的连接起来。好处是可以保证到相同位置GPU在通信时都在一个交换机上,可以减少延迟跳数;另外,可以很好的去用到网络卸载,相同位置的GPU以及相应位置的网卡通信时,用SHARP卸载功能加速这个过程。

基于1个SU的拓扑,可以去扩展到2个SU,甚至标准的7个SU。7个SU的拓扑相比于1个SU多加了一层交换机。从计算节点到Leaf层连接,和1个SU的理念一样。从Leaf层到Spine层,每个SU里相应位置的Leaf层交换机连到相应的一个SG组,一共是有8个SG组,80台的交换机。从Spine层到Core层分成两个组,CG1和CG2,Spine层奇数位置的交换机连到 CG1,偶数位置的交换机连到CG2,通过这样的互联方式达到扩展。

总之,SuperPOD是一个可以是任意扩容的设计理念,可以基于1个SU甚至半个SU扩展,可以扩展到2个、4个、7个,甚至像百度一样可以扩展到上千台的规模

另外,SuperPOD里可以用到优化好的一个软件镜像NGC,即NVIDIA GPU  Cloud。这个Cloud是一个软件概念,它里面包含了很多针对不同框架优化好的镜像,这些镜像可以很快启动起来,保证性能更优。另外,NGC里也放了很多预训练模型。除此之外,针对不同的行业,还有一些开发好的方案,比如针对医疗有Clara,针对智慧城市有Metropolis方案,针对自主机器人有Isaac,这些都已经放在NGC里使用,这些镜像可以支持不同的云、裸金属、混合云或终端,在x86、ARM以及POWER上都有很好的支持

分布式训练很大的一个挑战是通信,英伟达有NCCL(NVIDIA Collective Communication Library)通信库,它是GPU之间通信优化的库,也已经成为了一个工业标准。NCCL可以支持不同节点内的拓扑,也支持不同节点间的拓扑,它可以自适应的选择最优的Ring或Tree以及相应的协议,让通信最快。

同样,交换机卸载的功能叫Sharp,即可扩展的分层聚合和规约协议,简单来说就是把在CPU或GPU上的通信放到交换机上,一方面释放CPU和GPU资源,另一方面延迟和带宽是最好的。Sharp和NCCL可以无缝结合起来,只需要通过一个插件库就可以把这个功能用起来。

NVIDIA SuperPOD加速全球AI数据中心案例

不管在学术界还是工业界,有很多采用SuperPOD构建自己的AI数据中心,在加速自己领域的一些AI研究。

第一是Meta,这也是在国外最大的一个AI数据中心, Meta用DGX SuperPOD搭建的一个平台,支撑Meta研究院里300多人的研究。Meta的研究涵盖各种前沿AI领域,比如会话系统、推荐系统、大语言模型。Meta会在今年会建设成由2000台DGX A100组成的SuperPOD,达到了16000张 A100 GPU的规模。

最早采用SuperPOD做模型加速的是微软,微软和OpenAI做了一个有上万卡的规模,这个集群当时也加速催生了GPT-3模型的诞生。

韩国最大的搜索引擎公司NAVER,用DGX SuperPOD建立了一个AI数据中心,训练一些会话模型用于呼叫中心。由140台DGX SuperPOD组成的集群,相比于原来传统的集群在会话系统基础模型的训练上,可以达到2.7倍的加速效果。

另外,我们也谈了很多AI科学领域,这也是AI和HPC结合比较好的一个方向。佛罗里达大学在这领域深耕了很多年,一直在探索去用AI如何融合到一些跨学科、跨学界的加速。基于DGX SuperPOD,搭建了一个针对医疗领域的模型分析,即利用一些语言模型分析病人的临床数据,在39亿模型参数下,之前的训练大概需要几周时间,现在只需要不到一周的时间就可以完成。相比于之前的训练效率可以达到10倍以上的提升。

另外一个领域是自动驾驶,特斯拉是自动驾驶行业开启比较早的一个家企业,也是用 CV解决自动驾驶问题非常坚实的拥簇者。特斯拉针对感知这块,有四五十个DNN模型,每天都要做训练,基于SuperPOD架构搭建了一个5000多卡的集群,支撑它每天上百位AI科学家,进行几十个模型的训练迭代。

汽车行业比较领先的大陆集团,基于DGX SuperPOD搭建了一个集群,用于AI训练、模拟和虚拟数据的生成。搭建的集群性能名列在Top500里面。

最后,用MLPerf 数据做下总结,在过去一年半的时间里,MLPerf迭代了三个版本:MLPerf 0.7、MLPerf1.0和MLPerf 1.1。在MLPerf 1.1与MLPerf 0.7的性能对比中可以看到,基于一些软件和分布式技术的优化,同样是A100安培架构的GPU,可以看到在同样的任务里面,最快有5.3倍的性能提升;单机性能的对比,可以看到基于软件优化,在同样的A100 GPU里最高也有2倍的性能提升。这表明只要购买了A100 GPU,只需要通过软件升级就可以得到持续加速的效果,这也是英伟达软件栈持续优化带来的好处。

总之,SuperPOD是一个非常高效的架构,它用在大规模的分布式训练里,不管是直接采用NVIDIA DGX SuperPOD,还是采用百度智能云上的SuperPOD,都可以享用SuperPOD架构带来的好处

SuperPOD架构可以帮助在AI领域做快速迭代,开发更智能的AI模型,它是把产品更快上线非常关键的一个环节。不管是在CV、NLP、语音、推荐系统、AI+科学等领域,还是做搜索、CTR、AV感知等各种各样的场景,都可以用SuperPOD架构做加速。如果你想要用SuperPOD架构,上百度智能云,即刻享用SuperPOD带来的好处。