AI算力加速之道

1. AI算力发展趋势

1.1 人工智能理论:深度学习

人工智能发展至今并非一帆风顺, 从起步阶段到现今的深度学习阶段,数据、算法和算力构成了人工智能三大基本要素,共同推动人工智能向更高层次的感知、认知发展。

avatar

1.2 第三次人工智能浪潮代表人物

如前所述,当前人工智能繁荣离不开数据、算法和算力的共同发展,在算法层面,深度学习三巨头Geoffrey Hinton、Yann LeCun和Yoshua Bengio对AI领域的贡献无人不知、无人不晓,他们围绕神经网络重塑了AI;

数据层面,2007年李飞飞创建了世界上最大的图像识别数据库ImageNet,使人们认识到了数据对深度学习的重要性,也正是因为通过ImageNet识别大赛,才诞生了AlexNet, VggNet, GoogleNet, ResNet等经典的深度学习算法。

前几次人工智能繁荣后又陷入低谷,一个核心的原因就是算力难以支撑复杂的算法,而简单的算法效果又不佳。黄仁勋创办的NVIDIA公司推出的GPU,很好的缓解了深度学习算法的训练瓶颈,释放了人工智能的全新潜力。

avatar

1.3 计算力就是生产力

在智慧时代,计算力就是生产力。什么是生产力,就是人类改造自然的能力,就是创造价值的能力。在这个表中,我们有一个很有趣的发现。

在10年前,全球市值最高的企业大部分是能源公司、金融企业,市值靠前的IT公司仅仅微软一家,那时候windows如日中天,office独步天下,属于个人PC时代。

到了当前,全球最值钱的公司几乎清一色的信息技术与服务公司,有趣的地方还不在这里,这前几名的公司正好也是全球采购服务器最多公司,仅亚马逊一家,2017年便采购了全球13%的云服务器。是海量的计算能力在为这些公司创造价值。

对于企业是这样子,对于国家也是如此。计算力之于智慧时代就像是电力之于电气时代,都是生产力的重要形式。

那么,我们便可以通过计算力的情况,来分析一个国家的经济发展情况,就如同克强指数里面的电力能够衡量一个行业的发展情况类似。据统计,国家GDP的数字与服务器的出货量,GDP与服务器采购额呈现出明显的正线性相关关系。

美国、中两国不仅GDP远远领先于日本和德国,每万亿GDP的服务器数量也远远高于他们,数字经济的贡献占比明显高于他们。

我们国内各个省得情况,与此完全类似,北、上、广、浙每万亿GDP的服务器出货量远大于其他省区,因此他们新旧动能转换的就快,发展质量就跑在了前面。所以我们可以说计算力已经成为衡量社会和经济发展水平的重要指标。

面对指数级增长的计算需求,计算技术、产品与产业也面临着新的挑战。具体来说,体现在以下三个方面,一个是多元化的挑战,也就是计算场景的复杂、计算架构的多元;一个是巨量化的挑战,也就是由巨量模型、巨量数据、巨量算力及巨量应用引发的对现有计算机体系结构的挑战;

最后一个则是生态化的挑战,简单来说现在的智算处于群雄并起阶段,自成体系、生态离散,同时产业链上下游脱节。

第一个挑战是多元化。

我们讲计算最关键的任务就是支撑业务,那么不同的业务类型,势必要求有不同的计算系统来完成。例如针对传统的地震波模拟等科学计算,数值精度要求高,需要能到64位;而AI训练,则可以使用数值范围大、精度低的16位浮点类型;对于AI推理,由于推理要求速度、耗能少,则可以在更低的数值精度下进行处理,如4位、甚至2位、1位整数类型。

也就是说AI的应用引入了新计算类型,从推理到训练,跨度更大,同时,数据量也从GB级到TB级、PB级不断提升,类型从结构化到半结构化、非结构化更加复杂多样。

不同数值精度的计算类型对于计算芯片指令集、架构的要求是不一样的,这样就导致之前我们一直使用的通用CPU芯片已经无法满足这种多元化计算场景要求了,这也是计算芯片的种类越来越多的很重要的原因。

