来源 | AI前线
3月21日,2019阿里云峰会在北京举办,阿里巴巴发布了机器学习平台PAI 3.0。距离PAI 2.0发布已过去两年,阿里巴巴花费了长时间打磨新版本PAI。PAI 3.0上线全新算法模型市场,覆盖电商、社交、、金融等多个行业,数十种场景的算法模型;流式算法组件、图神经网络、强化学习组件等全新平台具。作为机器学习平台的核心,PAI的智能计算引擎也全面升级,通过编译技术优化通用计算引擎,训练性能提升400%;分布式引擎针对深度学习进行优化独家解读!阿里巴巴发布机器学习平台PAI 3.0,单任务支持数千个worker并发训练,支持5k+超大规模异构计算集群; 发布大规模图神经网络,缓存机制效率提升40%,算子速度提升12倍,系统侧建图时间从几个小时缩短到5分钟。为了帮助大家更好地理解PAI 3.0的新特性和技术构建,InfoQ独家邀请了阿里云智能计算平台事业部研究员林炜,为大家讲解PAI背后的核心技术。
阿里巴巴机器学习平台PAI 3.0
PAI原本是定位服务于阿里巴巴集团的机器学习平台,致力于让AI技术对于内部开发者来说更加高效、简单、标准。为此,PAI平台不仅提供了基于ParameterServer的支持百亿特征、千亿训练样本的超大规模经典算法,还提供了兼容Caffe、PyTorch、基于大规模GPU集群深度优化的TensorFlow深度学习引擎。此外,PAI平台还开放了经过阿里巴巴技术团队深度优化的PAI-TensorFlow版本,无论是训练性能还是分布式加速比都相较开源版本有大幅提升。在此基础上,PAI打造出了从数据处理、算法开发、模型训练、模型自动调优,到模型在线/离线推理的一站式AI研发平台。 在经过阿里巴巴内部大量算法程师和复杂现实业务的检验后,PAI于2015年通过阿里云正式对外提供服务,并于2017年3月推出2.0版本。两年后,全新的3.0版本终于发布。
PAI 3.0 新功能概述
PAI 3.0计算性能优化概述
1.封装并可视化大量经典算法
对于大部分用户来说,机器学习的真正门槛来自于对底层算法原理和复杂计算机实现的理解。为了解决这些问题,PAI平台封装了超过200种经典算法,让用户通过拖拽的方式就能构建机器学习实验。
图为PAI可视化建模界面
所有算法都经过阿里集团众多业务和EP级数据的锤炼,根据算法的不同特点采用MapReduce、MPI、ParameterSever、Flink等不同框架来实现。
2.神经网络可视化:FastNerualNetwork
深度学习是机器学习领域最火爆的技术,但深度学习中神经网络的构建对于大部分初学者来说还是比较陌生的。为了降低深度学习的门槛,PAI团队在Notebook中开发了FastNerualNetwork插件网络学习平台,利用该插件可以将原本黑箱般的深度学习网络构建成可视化的过程。
图为PAI笔记本建模界面
FastNerualNetwork通过提取Pooling、Embedding、Convolutional等层的代码级原子结构,实现深度学习网络的模块化、组件化,从而实现深度学习网络的可视化和可修改性。算法程师在基于PAI开发深度学习网络时,可以充分可视化和调整网络结构,并支持网络结构与代码之间的转换。该功能即将开放邀请测试。
3. AutoML 降低模型调整成本
如何为算法寻找最优的超参数组合,一直是困扰算法程师的难题。调参不仅考验算法程师对算法推导的认知,也带来大量人试错作,效率非常低下。AutoML技术以智能化的方式降低了设置机器学习实验的复杂度,并通过自研进化调参等方式将用户从调参作中解放出来,实现模型参数自动探索、效果自动评估、模型自动向下传递,实现模型优化全链条零干预,大大降低机器学习门槛,节省计算成本。
PAI-AutoML自动调参引擎不仅包含了基于Parallel Search思想的Grid search和Random search两种传统调参模式,还包含了PAI团队独创的基于Population Based Training理论的Evolutionary Optimizer调参模式,这种调参方式可以逐步帮助用户以最低的成本探索出最优的参数组合。
同时,进化优化器在调参过程中保留所有参数的表现以供追溯,并将调参模式与训练过程相衔接,实现自动参数选择、自动训练、自动评估、自动部署全链路的自动化。
4.一站式机器学习服务
PAI平台提供三套服务:PAI-STUDIO(可视化建模与分布式训练)、PAI-DSW(笔记本交互式AI研发)、PAI-EAS(在线预测服务),各服务既可以独立使用,也可以相互衔接,从数据上传、数据预处理、特征程、模型训练、模型评估,到最终模型发布到离线或在线环境,用户可以一站式完成建模。
在数据预处理方面,PAI与阿里云DataWorks(一站式大数据智能云研发平台)无缝对接,支持SQL、UDF、UDAF、MR等多种数据处理开发方式。在PAI平台上训练模型,生成的模型可以通过EAS部署到线上环境。整个实验流程支持周期性调度,可以发布到DataWorks与其他上下游任务节点建立依赖关系。另外,调度任务区分生产环境和开发环境,可以实现数据安全隔离。
PAI 3.0计算性能优化详解
ML-as-Service 作为一种新型的云服务,有一个与其他服务非常不同的特点——计算量非常大。这个计算量大与传统的大数据非常不同。传统的大数据需要处理大量的数据,但对于每一份数据的计算本身并不密集。比如一个经典的大数据问题:统计某个搜索引擎的日访问量和每个关键词的点击率,实际计算就是计数和标量乘法,这里的“大”体现在数据规模上。然而机器学习,尤其是现在的深度学习,对每一份数据可能需要计算多次,而每次计算都涉及到复杂的数值计算,比如矩阵乘法、卷积等。这就必然会引入其他专门的硬件进行加速,比如 GPU、TPU、FPGA 等。
目前机器学习的计算量巨大,相应的加速硬件导致了计算成本高昂,因此用户对机器学习平台的计算效率会有更高的要求英语培训,以降低成本,加速实验迭代。作为平台级产品,PAI从诞生之初就专注于研究和打磨高性能大规模分布式机器学习框架,包括单机性能挖掘、分布式优化、在线推理、集群资源复用等核心能力。
PAI-TAO:深度学习编译优化,加速训练
针对深度学习模型描述灵活、计算复杂度高的特点,PAI团队研发了深度学习编译器TAO(Tensor Accelerator and Optimizer),以通用化、平台化的方式解决上层作负载与底层硬件计算单元高效映射的问题。
在设计理念上,TAO 引入了基于硬件单元片上存储转移的大规模算子融合技术(详见论文),有效解决了复杂计算图融合变换的技术难点,尤其针对包含复杂后向计算图的训练作业,可以大幅降低深度学习模型执行中的冗余开销。通过大规模计算图融合技术,可以显著降低硬件访存开销以及硬件和框架层面的调度执行开销,并引入更广阔的全局优化空间。
在框架层面,TAO引入了精妙的反馈控制机制,促进大规模算子融合的同时避免陷入局部最优的限制。基于大规模算子融合,通过在线代码生成技术,TAO将传统解释执行型深度学习引擎无缝在线转换为编译执行模式,进一步在框架层面降低执行负担,在保证用户建模体验不变的情况下,获得更优的性能体验。
基于TAO的通用优化技术,在经典的图像CNN模型、NLP RNN/Transformer模型、以及近期火爆的BERT模型、语义相关性DSSM模型上都取得了1.3倍~4倍左右的显著性能优化效果,详细对比见下面两张图。
PAI-TAO基于P100 GPU,通过深度学习编译优化:列1:某行业语音识别模型训练性能提升40%;列2:某行业文本生成模型训练性能提升51%。
PAI-TAO基于V100 GPU,通过编译优化和混合精度优化(从左到右3个条形图):基于PAI-TAO训练,CNN模型inception v3性能最好;基于PAI-TAO训练,BERT模型训练性能提升140%;Transformer模型训练性能提升90%。
TAO的优化技术在设计上遵循了通用性原则,可以与PAI团队研发的其他优化技术无缝结合,例如后续会介绍的PAI-Blade的模型压缩、int8量化技术等,形成强协同的联合优化效果。
在解决单台计算设备性能优化的同时,TAO还提出了自动化分布式广义编译优化的思路,我们称之为Auto-parallel功能。在Auto-parallel功能中,用户只需要提供原始的高层模型描述,TAO会根据用户模型特点自动探索合适的分布式执行策略,完成分布式相关计算图的改造。Auto-parallel功能内嵌了分布式运行的最佳实践和自动化调优策略,可以大大减轻用户手动编写分布式训练作业的负担。
例如,在某个用户模型上,Auto-parallel 自动完成了包括 30 个计算节点的 Parameter Server 分布式执行策略的改造,分布式版本的 Auto-parallel 相比用户手动开发的版本加速了 96 倍。性能加速的相当一部分来自于框架内置的最佳实践,避免了用户手动编写的分布式训练作业带来的负面性能优化。另一部分性能加速则来自于 PAI 团队对 TensorFlow Runtime 和通信库的改进,引入了零拷贝、无锁、运行到完成等技术手段,大大提升了在大规模特别是稀疏场景下的性能。
集群资源重用:训练价格降低至35%
PAI平台拥有大量的计算资源,包括CPU、GPU、FPGA等。众所周知,GPU作为专用的硬件加速器,提供了高性能的计算能力,但其成本远高于普通的计算硬件。如何在平台层面有效利用这些GPU硬件资源的计算效率,对于降低用户计算成本、提供平台差异化优势具有重要的意义和价值。
PAI希望实现“用更少的硬件支撑更多的业务,更快的完成业务迭代”,为了实现这个目标,我们研发了GPU分时复用技术。整套技术实现都遵循数据驱动的思路,包括实时在线性能数据反馈通道、细粒度的GPU资源复用、虚拟显存、基于历史数据的资源预估策略等关键模块。在PAI平台的设计理念中,AI基础设施也被抽象定义为一个广义的反馈数据驱动的互联网体系,而实时在线性能数据反馈通道则是驱动这个反馈体系的关键模块,包括GPU资源复用。Blade和TAO的发展历程很大程度上依赖于这个反馈体系提供的优化洞察和基础数据保障。
细粒度的GPU资源复用是为了保证GPU分时复用而引入的框架中间层,通过插入框架级hook的设计理念,达到对GPU资源进行细粒度裁剪的目的。虚拟显存是为了避免细粒度的GPU资源复用可能引入的显存溢出这种最坏情况而专门开发的功能,以保证平台的健壮性。基于历史数据的资源预估策略会根据用户作业的特点提供更精准的资源需求预估,以最高效的方式满足用户对训练和推理作业的性能要求。同时,更精细的资源预估和自动调优方案也在开发中,以增加资源复用的覆盖率。
EAS:机器学习模型的在线推理服务和优化
1.弹性膨胀和收缩
在EAS(弹性算法服务)诞生之初,PAI团队想解决的另一个产品OCR(印刷文字识别)使用GPU进行在线推理的问题。过去是这样的模式:在上一年年底估算下一年的业务量,申请预算,然后就开始进行实体机采购流程。这个过程耗时较长,难以应对突发的大量资源需求。还有一个关键问题是资源估算通常存在较大偏差。在线任务不同于可以排队的离线任务学英语,资源不足会直接导致业务规模无法扩大。因此资源的弹性增删成为了我们的一大需求。基于混合云方案,我们开发了一套轻量级的在线预测系统,即EAS,来满足我们动态变化的资源需求。
开发EAS还有一个重要的原因,就是使用异构计算资源(比如GPU)进行模型预测的需求越来越大。在云端,我们有丰富的异构资源可用,包括不同类型的NVDIA显卡。在业务层面,我们可以根据性能需求和性价比选择合适的GPU模型进行模型预测。基于这样的考虑,我们在EAS中也加强了异构资源的弹性扩展和调度,大大提高了模型预测对于异构资源需求的灵活性。
2. 多种模型和开发语言
在服务内部业务的同时,我们发现类似模型预测的外部需求也非常多,不仅仅是热门的深度学习模型,传统模型(比如随机森林、GBDT等)也有将模型部署为在线服务的需求。因此EAS决定实现多维度的支持,更大程度地增加模型预测的灵活性。我们允许用户使用多种语言(目前支持C++/Java/Python)开发模型预测逻辑(我们称之为Processor),允许用户在预测逻辑中添加自己的业务逻辑,将简单的模型预测变成端到端的复杂服务。在此基础上我们还提供了一些系统内置的Processor,比如传统的机器学习,我们支持pmml、PAI算法,我们支持私有的offlinemodel格式,TensorFlow,我们支持savedmodel和pb格式等。用户可以使用这些模型,无需开发Processor,一键部署为在线服务网络学习平台,对算法同学非常友好。慢慢地我们也在不断丰富我们内置的Processor,后续会支持更多的Processor供用户选择。
3. 灵活部署
除了一些细节的功能特性之外,EAS 还有一个比较大的特点,就是部署灵活。在项目启动之初,我们就以便捷部署、最小依赖为原则设计了我们的系统,底层基于 kubernetes 构建,目前整个集群所需的所有组件都可以通过 Helm 一键拉起,包括服务管理、监控、日志、前端、网关等,使得 EAS 可以非常简单地以敏捷版本的形式输出和部署在任何环境中。未来我们也会考虑将整个架构开源,更好地将这个能力输出给有需要的用户。
深度学习的推理优化:PAI-BLADE
Blade 是 PAI 团队研发的深度学习推理优化引擎,遵循系统导向模型优化、模型导向系统优化的总体设计理念,在不断压榨底层硬件计算性能极限的同时,利用上层模型优化技术对模型进行剪枝、压缩,从而打开更为广阔的性能优化空间。
在系统层面,Blade 包含了计算图优化、底层计算库的人优化以及基于 TAO 编译器的通用编译优化。计算图优化通过迭代计算图变换,减少了由于建模灵活性而在用户模型中引入的冗余计算操作。同时借鉴了经典编译器领域窥孔优化的思想,将计算图中若干个子图替换为 Blade 自研的更高效的底层计算库实现。
在底层计算库层面,Blade 实现了大量高效的算子和硬件计算内核,在多个细分领域已经达到甚至超越厂商库。比如本文提到的 BatchMatmul 算子的优化,以及针对长距离双向 LSTM 模型开发的 Blade RNN,在部分作负载上可以超越 NVIDIA 提供的 cuDNN RNN 性能高达两倍。此外,Blade 自研的 INT8 计算库在多个经典模型上性能已经超越 TensorRT。同时,Blade 采用 TAO 编译器作为优化后端,以更通用的方式解决大量长尾多样性模型的性能优化问题。
在模型层面,Blade 内嵌自动压缩模块,支持自动剪枝、核分解、量化等模型优化策略(详见论文)。量化部分支持固定位宽和混合位宽量化策略,可以有效发挥新硬件的硬件加速特性。剪枝部分包括自研的基于模型计算图结构动态自适应的剪枝压缩策略,可以很好地适应引入多路连接的现代网络结构,如 ResNet、DenseNet。核分解通过近似变换将原网络算子分解为计算量较低的近似算子,并基于微调进行精度恢复,从而大幅降低理论计算量。
目前所有量化压缩策略均已嵌入自动化的自动压缩框架流程,用户只需提供模型描述、基础配置以及重训练所需的样本,即可利用PAI平台能力自动完成模型的压缩改造。此外,由于复杂的模型压缩策略涉及耗时的重训练过程,自动压缩将结合TAO编译优化和Auto-parallel技术,以用户无感的方式加速重训练过程的性能,并内置到EAS系统中,以获得更好的用户体验。
基于FPGA的软硬件联合优化:PAI-FCNN
深度学习的海量计算需求催生了硬件架构的革新,如谷歌的TPU、阿里巴巴自研的AliNPU芯片等。PAI平台顺应业界新型AI硬件的大趋势,采用可定制硬件架构的FPGA芯片,基于“软件定义硬件”理念探索软硬件深度优化,积累了以CNN模型服务为主的PAI-FCNN解决方案。一方面,PAI-FCNN提供GPU以外的加速方案,为应用提供硬件定制的可能;另一方面,PAI-FCNN也作为通向新型AI硬件的桥梁,为未来无缝适配新型硬件打下坚实基础。
目前PAI-FCNN在GPU之外提供了以下几个方面的性能优化补充:
低延迟推理服务 针对低延迟场景定制的硬件架构,能够以最小的batch size提供最高的性能,适用于对延迟敏感的应用。 极低精度模型 极低精度模型能够大幅提高硬件利用率,降低硬件功耗。FPGA的硬件可定制性网络学习平台,使得使用极低精度模型成为可能。极端的例子包括以二进制表示的BNN网络模型,一个实际用例是8bit特征值和3bit权重表示的视频检测网络。 对GPU加速不友好的模型 一些复杂的网络模型很难充分利用GPU的算力英语,为这些模型定制的硬件架构在FPGA上比GPU提供了更强的加速能力和更高的性价比。 更多前沿AI技术探索
流计算:在线学习
随着随机计算引擎的快速发展,在线学习逐渐被开发者采用,新闻类APP从海量新闻内容中实时挖掘热点新闻,电商平台根据用户实时行为推荐所需商品,企业根据瞬息万变的舆情数据实时更新模型、预测突发事件……
PAI-Alink 是基于 Flink 的算法平台,作为 PAI 平台的一部分,Alink 支持批/流算法、机器学习、统计学等超过 200 种常用算法,旨在通过提供丰富的算法库和便捷的编辑运行环境,帮助数据分析师和应用开发者快速高效地实现数据分析处理。
Alink算法平台上的数据分析算法涵盖了统计分析、机器学习、文本处理、推荐、异常检测等多个领域的常用算法网络学习平台,封装了多种常用数据源,包括MaxCompute数据表、阿里云Datahub流数据、CSV数据、随机生成数据等,让数据处理分析链路更加顺畅;支持流数据可视化,可以实时展示流数据的分析结果;提供多种在线学习算法和常用的迁移学习算法。
在Alink平台上,数据分析师和应用程序开发人员可以端到端完成从数据探索、模型训练、实时预测到可视化的整个流程。
Alink 支持流批融合机器学习,可以将离线批量训练生成的模型加载到流式训练环境中进行进一步训练。这样的模型训练架构既包含了批量训练对于大规模数据训练的规模优势,也包含了流式训练对于实时数据反馈的时效性优势。流批融合训练模式是对原有离线机器学习训练模式的升级,目前 PAI 平台已经全面上线该功能,并在部分用户场景中得到应用。
强化学习和迁移学习
为了进一步缩小深度学习算法与实际AI应用的差距,提升平台的易用性,我们在PAI-TensorFlow之上开发了针对不同AI领域的深度学习算法框架,包括图像、NLP、强化学习、迁移学习等。在图像算法框架EasyVision中,我们封装了常用的图像算法主干网络结构如Resnet、inception、VGG、CifarNet等,以及针对不同视觉任务的CVHead如FasterRCNN、SSD、YOLO、DeepLab等。用户可以基于我们的框架轻松组装出图像分类、检测、识别、分割等应用。
在强化学习框架A3gent中,我们实现了高效的分布式强化学习架构Ape-x、IMPALA,以及常用的强化学习算法组件如DQN、DDPG、PPO等,同时还内置了常用的仿真环境如GYM、Atari、VIZDOOM等。迁移学习框架ATP支持多任务学习和pretrain-finetune两种迁移学习模式,内置了常用的预训练模型如BERT,并在此基础上封装了针对不同NLP任务的组件。上述AI算法框架在阿里巴巴集团内部得到广泛应用,大大加速了不同业务场景下AI应用的落地,未来我们也计划逐步对外推广和开源。
PAI 的下一步:开源和开放
当前机器学习领域蓬勃发展的一大驱动力就是开源与开放。无论是学术界还是业界都愿意尽早分享各自的成果,各类会议期刊论文层出不穷,众多优秀的开源项目应接不暇。对于所有从业者来说,这是一个生机勃勃的领域。发展壮大这个领域,为机器学习和人智能的建设贡献力量是我们义不容辞的责任。秉承取之于社会、回馈于社会的理念,让AI技术更好地造福大众,阿里巴巴PAI团队将在开源开放方面做出以下努力:
PAI-TensorFlow
在深度学习领域,PAI选择对TensorFlow框架进行深度定制和改进,主要基于以下三点原因:
The PAI team has optimized and improved many aspects of TF, such as introducing a more efficient communication library, thread model, and memory allocation mechanism, improving the existing AdamOptimzer to cope with large-scale sparse gradients, adding OP to support big data IO in the Alibaba Cloud environment, a large number of XLA-based compilation optimizations, mixed precision, deep integration with TensorRT, virtual GPU, etc. On the one hand, we will push our own modifications back to the community branch; on the other hand, we are actively preparing and sorting out the code to open source the entire PAI changes to TF, to set an example and jointly prosper the community.
Alink,一个开源流学习算法平台
流媒体计算框架在去年年底的Flink China Forward Conference上越来越关注。
PAI算法市场
算法市场是为了与开发人员生态系统兼容的概念。
基于这一需求,PAI即将打开基础算法开发框架,并欢迎各个算法开发人员开发自定义算法并将其推向PAI算法市场。