赞
踩
\n\n3月21日,2019 阿里云峰会在北京召开,会上阿里巴巴重磅发布了机器学习平台PAI 3.0版本。距离PAI 2.0发布已经过去了2年,阿里巴巴对PAI 3.0可以说做了相当长时间的打磨。PAI 3.0新增了许多端到端智能应用,新推出算法模型市场,涵盖电商、社交、广告、金融、娱乐、传统零售、客服、物流等多个行业,数十种场景的算法模型;添加流式算法组件、图神经网络、增强学习组件等平台工具。作为机器学习平台的内核,PAI的智能计算引擎也进行了全面升级,通过编译技术优化通用计算引擎,训练性能加速400%;深度学习优化分布式引擎,单任务支持上千worker并发训练,支持5k+超大规模异构计算集群;发布大规模图神经网络,cachine机制效率提升40%,算子速度提升12倍,系统端建图时间从数小时降至5分钟,等等。为了帮助大家更好地了解PAI 3.0的新特性和技术构建,InfoQ独家邀请了阿里云智能计算平台事业部研究员林伟为大家解读PAI背后的核心技术。
\n
PAI起初是一个定位于服务阿里集团的机器学习平台,致力于让AI技术更加高效、简洁、标准的被公司内部开发者使用。为此,PAI平台不仅提供基于ParameterServer,支持上百亿特征、千亿训练样本的超大规模经典算法,同时还提供了兼容Caffe、PyTorch以及基于大规模GPU集群、深度优化的TensorFlow深度学习引擎。另外,PAI平台上开放了阿里技术团队深度优化过的PAI-TensorFlow版本,无论是在训练性能还是在分布式加速比上,相比于开源版本均有大幅提升。在此基础上,PAI开发了一套从数据处理、算法开发、模型训练、模型自动化调优、到模型在线/离线推理的一站式AI研发平台。经过阿里内部大量算法工程师和复杂真实业务的考验,PAI于2015年正式通过阿里云对外提供服务,并在2017年3月推出了2.0版本,两年之后,全新的3.0版本终于问世。
\n \n对于大部分用户来讲,机器学习的真正门槛来自于对底层算法原理的理解,以及复杂的计算机实现。为了解决这些问题,PAI平台封装了200余种经典算法,让用户可以通过拖拽的方式搭建机器学习实验。
\n \n所有算法都经历过阿里巴巴集团许多业务、EP级数据的锤炼。根据算法的不同特点选用MapReduce、MPI、ParameterSever、Flink等不同框架实现。
\n深度学习是当前机器学习领域最流行的技术,而深度学习中神经网络的构建对于大部分初学者来说还是比较陌生。为了降低深度学习的门槛,PAI团队在Notebook中开发了FastNerualNetwork插件,使用该插件可以将原本黑盒的深度学习网络建构成可视的流程。
\n \nFastNerualNetwork通过提取Pooling、Embedding、Convolutional等Layer的代码级原子构成,可以将深度学习网络模块化、组件化,从而实现深度学习网络的可视化展现及修改。算法工程师基于PAI开发深度学习网络,可以完全可视化地调整网络结构,而且支持网络结构与代码相互转换。此项功能即将开放邀测。
\n如何探寻算法最优的超参数组合是一直以来困扰算法工程师的难题,调参工作不仅考验算法工程师对于算法推导认知的功底,还会带来大量手动尝试的工作量,工作效率很低。AutoML技术通过智能化的方式降低机器学习实验搭建的复杂度,通过自研的进化式调参等方式解放用户的调参工作,实现模型参数自动探索、效果自动评估、模型自动向下传导,实现模型优化全链路零干预,大大降低机器学习门槛,节约计算成本。
\nPAI-AutoML自动调参引擎不仅包含基于Parallel Search思想的Grid search、Random search两种传统调参模式,还包含PAI团队基于Population Based Training理论原创的Evolutionary Optimizer调参模式,这种调参方式可以渐进式的帮助用户以最小代价探寻最优参数组合。
\n \n \n与此同时,Evolutionary Optimizer在调参过程中保留所有参数的表现以备追溯,并且调参模式与训练流程打通,做到自动选参、自动训练、自动评估、自动部署的整个链路自动化。
\n \nPAI平台提供PAI-STUDIO(可视化建模和分布式训练)、PAI-DSW(notebook交互式AI研发)、PAI-EAS(在线预测服务)三套服务,每个服务既可单独使用,也可相互打通。用户可以从数据上传、数据预处理、特征工程、模型训练、模型评估,到最终的模型发布到离线或者在线环境,一站式完成建模。
\n在数据预处理方面,PAI跟阿里云DataWorks(一站式大数据智能云研发平台)无缝打通,支持SQL、UDF、UDAF、MR等多种数据处理开发方式。在PAI平台上训练模型,生成的模型可以通过EAS部署到线上环境,整个实验流程支持周期性调度,可以发布到DataWorks与其它上下游任务节点打通依赖关系。另外调度任务区分生产环境以及开发环境,可以做到数据安全隔离。
\nML-as-Service作为一种新型的云上服务,有一个迥异于其他服务的特点——计算量非常大。这个计算量大与传统的大数据有很大区别,传统大数据是需要处理的数据量大,但是对每一份数据的计算本身不是密集的。比如一个经典的大数据问题: 统计一个搜索引擎每日访问数量和每个关键字的点击率,真正的计算也就是计数和标量乘法,这里的“大”体现在数据规模上。但是机器学习,特别是现在的深度学习,对每一份数据,可能需要计算多次,每次计算都涉及复杂的数值计算,比如矩阵乘法、卷积等。这就必然引入其他专门的硬件做加速,比如GPU、TPU、FPGA等。
\n当前机器学习的大计算量以及对应的加速硬件,导致了高昂的计算成本,因此用户对机器学习平台的计算效率会提出更高的要求,以降低成本、加速试验迭代。作为平台级产品,PAI从诞生之初就重点钻研、打磨高性能的大规模分布式机器学习框架,包括单机性能挖掘、分布式优化、在线推理、集群资源复用等核心能力。
\n针对深度学习模型描述灵活、计算复杂性高的特点,PAI团队研发了深度学习编译器TAO(Tensor Accelerator and Optimizer),以通用化、平台化的方式来解决上层Workload与底层硬件计算单元之间高效映射的问题。
\n在设计理念上,TAO引入了基于硬件单元片上存储中转的大尺度算子融合的技术(相关细节参见论文),有效地解决了复杂计算图融合变换的技术难题,特别是针对包括了复杂后向计算图的训练作业,能够极大减少深度学习模型执行过程中的冗余开销。通过大尺度的计算图融合技术,可以显著减少硬件访存开销以及硬件、框架层面的调度执行开销,并且引入了更广阔的全局优化空间。
\n在框架层面,TAO引入了精细的反馈控制机制,在推行大尺度算子融合的同时避免了陷入局部最优的局限。在大尺度算子融合的基础上,通过在线代码生成技术,TAO将传统的解释执行深度学习引擎无缝地在线转换为编译执行模式,进一步减少了框架层面的执行负担,在保证用户建模体感不变的同时,获得了更佳的性能体验。
\n基于TAO的通用优化技术,在经典的图像CNN模型、NLP RNN/Transformer模型、最近流行起来的BERT模型、以及语义相关性DSSM模型上,均获得了显著的性能优化效果,从1.3倍到4倍不等。详细对比如下两张图所示。
\n \nTAO的优化技术在设计上遵循了通用化原则,可以无缝地与PAI团队研发的其他优化技术结合,比如后面会专门介绍的PAI-Blade的模型压缩、int8量化等技术,形成强强协同的联合优化效应。
\n在解决单个计算设备性能优化的同时,TAO还提出了自动化分布式的广义编译优化的思想,我们称之为Auto-parallel功能。在Auto-parallel功能里,用户只需要提供一个原始的高层次模型描述,TAO会根据用户模型特点,自动探索出适宜的分布式执行策略,并完成分布式相关的计算图改造变换。Auto-parallel功能里内嵌了分布式运行的best practice以及自动化tuning策略,可以极大程度上减少用户手式撰写分布式训练作业的负担。
\n比如在一款用户模型上,通过Auto-parallel,自动完成了包括30个计算节点的Parameter Server分布式执行策略的改造,而Auto-parallel的分布式版本相较于用户手工开发的版本,加速达到了96X,有相当一部分性能加速源于框架层面内置的最佳实践,规避了用户手工撰写分布式训练作业的性能负优化。另外一部分性能加速来自于PAI团队对TensorFlow的Runtime以及通讯库的改进,引入了诸如zero-copy、lock-free、run-to-completion等技术手段,在大规模特别是稀疏场景有着大幅的性能增强。
\nPAI平台拥有大量的计算资源,包括CPU、GPU、FPGA等。众所周知,GPU作为专用硬件加速器,在提供了高性能计算能力的同时,其成本也远远高于普通计算硬件。平台层面如何有效发挥这些GPU硬件资源的计算效率,对于降低用户计算成本,提供平台差异化优势都有着重要的意义和价值。
\nPAI希望实现“用更少的硬件,支持更多业务更快完成业务迭代”。为了完成这个目标,我们针对性地研发了GPU分时复用技术。整套技术实现遵循了数据驱动的思想,包括实时在线性能数据反馈通路、细粒度GPU资源复用、虚拟显存以及基于历史数据的资源预估策略这几个关键模块。 在PAI平台的设计理念中,将AI基础设施也抽象定义为一个广义的反馈数据驱动的互联网系统,而实时在线性能数据反馈通路则是驱动这个反馈系统的关键模块,包括GPU资源复用,Blade以及TAO的研发过程中,均相当程度上依赖于这套反馈系统所提供的优化insights以及基础数据保障。
\n细粒度GPU资源复用则是为了确保GPU分时复用引入的一套框架中间层,通过插入框架层面钩子的设计理念,达到GPU资源细粒度切割的目的。虚拟显存则是为了避免细粒度GPU资源复用可能引入的显存溢出的worst case所专门开发的功能,以确保平台鲁棒性。基于历史数据的资源预估策略,会针对用户作业特点,提供更为准确的资源需求预估,从而尽可能以最高效的资源分配方式来满足用户训练、推理作业性能需求。同时,更精细的资源预估与自动调优的方案也正在开发中,以期提高资源复用的覆盖率。
\n在做EAS(在线预测服务Elastic Algorithm Service)之初,PAI团队是想解决另外一款产品OCR(印刷文字识别) 使用GPU进行在线inference的问题。过去有这样一种模式:前一年底预估下一年的业务量并申请预算,然后开始进入物理机的采购流程,这个过程时间跨度会比较大,很难响应突然出现的大量资源需求,而另一个关键的问题是,资源的预估通常会有比较大的偏差,在线任务不同于离线任务可以排队,资源不足会直接导致业务规模无法扩大,因此弹性增删资源成为我们一个很大的诉求。基于混合云方案,我们开发了一套轻量的在线预测系统,即EAS,来满足我们动态变化的资源需求。
\n开发EAS还有另一个重要原因,即对于使用异构计算资源(如GPU)做模型预测的需求在日益增长。在云上,我们有丰富的异构资源可以使用,包括NVDIA的不同显卡类型,在业务层面上可以根据性能要求和性价比选择合适的GPU型号来进行模型预测。基于这个考虑,我们也在EAS中强化对于异构资源的弹性扩缩和调度,极大地提升了模型预测对于异构资源需求的灵活性。
\n在服务内部业务的同时,我们发现外部也有大量类似模型预测的需求,不仅是当下火热的深度学习模型,传统模型(如随机森林,GBDT等)也同样有模型部署成在线服务的需求。因此,EAS决定实现多维度的支持,并更大程度地提高模型预测的灵活性。我们允许用户以多种语言(现在支持C++/Java/Python)来开发模型预测逻辑(我们叫Processor),允许用户在预测逻辑中加入自己的业务逻辑,将简单的模型预测变成端对端的复杂服务。基于此,我们也提供了一些系统内置的Processor,比如传统机器学习我们支持pmml,PAI的算法我们支持私有的offlinemodel格式,TensorFlow我们支持savedmodel和pb格式等等。用户使用这些模型可以一键部署成在线服务,无需开发Processor,这对于算法同学是非常友好的。慢慢地我们也在不断地丰富我们的内置Processor,未来会支持更多的Processor供用户选择。
\n除去一些细节的功能特性之外,EAS还有一个比较大的特点,就是部署灵活。我们在立项之初即本着部署便捷、依赖最小化的原则去设计我们的系统。底层基于kubernetes构建,目前可通过Helm一键拉起整个集群所需要所有组件,包括服务管控、监控、日志、前端、网关等等,使得EAS可以非常简单地在任何环境里以敏捷版的形式输出部署。未来我们也会考虑将整套架构开源,将这种能力更好地输出给有需要的用户。
\nBlade是PAI团队研发的深度学习推理优化引擎。整体遵循system-oriented-model-optimization和model-oriented-system-optimization的设计理念,在不断压榨底层硬件计算性能极限的同时,通过上层的模型优化技术来进行模型的剪枝、压缩,从而打开更广阔的性能优化空间。
\n系统层面,Blade包括计算图优化、底层计算库手工优化以及依托于TAO compiler的通用编译优化。计算图优化会通过迭代式的计算图变换,来减少用户模型中因为建模灵活性引入的冗余计算操作,同时借鉴了经典编译器领域的peephole optimization的思想,会将计算图中若干子图替换为Blade自研的更高效的底层计算库实现。
\n底层计算库层面,Blade实现了大量的高效算子和硬件计算Kernel,并在若干子领域达到乃至超过了厂商library,比如这篇文章里提到的针对BatchMatmul算子的优化,以及针对长程双向LSTM模型研发的Blade RNN,能够在部分workload上超越NVIDIA提供的cuDNN RNN性能达两倍之多,此外Blade自研的INT8计算库,在若干经典模型上,性能超越了TensorRT。同时Blade将TAO compiler作为优化后端接入,以更通用化的方式解决了大量的长尾多样性模型的性能优化问题。
\n模型层面,Blade内嵌了auto-compression的模块,支持自动化的剪枝、Kernel拆解、量化等模型优化策略(相关细节参见我们的论文 )。 其中量化部分支持固定位宽及混合位宽的量化策略,可以有效地发挥新硬件的硬件加速特性。剪枝部分包括自研的基于模型计算图结构动态适配的剪枝压缩策略,可以很好地适配引入多路连接的现代网络结构,比如ResNet和DenseNet等。Kernel拆解通过近似变换,将原始网络算子拆解为低计算量的近似算子,并基于finetune调优进行精度拉回,从而达到显著减少理论计算量的目的。
\n所有的量化压缩策略,目前都已经嵌入到自动化的auto-compression框架流程里,用户只需要提供模型描述、基础配置,以及再训练所需的样本,即可借助于PAI平台能力,自动化完成模型的压缩变换。并且,因为复杂模型压缩策略涉及到耗时较长的再训练过程,所以auto-compression会与TAO编译优化以及Auto-parallel技术形成组合,以用户无感的方式对再训练过程进行性能加速,并内置到EAS系统,从而获得更佳的用户体验。
\n深度学习的巨量计算需求催生了硬件架构上的创新,例如Google的TPU,以及阿里自研的AliNPU芯片。PAI平台顺应业界AI新硬件的大趋势,利用硬件架构可定制的FPGA芯片,基于“软件定义硬件”的理念探索软硬件联合的深度优化,积累了以CNN模型服务为主的PAI-FCNN方案。一方面,PAI-FCNN提供GPU之外的加速方案,为应用提供硬件定制的可能性;另一方面,PAI-FCNN也起到通往AI新硬件的桥梁作用,为未来新硬件的无缝适配打下坚实基础。
\n当前,PAI-FCNN在以下方面提供GPU之外的性能优化补充:
\n针对低延时场景定制的硬件架构可以在最小batchsize下提供最高的性能,适合延时敏感的应用。
\n极低精度模型可以大幅提高硬件利用率,降低硬件功耗。FPGA的硬件可订制性为极低精度模型的使用提供可能,极端例子比如用二进制表示的BNN网络模型。一个实际使用案例是8位特征值,3位权值表示的视频检测网络。
\n某些复杂的网络模型很难充分利用GPU的计算能力,针对这些模型定制的硬件架构在FPGA上提供比GPU更强的加速能力和更高的性价比。
\n随机计算引擎的快速发展,在线学习已经被开发者逐步采用,新闻APP在大量新闻内容中实时挖掘热点新闻,电商平台基于用户实时行为推荐所需的商品,企业基于瞬息万变的舆情数据,实时更新模型、预测突发事件……
\nPAI-Alink是基于Flink的算法平台,作为PAI平台中的一部分,Alink支持批式/流式算法、机器学习、统计等方面的200多种常用算法,旨在通过提供丰富的算法库及便捷的编辑运行环境,帮助数据分析和应用开发人员快速高效的实现数据的分析和处理。
\nAlink算法平台上的数据分析算法包含常用的统计分析、机器学习、文本处理、推荐、异常检测等多个领域的算法;封装了多种常用的数据源,包括MaxCompute数据表、阿里云Datahub流式数据、CSV数据、随机生成数据等数据源,使得数据处理及分析链路更加通畅;支持流式数据的可视化,能够实时显示流式数据的分析结果;提供了多种在线学习算法及常用的迁移学习算法。
\n在Alink平台上,数据分析和应用开发人员能够从数据探索、模型训练、实时预测、可视化展示,端到端地完成整个流程。
\n \nAlink支持流批机器学习一体化,可以加载离线批训练生成的模型到流式训练环境中继续训练。这样的模型训练架构既包含了批训练对大规模数据训练的规模化优势,又包含了流式训练对数据实时性反馈的时效性优势。流批一体化训练模式是对原有机器学习离线训练模式的一种升级,目前PAI平台已经全面上线了该功能,并在一些用户场景中落地应用。
\n为了进一步缩小深度学习算法和实际AI应用之间的鸿沟、提升平台的易用性,我们在PAI-TensorFlow之上,开发了面向不同AI领域的深度学习算法框架,包括图像、NLP、强化学习、迁移学习等。在图像算法框架EasyVision当中,我们封装了常用的图像算法backbone网络结构如Resnet、inception、VGG、CifarNet等,以及面向不同视觉任务的CVHead如FasterRCNN、SSD、YOLO、DeepLab等,用户可以基于我们的框架方便的组装图像分类、检测、识别、分割等应用。
\n在强化学习框架A3gent当中,我们实现了高效的分布式强化学习架构Ape-x和IMPALA,以及常用的强化学习算法组件如DQN、DDPG、PPO等,同时也内置了常用的模拟环境如GYM、Atari、VIZDOOM等。迁移学习框架ATP支持多任务学习和pretrain-finetune两种迁移学习模式,内置了常用的预训练模型如BERT,并在此基础上封装了面向不同NLP任务的组件。上述AI算法框架均在阿里巴巴集团内部广泛应用,大大加速不同业务场景中AI应用的落地,后续也计划逐步对外商业化推广并开源。
\n当前机器学习领域如此蓬勃发展的一大推动力就是开源与开放。不论是学术界还是工业界,都愿意把自己的成果尽早的分享出来,各种会议期刊论文层出不穷,众多优秀的开源项目应接不暇。对所有从业者来说,这是一个生机勃勃的领域,发展和壮大这个领域,为机器学习和人工智能的大厦添砖加瓦也是我们义不容辞的责任。秉承取之于社区,反馈于社区,让AI技术更好地普惠大众的理念,阿里PAI团队即将在开源和开放方面做出如下努力:
\n在深度学习领域,PAI选择对TensorFlow框架做深度定制和改进,有以下三个原因:
\nTF是近几年最流行的深度学习框架,用户认知度高,社区活跃,上下游工具链完整,多种异构平台支持等优点,这里不再赘言;
\n\nTF灵活的架构和良好的抽象非常适合扩展。比如TF里面对device有严格的抽象,可以非常轻巧的实现“虚拟GPU”功能,在集群环境下支持多租户。再比如TensorFlow原生支持的XLA,是一个基于编译器的优化框架,在这个框架下,我们加入了更多的优化点和优化策略,并且做到所有的优化互不冲突。还有很多这样的例子,基于TensorFlow优秀的模块设计,PAI团队做了大量的改进和扩充,而不会打乱已有的结构和功能。
\n\n第三,TensorFlow在很多场景的性能都还有提升的余地。TensorFlow作为Google主导的开源深度学习系统,不论单机亦或分布式都做了很多优化,对异构硬件资源也支持得非常好。但深度学习框架涉及的领域实在太多,变化太快,而TF又是一个庞然大物,功能非常齐全,所以在某些场景或者技术点上,并没有做到极致,还有很大的提升空间。比如广为所知的Horovod,对TF的多机多卡分布式训练做了大量的优化,大部分情形是优于原生TensorFlow的。
\nPAI团队对TF的诸多方面做了优化与改进,比如引入效能更好的通讯库、线程模型以及内存分配机制,改进现有的AdamOptimzer以应对大规模稀疏梯度,新增OP以支持阿里云环境的大数据IO,基于XLA的大量编译优化,混合精度,与TensorRT深度整合,虚拟GPU等。一方面,我们会把自己的修改push回社区分支;另外一方面,我们正在积极准备和梳理代码,把PAI对TF的改动整体的开源出来,抛砖引玉,共同繁荣社区。
流式计算框架Flink越来越受到大家的重视,在去年年底的Flink China Forward大会上,阿里开源了基于Flink的Blink,PAI平台也即将开放大量流式算法。
\n算法市场是PAI希望与开发者生态兼容而推出的概念。许多开发者有这样的疑惑:业务上了云,是不是就只能使用云端提供的能力,缺少了灵活性。这一点疑惑在机器学习算法领域尤为突出,因为理论界新的算法层出不穷,用户不同的业务场景也需要定制化算法。
\n基于这种需求,PAI即将开放底层的算法开发框架,欢迎个人算法开发者进行算法自定义开发并推送到PAI算法市场。算法市场这个概念有巨大的想象空间,如何把“市场”这个概念充分坐实,需要整个生态的力量来贡献。
\n \nCopyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。