第二个挑战是巨量化。巨量化首先表现在模型参数多、训练数据量大。
以自然语言处理为例,基于自监督学习的预训练模型兴起后,模型精度随着模型尺寸及训练数据的增加而显著提升。

20年GPT-3模型的参数量首次突破千亿大关,达到了1750亿。按照当前的发展趋势,23年模型的参数量将突破百万亿,也就是基本达到人脑神经突触数量,人脑的神经突触数量约125万亿。

巨量模型需要巨量内存。当前一颗GPU的板载高速内存容量为40GB,对于包含百万亿参数的巨量模型,仅是将这些参数平均分配到每个GPU内存中,就需要1万块GPU才能装得下。

考虑到训练中需要额外的存储,实际上至少需要2万块GPU才能启动训练。现有AI芯片的架构已经不足以支撑巨量模型的参数存储需求。

同时,巨量模型依赖海量数据的喂养,目前的AI算法本质上还是一种依赖量变的质变,很难从一种质变跳跃到另一种质变,例如最新的巨量模型需要万亿级的词量数据。海量数据需要海量存储。在超大规模集群中同时满足几万块AI芯片的高性能读取,对存储系统是个极大的挑战。

巨量化的第二个表现是计算力需求指数增长

深度学习自2011年兴起至今,对算力的需求始终呈指数增长。每隔3.4个月,算力需求翻一倍。Petaflops*day代表以1P每秒的算力计算一天所用浮点计算量来度量算力。训练巨量模型需要巨大算力:20年GPT-3的算力达到了3640PD,到23年巨量模型的算力需求将达到百万PD。

在当今世界最快的超算系统上,完成百万PD的计算所需时间约为2年。不同领域需要不同类型的巨量模型:GPT-3以处理英文理解任务为主,为了满足不同语言,不同场景的精度要求,也要训练不同的巨量模型,这进一步加剧了对算力的需求。

如此庞大的算力需求给计算技术和产品带来了巨大挑战。解决这样的挑战需要从体系结构、系统软件等各个领域开展创新。

最后我们来看一下智算面临的生态化的挑战,AI的技术链条、产业链条是脱节的。我想很多人会有这样的疑问,人工智能那么好,但是这东西怎么跟我的业务,跟我的客户应用场景结合起来呢,我想用AI技术做智能化转型,但是发现我这里没人懂算法,懂模型,也缺少好用的AI开发平台。同时,那么多算法,模型,如何找到不同算法在应用中的最优组合。

懂这些的人,往往都集中在科研机构或者头部公司。这些地方集中了最优秀的AI人才,但缺少对传统行业的需求场景、业务规律的深入理解,也拿不到最关键的业务数据去对模型进行训练,导致技术无用武之地。

埃森哲等咨询机构的调查报告也表明,70%以上的有技术的研究机构、科技公司缺需求场景、缺领域知识和数据,70%以上的行业用户缺技术人才、缺AI平台和实践能力。

2 AI加速技术介绍

2.1 AI架构

avatar

通常用户对接触到的AI架构相关的信息是申请XX核CPU, XX张CPU卡,XXGB内存等资源,其对应AI架构的计算资源、存储资源和网络资源,实际的AI架构包括计算节点、管理节点、存储节点、计算网络、管理网络和客户端等。

如何进行计算资源的规划呢?秉持的原则是花最低的成本满足需求,同时考虑到扩展性,比如有两种以上计算特征的业务,而且规模都不小,那么对应的计算节点类型也应有两种以上;如果极限需求规模远大于其它需求,那么可以减少计算节点类型数量,以便将来不断扩展。

2.2 AI加速技术

AI对计算的需求非常大,如何加速直接关系到生产效率和成本,下面介绍一下当前最新的一些AI加速技术。

2.2.1 计算

(1)异构计算

在GPU用于AI计算前,都是CPU承担计算任务,但是随着AI计算需求的急剧增加,CPU的计算效率难以满足需求,产生了“CPU+GPU”的异构计算架构,如下图右上角所示。

