全面剖析新一代高性能AI计算集群中的技术方案和应用

导读:

百度智能云于3月9日对外宣布落地新一代高性能AI计算集群,可提供EFLOPS级算力支持,并发布新一代GPU服务器实例GPU-H5-8NA100-IB01。

3月16日,智东西公开课联合百度智能云、英伟达,策划推出线上分享会,并在B站企业 “百度智能云的朋友们”和“百度智能云”视频 ,以及“智猩猩”视频 上成功进行同步直播。

百度智能云的异构计算产品经理玄凌博、资深研发工程师孙鹏、资深系统工程师武正辉,以及英伟达解决方案架构师程帅四位技术专家参与了本次线上分享会,并围绕新一代高性能AI计算集群中的技术方案和应用进行了深入剖析。

GPU云产品体系介绍和应用场景分享
百度智能云异构计算产品经理玄凌博

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

按照时间维度,企业有四个典型的计算发展阶段:
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协议,对时延有极大的提升。

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

那么如何更有效率的发挥硬件的性能?百度在去年推出了百度百舸·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,它是全球最大的中文单体模型

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

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

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混合并行策略就是将这几种运行策略做了组合。这个是第一种大模型训练方式,即混合并行的模式。

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

在百度内部我们对整个训练的模式做了更细微的观察,以及更量化的计算。如果以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。

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年2月15日
下一篇 2022年2月15日

相关推荐