开发者学堂课程【如何利用飞天AI解决方案帮助升级异构计算的AI架构:升级2:飞天AI训练加速引擎】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/648/detail/10748
升级2:飞天AI训练加速引擎
内容介绍:
一、基于异构计算 AI 应用架构的问题二
二、AIACC-Training 架构
三、AIACC-Training 优势
四、高性能分布式梯度通信优化技术
五、AIACC-Training 性能优化结果
一、基于异构计算 AI 应用架构的问题二
前面解决了环境配置的快速创建问题,在解决这个问题之后,客户遇到的第二个问题就是训练时间过长,有些典型客户训练一个模型需要1周,有的需要一个月时间,就会大大影响客户开发效率。比如调节一个模型的算法,调节参数,可能需要一周甚至一个月的时间才能看到是否正确,如果调节不正确,调节另一个参数可能又要等一周或一个月的时间;第二个问题是 GPU 利用率低,一个普遍的问题是用户对 CPU 的计算能力可以重复发挥出来,但是对 GPU 的能力发挥的还比较低,所以在解决这个问题的时候可能需要做分布式训练。
第二大问题是客户软件较多,四种主流框架的版本就比较多,客户训练的场景也比较多,可能有ALP的场景,有CTL的场景或语音、语言的场景等等。这些框架、场景在 GPU 上没有太多性能优势,导致GPU利用率太低,需要各种场景、配置做针对性优化,这样优化的成本就会很高。
在框架层面又缺乏统一训练框架的引擎,比如Tensorflow有PS模式、Replicated模式,MXNET 有 Kvstore 模式、PS-Lite 模式,PyTorch 有 Gloo 模式、DataParallel 模式,Caffe 有 MPI-Caffe、NVCaffe 模式,在对不同的计算框架的模式做优化之后,另外的模式又可能需要做针对优化,这样需要优化的方向太多,同时不同的模式对统一的调度也是一个非常大的挑战,需要对不同的模式做不同的调度方式。
二、AIACC-Training 架构
所以升级2是飞天AI训练加速引擎,训练加速引擎主要实在框架层面做的,简称为 AIACC,AIACC 的训练加速引擎简称AIACC-Training,它会同时支持 Tensorflow、PyTorch 、MXNET、
Caffe 这四种框架。
下图是这些 AIACC-Training 架构,在框架接口层做了每个框架的接口,对每个框架做了不同的通信 GPU,通信操作层,在 Tensor 层面对每个框架做统一的 Tensor 封装,在 Context 层,对每个框架的 Context 做统一的封装,然后把每个框架的通信层都抽象出来,最终归结到高性能分布式梯度通信库中,所以对四种框架做分布式训练的时候,只需要对一个高性能分布式梯度通信库做一次分布式的优化就可以了。
三、AIACC-Training优势
云端首次统一加速 Tensorflow、PyTorch、MXNET、Caffe 主流开源框架的分布式训练,只需要一份核心优化代码就可以优化四种框架的分布式训练;第二是针对网络、异构加速器都进行了深度的性能优化,第三是结合云端弹性伸缩,可以自动扩展资源,释放资源;第四个好处是开源是兼容的,用户用开源的人工智能框架做代码和模型基本不用修改就可以得到性能加速的好处。
四、高性能分布式梯度通信优化技术
技术分为三个大的方面,通信与计算的重叠,梯步传输是异步梯度传输,所以做计算和梯度通信时,可以重叠起来;
第二大方面的优化是延迟的优化,传输时需要检查每台 GPU 上的梯度是否 ready,原始方法是通过中心节点查看所有梯度,这样延迟开销比较高,所以优化是去中心的调节方式,通过分布式的方式获得每个梯度是否 ready;
第三个优化是带宽优化,是比较重要的方面,主要分为5个小点,
基于拓扑结构的分级通信优化,在 GPU 机器内部的 GPU 通信带宽是非常高的,机器之间的通信带宽是远远低于这个带宽的,所以做无差别的通信优化的话,整个通信的瓶颈会卡在机器之间,所以做分级优化,会现在机器内部的GPU之间做一级通信,GPU 机器之间做二级通信,
第二个优化是混合精度传输梯度,之前传输的是全精,在优化时可以有选择的转化为半精,这样传输数据量直接减少一半;
第三个是多梯度融合通信,在传输一些小梯度的时候发现它对网络带宽的利用率是非常低的,所以把很多小的梯度融合成大的梯度,这样通信对网络带宽的利用率是比较高的;
第四个优化是发现了在网络通信的情况下单流是无法打满带宽的,所以用多流优化,但是多流之间通信速率是有快有慢的,所以会导致负载不均衡,优化是在多流之间做负载均衡,通信快的流会传输更多数据,通信慢的流会传输更少数据,
最后一个优化是做动态调整,在训练开始的阶段做相应优化,下面的图中计算部分是绿色部分,通信是红色部分,红色部分一行代表一个流,开始只有一个流,中间有两个流,最后有四个流。之前的这些流负载是不均衡的,最后四个流的负载是均衡的。
五、AIACC-Training 性能优化结果
最常用的 ImageNet 128万张图片训练 ResNet-50的场景,训练90epoch,配置是8卡 P100,56vcpu , 25Gb VPC 网络在512张 P100上比单卡加速比达到了462倍,并行效率达到90.2%,接近线性的提升,如果单卡 P100训练需要5天,那512张 P100训练只需要16分钟。如果训练调整一个参数,之前可能需要5天的时间知道参数是否正确,现在可能只需要16分钟的时间,这样能大大加速算法研发的速度以及产品生产力的加速。