如下图右下角所示,GPU的计算效率是CPU的几倍~几十倍,为什么CPU和GPU的计算效率会有这么大的差异呢?主要是CPU和GPU的架构存在巨大差异,如下图左下角所示,GPU的计算单元数量远远多于CPU的计算单元,所以GPU更适合于大规模并行计算。

而CPU架构中Control和Cache单元面积则比GPU大得多,所以CPU更适用于不能高度并行的复杂计算(比如代码中的if语句等)。

avatar

(2)NVLINK通信

随着AI计算规模增大,例如大规模AI训练,需要多卡甚至多个节点同时参与一个任务的计算,其中一个关键点就是如何支持节点内GPU间的高速通信,以便他们可以作为一个巨大的加速器相互协作。

虽然PCIe非常标准,但是带宽非常有限,如下图左上角所示,PCIe Gen3的理论带宽是32GB/s,PCIe Gen4的理论带宽是64GB/s,而实测带宽大概分别是24GB/s和48GB/s。

在AI训练中,没完成一轮计算,都要同步更新一次参数,也就是权系数,模型规模越大,参数规模一般也会更大,这样GPU之间通信(P2P)能力对计算效率影响就比较大,如下图右上角所示,同样是8卡V100, NVLINK2.0架构相比PCIe架构性能提升26%,NVLINK2.0 Next架构(全互联,任意两张卡间P2P通信带宽都是300GB/s)则相比PCIe架构提升67%。

NVLINK是NVIDIA开发的一项高速GPU互联技术,现在已经发展到第三代(NVLINK3.0),如下图下半部分,从NVLINK1.0(P100)到NVLINK2.0(V100),再到NVLINK3.0(A100),带宽从160GB/s到300GB/s,再到600GB/s,NVLINK1.0和2.0的P2P通信不是全互联,也就是,任意两张GPU卡之间的通信带宽实际没有达到最大带宽,有的甚至还通过PCIe通信,这样节点内GPU P2P通信就产生了台阶。

而NVLINK3.0则实现了P2P全互联通信,任意两张卡之间的通信带宽是600GB/s,极大的提升了节点内多卡计算效率。
avatar

(3)Tensor Core
V100的张量核心是可编程的矩阵乘法和累加单元,可以提供多达125 Tensor TFLOPS的训练和推理应用。V100包含640个Tensor Cores。每个张量核提供一个4x4x4矩阵处理数组,它执行操作D=a*B+C,其中a、B、C和D是4×4矩阵,如下图上部所示。矩阵乘法输入A和B是FP16矩阵,而累积矩阵C和D可以是FP16或FP32矩阵。

每个 Tensor 核心每个时钟周期可执行 64 次浮点混合乘加 (FMA) 运算。从而为训练和推理应用程序提供高达 125 TFLOPS 的计算性能。这意味着开发人员可以使用混合精度(FP16 计算使用 FP32 累加)执行深度学习训练,从而实现比上一代产品快 3 倍的性能,并可收敛至网络预期准确度。

Tensor内核提供的GEMM性能是以前硬件的几倍,如下图右下角所示,GP100(Pascal)和GV100(Volta)硬件的比较性能。

avatar

(4)多元算力
随着AI的发展,产生了各类芯片,比如CPU、GPU、ASIC、FPGA,如下图上部所示,从通用性和性能两个维度去分析比较,通用性维度:CPU > GPU > FPGA > ASIC,性能维度则是正好相反。不同的AI任务,对芯片的要求不同,比如训练任务,需要能支持各类框架、模型、算法库等,需要很高的通用性,NVIDIA GPU因为其完备的生态,具有很高的通用性,从而占据主导地位。

而对于推理任务,则仅需支持某一或某几个框架、模型、算法库等,因为靠近业务,所以对性能和成本的需求更多,于是ASIC芯片则在部分场景的性价比超过NVIDIA GPU,从下图下半所示的IDC统计的各类芯片市场销量可以看出来,在推理市场,NVIDIA GPU虽然仍然占据主导,但是其它芯片的依然能跟上NVIDIA GPU的步伐,训练市场,其它芯片依然进展缓慢。

