当前位置: 首页 > 科技观察

阿里公开核心技术:如何摘下4项世界冠军,推理性能比第二名快5倍

时间:2023-03-19 21:09:59 科技观察

阿里公开核心技术:如何拿下4个世界冠军,推理性能比第二名快5倍近日,斯坦福大学DAWNBenchImageNet最新成绩公布。阿里超越谷歌、脸书等,四项榜单位居全球第一。在128卡的V100上,只需要158秒就可以训练ResNet50获得top593%的准确率。在图像分类的10000张图像的验证集中,top5准确率不低于93%,推理性能比第二名快5倍以上。可以说,无论是训练的性能和成本,还是推理的性能和成本,都体现了阿里在异构计算领域拥有世界级AI软硬件一体化的极致性能优化能力。阿里是怎么做到的?四大冠军得主——阿里云异构计算战队分享了其背后的技术秘密。这是什么成就?斯坦福的DAWNBench是一个用于深度学习模型训练和推理性能的端到端基准测试平台。它由斯坦福大学在2017年的NIPS会议上发布,此后得到了业界的广泛支持。Google、Facebook、VMWARE等世界知名企业相继加入。DAWNBench已经成为人工智能领域最具影响力和权威的排行榜之一。对于AI计算来说,最重要的两个指标是性能和成本。最新成绩公布后,从软硬件一体化方面展示了阿里云在训练和推理领域世界级的性能优化能力。阿里云异构计算AI加速团队透露,最重要的武器是阿里云自研飞天AI加速引擎AIACC、阿里云自研芯片含光800(简称AliNPU),以及阿里云异构计算云服务。AIACC是阿里云自主研发的AI加速引擎。业界首个统一加速Tensorflow、PyTorch、MxNet、Caffe、Kaldi等主流AI计算框架的加速引擎。包括训练加速引擎AIACC-Training和推理加速引擎AIACC-Inference。训练加速引擎优化了分布式网络的性能,可以充分发挥分布式网络的通信能力。推理加速引擎针对阿里云异构计算云服务(包括GPU云服务和NPU云服务)进行了针对性的深度优化。性能优化,能够利用异构加速设备的计算能力。以NVidiaGPU为例,TensorRT是目前业界最快的推理引擎,AIACC-Inference的计算性能比TensorRT快1.5到2.5倍。含光800是阿里巴巴首款自研AI芯片,也是全球最强AI推理芯片。主要用于云视觉处理场景。在行业标准ResNet-50测试中,含光800的推理性能达到78563IPS,比业界最好的AI芯片性能提升4倍;能效比为500IPS/W,是第二名的3.3倍,同时AIACC-Inference也能充分利用含光800的超高算力,是阿里云极致性能优化的典范软硬件一体化。阿里云异构计算云服务集成了GPU、FPGA、NPU等异构计算设备,通过云计算服务为客户提供异构计算服务。随着人工智能浪潮的兴起,越来越多的AI计算采用异构计算来实现性能加速。阿里云异构计算服务建立在云上最丰富的加速实例之上。算力提升,为AI计算提供普惠、灵活、易用的加速计算云服务。刷新ResNet50在ImageNet上的训练记录在图像识别领域,最具代表性的场景就是ResNet50在ImageNet上的训练。在新发布的榜单上,AIACC-Training在该场景下的性能和成本均成为全球第一,表明AIACC在分布式训练领域处于国际领先水平,能够帮助用户提升训练性能的同时降低训练成本。所需的计算成本。训练性能榜单新世界纪录,运行在128个V100集群上(16个异构计算云服务实例ecs.gn6e-c12g1.24xlarge),网络通信为32GVPC,训练ResNet50到top5准确率达到93%时间是2分38秒。上届世界纪录使用的集群规模也是128个V100,网络通信是100GInfiniBand网络,是本次打破世界纪录的32GVPC带宽的三倍。异构计算云服务的典型网络配置是带宽为32Gbps的VPC网络。为了更贴近终端用户场景,阿里选择了VPC网络。32GVPC网络与此前世界纪录的网络物理带宽之间的巨大差距,对团队来说是一大挑战。我们从两大方向做了深度优化:第一个方向是优化模型本身,进行超参数的调整和优化器的改进,减少达到93%准确率所需的迭代次数,同时尝试以提高单机性能。第二个方向是分布式性能优化。我们使用团队开发的飞天AI加速引擎AIACC-Training(原Ali-Perseus-Training)作为分布式通信库,充分挖掘32GVPC的所有潜力。最终,两个方向的极致优化叠加,突破了看似不可能达到的性能壁垒,创造了低网络带宽的新世界纪录。同时,由于分布式训练部署本身的复杂性,为了提高效率,方便外部用户复现结果,阿里团队使用之前开发的工具FastGPU进行即时构建,创建集群并调度分布式训练。脚本完成,一键启动,大大加快了优化工作的效率。未来我们会开源基于AIACC的基准测试代码,方便外部用户一键复现结果。分布式训练领域近年来发展迅速,有很多替代方案。对于Tensorflow,框架本身支持PS模式和Ringallreduce式的分布式通信。第三方支持是Horovod。对于ResNet50的分布式训练,Horovod仍然是开源方案中相对最优的方案。因此,阿里以Horovod作为比较基准。分布式训练的逻辑框图如下图所示:最小的计算节点是单张GPU卡,每个计算节点会从总数据集中分出一段数据作为本节点的训练数据,然后开始前向和后向计算,经过后向计算,会得到当前batch产生的梯度。在更新参数之前,需要跨集群进行梯度通信。HorovodAPI在梯度更新之前,在优化器环节插入了一个多节点通信过程。AIACC-TrainingAIACC-Training是阿里云开发的深度学习分布式训练通信引擎。统一支持Tensorflow、PyTorch、MxNet和Caffe,从IaaS层面提供可集成兼容开源的加速库。目前,众多AI和互联网客户已经在大量生产环境中部署使用,显着提升了异构计算产品的性价比,从软件层面为客户提供差异化??的计算服务。架构如下图所示。AIACC-Training作为Dawnbench记录的分布式后端发挥了至关重要的作用。以下是我们对AIACC-Training背后分布式优化的详细分析。去中心化梯度协商的分布式性能关键在于如何优化这个通信链路的效率。对于ResNet50,我们需要通信约170个梯度数据,通信总量约50MB。这些梯度的产生时机取决于它们各自在计算图中的位置,计算图中具有依赖关系的部分梯度决定了这些梯度计算的时间顺序。在计算图中,完全独立的算子在每次计算的时间上具有一定的随机性。多节点通信首先要解决的问题是需要协商梯度的同步顺序。Horovod中使用的方法是以0号节点为中心,与所有其他节点进行点对点通信,确定所有节点上当前准备好的梯度,然后在0号节点上确定如何就这些准备好的梯度进行通信,最后将通信策略点对点发送给各个节点,然后根据通信策略开始多机通信。这种点对点的协商策略为128个节点下的节点0创建了一个本地热点,需要256次通信。AIACC-Training放弃了这种中心节点协商模式,而是采用去中心化的方式在128个节点之间进行协商,因为128个节点实际上分布在16个实例中,我们的优化很容易识别出这种拓扑结构不再在任何一个节点上产生256个通信热点显卡。考虑到大多数时候有不止一个梯度就绪,这种优化也可以同时协商多个梯度,因此协商的实际通信量减少了大约一个数量级。Fine-grainedgradientfusion梯度协商后,所有节点都知道当前时刻可以通信的梯度。我们面临的下一个优化问题是,我们需要在收集到任意数量的梯度后立即传达所有梯度。或者选择更优化的组合进行交流。这里一个确定性的结论是,单一梯度的单次通信的通信效率总是很低的。我们需要对多个梯度进行融合,融合之后再在更大的粒度上进行通信。AIACC-Training引入了一种细粒度的融合策略。我们会动态分析通信链路中当前的通信情况,选择更加平衡的融合策略,避免差异过大。这将使每次通信的粒度尽可能统一,减少出现较大波动的可能性。因为这个融合策略对于不同的网络模型有不同的最优值,我们实现了自动优化的功能,会动态调整这个参数来找到最优的融合粒度。异步多流通信的底层通信库仍然使用NCCL在GPU之间进行数据通信。NCCL的编程模型只支持单通信流进行通信,但是单通信流的效率很低,单流的转发能力往往限制在Reach10Gbps左右。AIACC-Training支持来自更高通信引擎级别的多个流,并将分配多个通信流用于梯度通信。每个流服务于一定的融合梯度被分割,后续分割的融合粒度不依赖于当前分割的融合梯度。因此,即使多个流之间的通信完全异步,即使多个流之间的速度不平衡,也不会严重影响整体效率。当规模扩大时,可以更好地保持最佳的网络带宽利用率。.与融合粒度一样,拆分流的数量也与训练模型和当前实际网络带宽有很强的相关性,因此无法离线给出最优设置。我们设计了自动调优机制,在自动调优链路中加入通信流的数量,结合粒度和分流数量,自动调优最佳参数组合。模型优化算法层面的优化主要分为四个方面:数据、模型、超参数和优化器。在数据上,我们使用多分辨率图像渐进式训练。该方法不仅可以大大提高前期使用小分辨率图像的前向和反向计算速度,而且可以减弱训练和推理过程中使用不同尺寸所带来的精度损失。在模型方面,我们吸收了最近一些网络变体的优点,并根据最新研究对BatchNorm进行了微调。我们在超参数方面做了很多探索。比如在learningratedecay的方式上,我们没有采用现在流行的stepdecay或者cosinedecay,而是采用了更直接的lineardecay。此外,我们还发现预热步骤的数量非常重要。在优化器上,我们重新设计了优化器方案,同时吸收了SGD的泛化优势和自适应优化器的快速收敛性,使得改进后的优化器训练更快更准确。基于以上优化工作,我们完成了28个epoch1159次迭代的训练,达到了top593%的精度要求,而原来的训练需要90个epoch才能达到相同的精度。性能结果综合以上所有性能优化,我们在128卡V100上用时158秒达到top593%的准确率,创造了新的世界纪录。刷新推理成绩记录:比第二名快5倍以上推理项目DawnBench比赛要求推理框架在ImageNet中10000张图片的验证集上对图片进行分类,分类模型top5准确率不低于超过93%。在batchsize=1的配置下,计算每张图片的平均推理时间和平均推理成本。在此前的性能记录中,平均推理时间不到1ms,远超人类视觉的反应速度。在最新榜单中,我们获得了基于异构计算AliNPU云服务实例(ecs.ebman1.26xlarge)的推理性能项目第一名,比第二名快5倍以上。同时,此前提交的推理成本第一名(基于异构计算GPU云服务实例ecs.gn6i-c8g1.2xlarge)的分数至今未被超越,因此在性能和成本上均排名第一。在AIACC-Inference服务客户不断冲击DawnBench第一的过程中,我们也在不断打磨异构计算服务场景的推理优化技术,根据客户的实际需求开发了AIACC-Inference模型加速引擎,帮助客户解决TensorFlow、PyTorch、MXNet、Kaldi等主流AI框架下的模型优化问题。优化方法包括分析模型的计算图,合并其中的计算节点,减少模型中的计算节点数量,提高计算图的执行效率。同时提供FP32、FP16和Int8精度模型优化选项,可以生成各种精度下的优化模型。其中,FP16和Int8精度模型可以使用NVIDIAVolta和Turing架构下的Tensor核心硬件支持,进一步提升模型推理在V100、T4GPU卡上的性能。目前AIACC-Inference不仅支持常用的图像分类和目标检测模型,还支持Bert、StyleGAN等NLP模型和GAN网络模型。此外,我们对1x1、3x3、7x7卷积核进行了深度优化,并在AIACC-Inference中加入了全新的opfusion机制,相比业界最快的TensorRT可实现1.5-2.5倍的性能提升。模型和框架优化在上次提交的版本中,我们用更精简的ResNet26d替换了基础模型,引领了一波潮流。这一次,为了进一步提高模型的精度和简化模型,我们对超参数进行了调整,引入了更多的数据增强方法。通过使用AugMix和JSDloss叠加RandAugment的组合,ResNet26d模型的准确率提升到93.3%,获得了0.13+%的准确率增益。我们在含光800(AliNPU)优化的基础上,根据AliNPU的架构特点,对推理引擎进行了优化。由于AliNPU使用uint8作为上传下载数据的存储格式。因此需要在进入引擎前后插入量化和反量化操作来恢复数据。但是AliNPU在CPU上无法加速Quant和Dequant运算,占用了很大一部分推理时间。通过在预处理和后处理中执行这些操作,可以将推理延迟降低到0.117毫秒的水平。考虑到我们使用的推理模型比较小,根据GPU4GB/s的经验带宽,上传147KB的数据到AliNPU输入一张图片需要0.03ms。因此,我们在框架中引入预加载机制,将数据预取到AliNPU中,进一步将平均推理延迟降低至0.0739ms。