avatar

(5)低精度
如果能将32位的浮点数压缩到16位,虽然会损失一定的表示精度,但无论在参数的存储空间上还是在计算量(FPU计算次数)上都会带来极大的改进。

这就是混合精度训练的基本原理。权重的主版本是以FP32形式存储的,在做推理与反向传播运算时先换成FP16在做计算,在做权重更新时,更新的增量(梯度乘以学习率)也是加到以FP32表示的权重上的,如下图上部所示。

如下图所示,在某些场景,低精度不仅带来性能的提,还可以在推理任务重用来处理更复杂的模型,从而提高推理任务的精度。
avatar

2.2.2 网络

(1)GDR
GDR(GPU Direct RDMA),就是计算机1的GPU可以直接访问计算机2的GPU内存,如下图上半部所以。了解GDR概念之前,首先了解DMA和RDMA概念。

DMA(Direct Memory Access)直接内存访问,是Offload CPU负载的一项重要技术。DMA的引入,使得原来设备内存与系统内存的数据交换必须要CPU参与,变为交给DMA控制来进行数据传输,是一种完全由硬件执行I/O交换的工作方式。
RDMA可以简单理解为利用相关的硬件和网络技术,服务器1的网卡可以直接读写服务器2的内存,最终达到高带宽、低延迟和低资源利用率的效果。

目前RDMA的实现方式主要分为InfiniBand和Ethernet两种传输网络。而在以太网上,又可以根据与以太网融合的协议栈的差异分为IWARP和RoCE(包括RoCEv1和RoCEv2)。

所谓GPUDirect RDMA,就是计算机1的GPU可以直接访问计算机2的GPU内存。而在没有这项技术之前,GPU需要先将数据从GPU内存搬移到系统内存,然后再利用RDMA传输到计算机2,计算机2的GPU还要做一次数据从系统内存到GPU内存的搬移动作。

GPUDirect RDMA技术使得进一步减少了GPU通信的数据复制次数,通信延迟进一步降低。

avatar

(2)SHARP
SHARP(Scalable Hierarchical Aggregation and Reduction Protocol)是一种集合通信网络卸载技术。

在AI训练中,常常有很多集合类通信,这些集合类通信由于涉及全局,常常对应用程序并行效率产生巨大的影响。

针对这种情况,NVIDIA Mellanox从EDR InfiniBand交换机开始引入了SHARP技术,在交换机芯片中集成了计算引擎单元,可以支持16位、32位及64位定点计算或浮点计算,可以支持求和,求最小值,求最大值,求与,求或及异或等计算,可以支持Barrier、Reduce、All-Reduce等操作。

在多交换机组成的机群环境下,Mellanox定义了一整套的可扩展分层次聚合和归约协议(SHARP)卸载机制,由聚合管理器(Aggregation Manager)在物理拓扑中构造一个逻辑的SHARP树,由SHARP树中的多个交换机并行分布式处理集合类通信操作。

当主机需要进行全局通信例如allreduce时,所有主机把通信数据提交到各自连接的交换机,第一级交换机收到数据后,会使用内置的引擎对数据进行计算和处理,然后把结果数据提交到SHARP树的上一级交换机,上一级交换机也使用自己的引擎对从若干个交换机收上来结果数据做聚合处理,并继续向SHARP树的上一级递交。

到达SHARP树的根交换机后,根交换机做最后计算并把结果回发给所有的主机节点。通过SHARP方式,可以大幅降低集合通信的延迟,减少网络拥塞,并提升机群系统的可扩展性(如下图上半部所示)。
SHARP对于复杂模型,复杂多层网络效果更加显著,如下图下半部所示,随着集群规模的增大,开启SHARP功能后,延迟基本没变化,相比未启用SHARP功能,延迟呈线性增长;同样对于最终的性能提升也是差异比较大。
avatar

(3)IB(INFINIBAND)
InfiniBand Architecture是为大规模数据中心设计的软件定义网络架构,它的设计旨在实现最高效的数据中心互连基础设施。InfiniBand原生地支持SDN、Overlay和虚拟化等网络技术,是一种开放标准的高带宽、低时延、高可靠的网络互连。相比RoCE网络,IB有诸多优势,如下图上半部分。

当然关于AI训练网络是选用IB还是RoCE,在近期的套餐升级方案中争论的比较激烈,NVIDIA是主推IB的,他们的论据是除了列出各种功能优势外,还有近两年互联网企业,如阿里、百度、京东、腾讯等部署的AI集群大都采用IB网络,然而也拿不出非常让人信服的量化数据,从阿里的维度看,由于有一支专门的RoCE网络优化团队,所以获得了近似IB的性能,同时NVIDIA所列的SHARP等Benchmark性能在实际用户中仅取得3%-5%左右的性能提升(现在估计是在大模型、三层及以上网络架构效果显著些)。

总的来说,目前阶段的结论是IB是优于RoCE,IB把优化工作做到生态(NCCL/CUDA/…)中,对用户来说,优化工作量非常小,但是对于RoCE,需要有专门的团队,较深的优化积累,相比较而言,当前选择IB更适合,当然成本有所提升,但如下图下半部分,带来的性能提升量更大。

当然,在云化的大背景下,除了以太,又多了一套网络架构,对于整体运维和管理带来复杂度提升,所以,IB&RoCE之争不妨可以再深入分析,列举更多的量化数据,做更多的原理性分析,从而达到对网络的深度认知。

avatar

(4)多网卡
前面讲到NVLINK3.0的通信带宽为600GB/s,PCIe4.0的实测通信带宽也达到了48GB/s,而当前的计算网络通常最大是100Gb/s(12.5GB/s),所以对于需要跨节点多机多卡计算的大模型训练任务时,节点间参数通信就会遇到瓶颈,这时有必要采用多网卡策略,也就是两个节点间不再是连接1根网线,而是多根,从下图可以看出多网卡对于性能的提升量明显,由于网络成本占整个计算系统成本一般为10%左右,所以10%以上的性能提升对于整个计算系统来说,性价比是提升的。
avatar

2.2.3 存储

(1)GDS
GDS(GPUDirect Storage),是NVIDIA推出的又一GPUDirect技术,由于GPU计算速度很快,但是随着数据集和模型规模不断增加,应用程序载入数据花费的时间越来越长,进而影响了应用程序的性能,而且特别是端到端架构,会因为缓慢的I/O使得运算速度日益提升的GPU无用武之地。

数据从NVMe磁盘传输到GPU內存的标准路径,是使用系统內存中的回弹缓存(Bounce Buffer)也就是额外的数据拷贝。而GPUDirect存储技术避免使用回弹缓存,以减少额外的数据副本,并使用直接內存存取引擎(Direct Memory Access,DMA)将数据直接放到GPU內存中,为远端或是本地存储。

诸如NVMe或NVMe over Fabric,和GPU內存之间,建立一个直接传输数据的路径,而这能有效减轻CPU I/O的瓶颈,提升I/O带宽和传输数据的量。

英伟达发展GPUDirect存储技术,大幅提升GPU载入大型数据集的速度。英伟达提到,GPUDirect存储技术的主要功能,就是通过这个新的系统,以直接內存的存取方式,将数据传输至GPU内存上。

当然,发展到现在GDR落地场景还不是很多,首先是文件系统需要做适配,只有通过NVIDIA认证了才能支持GDR技术,限制了技术的推广;其次,GDR主要还是单机内的技术,而且NVME主要是用来承载内存空间不足,统一存储带宽又偏低的一个中间状态需求,适用的场景较窄,所以业内适配的积极性也不高,但不管怎么说,GDR也为AI架构又提供了一种加速选择。

avatar

(2)Burst Buffer
Burst Buffer技术能够利用计算节点本地SSD硬盘,组成临时高速缓存文件系统。该功能可以通过更快的checkpoint restart提高应用程序可靠性;加快小块传输和分析的I/O性能;为核心外部应用程序提供快速临时存储空间;为需要计算过程中持久快速存储的大量文件输入计算任务创建暂存区域。

之前在HPC架构中采用较多,比如世界HPC TOP500榜单排名前10的超算集群,有多套已采用Burst Buffer技术,在AI架构中,现在也有用户在尝试采用类似技术,为大规模训练提供超大高速缓存。

avatar

2.2.4 并行技术
AI大规模训练中,非常重要的一项技术就是并行技术。在多个计算设备上部署深度学习模型是训练大规模复杂模型的一种方式,随着对训练速度和训练频率的要求越来越高,该方法的重要性不断增长。

数据并行化(Data parallelism,DP)是应用最为广泛的并行策略,但当一张GPU的显存不能放下一个模型时,需要堆模型进行拆分, 将模型分为N个部分,分别加载到不同的N个GPU节点中,模型拆分按照拆分方式不同,又分为张量切片模型并行(层内模型并行)、Pipeline模型并行(层间模型并行)。

如DeepSpeed模型,GPT-3模型等则需要采用多种并行方式组合,才能完整装下整个模型。

而对于GPT-3模型来说,其对计算和I/O的需求都非常大,需要综合前面讲到的主要的加速技术,比如NVLINK,Tensor Core、IB、多网卡、GDR、并行方式等,才能高效的完成大模型训练。
avatar

2.3总结

前面讲到了各种AI加速技术,其实汇总起来无外乎都是在朝着两个方向努力:计算和I/O,采用异构计算是为了提升计算能力,采用NVLINK、IB、GDR、GDS、BurstBuffer、多网卡等都是为了提升IO带宽和延迟。

因为从GPU 缓存(7TB/s)到显存(1.6TB/s)、CPU内存(90GB/s)、高速缓存(24GB/s)、NVME硬盘(6GB/s)、分布式存储(5GB/s,规模大可到几十上百GB/s)、 冷存货(2GB/s),IO带宽存在台阶,所以AI架构IO加速的方向是在逐步弥补台阶的差异,当然算法上还需要尽可能的利用架构的特点,最大化的利用最快的IO架构。

avatar

3 GPT-3模型预训练计算架构分析

下面以GPT-3模型预训练为例,进行简单的架构分析。

3.1 GPT-3模型计算特征分析

在进行AI架构方案设计时,首先要弄清楚GPT-3的计算特征,也就是什么样的计算和I/O满足GPT-3模型预训练的极限需求。

一般是通过理论分析和实际测试两个维度分析,通过分析,可以获知,GPT-3的I/O需要接近100GB/s,对应的网络需要4*HDR 200网络支持,也就是需要4网卡,这次采用的是Infiniband网络。

avatar

其次是计算需求,以A100的算力312TFlops来评估:GPT-2的计算需求约为 10 PetaFlop/s-day, 约等于64个A100 GPU训练1天时间;GPT-3的计算需求约为3640 PetaFlop/s-day, 约等于64个A100 GPU训练1年时间。下表是近期业内发布的几个大模型使用的训练计算资源情况。

avatar

3.2 GPT-3模型预训练计算架构分析

如前一节分析,AI计算架构的计算部分采用最新的A100 GPU卡,I/O部分采用4*HDR200 IB网络,GPU之间采用NVLINK实现600GB/s高速互联。

avatar

NVLINK A100 服务器拓扑

下图是对应的网络拓扑:

avatar

大模型训练平台架构(140节点)

4 结语

AI算力是人工智能三要素的重要组成部分,AI加速技术围绕计算和I/O正在飞速的发展,不断提升AI计算任务的计算效率,我们加强对于AI架构的理解。

当然AI加速除了配置相应的硬件架构,还需要平台、框架、算法等相关技术人员一起合作,才能最大化的利用当前最新的AI架构。

原文地址:https://segmentfault.com/a/1190000041485197###