独家解读!阿里重磅发布机器学习平台PAI 3.0
出处 | AI前线
3 月 21 日,2019 阿里云峰会在北京召开,会上阿里巴巴重磅发布了机器学习平台 PAI 3.0 版本。距离 PAI 2.0 发布已经过去了 2 年,阿里巴巴对 PAI 新版本做了相当长时间的打磨。PAI 3.0 推出了全新的算法模型市场,涵盖电商、社交、广告、金融等多个行业,数十种场景的算法模型;新增流式算法组件、图神经网络、增强学习组件等平台工具。作为机器学习平台的内核,PAI 的智能计算引擎也进行了全面升级,通过编译技术优化通用计算引擎,训练性能提升 400%;深度学习优化分布式引擎,单任务支持上千 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 notebook 建模界面
FastNerualNetwork 通过提取 Pooling、Embedding、Convolutional 等 Layer 的代码级原子构成,可以将深度学习网络模块化、组件化,从而实现深度学习网络的可视化展现及修改。算法工程师基于 PAI 开发深度学习网络,可以完全可视化地调整网络结构,而且支持网络结构与代码相互转换。此项功能即将开放邀测。
3. AutoML 降低模型调优成本
如何探寻算法最优的超参数组合是一直以来困扰算法工程师的难题,调参工作不仅考验算法工程师对于算法推导认知的功底,还会带来大量手动尝试的工作量,工作效率很低。AutoML 技术通过智能化的方式降低机器学习实验搭建的复杂度,通过自研的进化式调参等方式解放用户的调参工作,实现模型参数自动探索、效果自动评估、模型自动向下传导,实现模型优化全链路零干预,大大降低机器学习门槛,节约计算成本。
PAI-AutoML 自动调参引擎不仅包含基于 Parallel Search 思想的 Grid search、Random search 两种传统调参模式,还包含 PAI 团队基于 Population Based Training 理论原创的 Evolutionary Optimizer 调参模式,这种调参方式可以渐进式的帮助用户以最小代价探寻最优参数组合。
与此同时,Evolutionary Optimizer 在调参过程中保留所有参数的表现以备追溯,并且调参模式与训练流程打通,做到自动选参、自动训练、自动评估、自动部署的整个链路自动化。
4. 一站式机器学习服务
PAI 平台提供 PAI-STUDIO(可视化建模和分布式训练)、PAI-DSW(notebook 交互式 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),以通用化、平台化的方式来解决上层 Workload 与底层硬件计算单元之间高效映射的问题。
在设计理念上,TAO 引入了基于硬件单元片上存储中转的大尺度算子融合的技术(相关细节参见论文 https://arxiv.org/pdf/1811.05213),有效地解决了复杂计算图融合变换的技术难题,特别是针对包括了复杂后向计算图的训练作业,能够极大减少深度学习模型执行过程中的冗余开销。通过大尺度的计算图融合技术,可以显著减少硬件访存开销以及硬件、框架层面的调度执行开销,并且引入了更广阔的全局优化空间。
在框架层面,TAO 引入了精细的反馈控制机制,在推行大尺度算子融合的同时避免了陷入局部最优的局限。在大尺度算子融合的基础上,通过在线代码生成技术,TAO 将传统的解释执行深度学习引擎无缝地在线转换为编译执行模式,进一步减少了框架层面的执行负担,在保证用户建模体感不变的同时,获得了更佳的性能体验。
基于 TAO 的通用优化技术,在经典的图像 CNN 模型、NLP RNN/Transformer 模型、最近流行起来的 BERT 模型、以及语义相关性 DSSM 模型上,均获得了显著的性能优化效果,从 1.3 倍到 4 倍不等。详细对比如下两张图所示。
基于 P100 GPU,PAI-TAO 采用了深度学习编译优化:柱 1 某行业语音识别模型训练性能提升 40%;柱 2 某行业文本生成模型训练性能提升 51%。
基于 V100 GPU,PAI-TAO 采用了编译优化和混合精度优化(从左到右 3 个柱状图):CNN 模型 inception v3 基于 PAI-TAO 训练性能表现最好;BERT 模型 基于 PAI-TAO 训练性能提升了 140%;Transformer 模型 训练性能提升了 90%。
TAO 的优化技术在设计上遵循了通用化原则,可以无缝地与 PAI 团队研发的其他优化技术结合,比如后面会专门介绍的 PAI-Blade 的模型压缩、int8 量化等技术,形成强强协同的联合优化效应。
在解决单个计算设备性能优化的同时,TAO 还提出了自动化分布式的广义编译优化的思想,我们称之为 Auto-parallel 功能。在 Auto-parallel 功能里,用户只需要提供一个原始的高层次模型描述,TAO 会根据用户模型特点,自动探索出适宜的分布式执行策略,并完成分布式相关的计算图改造变换。Auto-parallel 功能里内嵌了分布式运行的 best practice 以及自动化 tuning 策略,可以极大程度上减少用户手式撰写分布式训练作业的负担。
比如在一款用户模型上,通过 Auto-parallel,自动完成了包括 30 个计算节点的 Parameter Server 分布式执行策略的改造,而 Auto-parallel 的分布式版本相较于用户手工开发的版本,加速达到了 96X,有相当一部分性能加速源于框架层面内置的最佳实践,规避了用户手工撰写分布式训练作业的性能负优化。另外一部分性能加速来自于 PAI 团队对 TensorFlow 的 Runtime 以及通讯库的改进,引入了诸如 zero-copy、lock-free、run-to-completion 等技术手段,在大规模特别是稀疏场景有着大幅的性能增强。
集群资源复用:训练价格降至 35%
PAI 平台拥有大量的计算资源,包括 CPU、GPU、FPGA 等。众所周知,GPU 作为专用硬件加速器,在提供了高性能计算能力的同时,其成本也远远高于普通计算硬件。平台层面如何有效发挥这些 GPU 硬件资源的计算效率,对于降低用户计算成本,提供平台差异化优势都有着重要的意义和价值。
PAI 希望实现“用更少的硬件,支持更多业务更快完成业务迭代”。为了完成这个目标,我们针对性地研发了 GPU 分时复用技术。整套技术实现遵循了数据驱动的思想,包括实时在线性能数据反馈通路、细粒度 GPU 资源复用、虚拟显存以及基于历史数据的资源预估策略这几个关键模块。 在 PAI 平台的设计理念中,将 AI 基础设施也抽象定义为一个广义的反馈数据驱动的互联网系统,而实时在线性能数据反馈通路则是驱动这个反馈系统的关键模块,包括 GPU 资源复用,Blade 以及 TAO 的研发过程中,均相当程度上依赖于这套反馈系统所提供的优化 insights 以及基础数据保障。
细粒度 GPU 资源复用则是为了确保 GPU 分时复用引入的一套框架中间层,通过插入框架层面钩子的设计理念,达到 GPU 资源细粒度切割的目的。虚拟显存则是为了避免细粒度 GPU 资源复用可能引入的显存溢出的 worst case 所专门开发的功能,以确保平台鲁棒性。基于历史数据的资源预估策略,会针对用户作业特点,提供更为准确的资源需求预估,从而尽可能以最高效的资源分配方式来满足用户训练、推理作业性能需求。同时,更精细的资源预估与自动调优的方案也正在开发中,以期提高资源复用的覆盖率。
EAS:机器学习模型在线推理服务与优化
1. 弹性扩缩容
在做 EAS(在线预测服务 Elastic Algorithm Service)之初,PAI 团队是想解决另外一款产品 OCR(印刷文字识别) 使用 GPU 进行在线 inference 的问题。过去有这样一种模式:前一年底预估下一年的业务量并申请预算,然后开始进入物理机的采购流程,这个过程时间跨度会比较大,很难响应突然出现的大量资源需求,而另一个关键的问题是,资源的预估通常会有比较大的偏差,在线任务不同于离线任务可以排队,资源不足会直接导致业务规模无法扩大,因此弹性增删资源成为我们一个很大的诉求。基于混合云方案,我们开发了一套轻量的在线预测系统,即 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 可以非常简单地在任何环境里以敏捷版的形式输出部署。未来我们也会考虑将整套架构开源,将这种能力更好地输出给有需要的用户。
深度学习的 inference 优化:PAI-BLADE
Blade 是 PAI 团队研发的深度学习推理优化引擎。整体遵循 system-oriented-model-optimization 和 model-oriented-system-optimization 的设计理念,在不断压榨底层硬件计算性能极限的同时,通过上层的模型优化技术来进行模型的剪枝、压缩,从而打开更广阔的性能优化空间。
系统层面,Blade 包括计算图优化、底层计算库手工优化以及依托于 TAO compiler 的通用编译优化。计算图优化会通过迭代式的计算图变换,来减少用户模型中因为建模灵活性引入的冗余计算操作,同时借鉴了经典编译器领域的 peephole optimization 的思想,会将计算图中若干子图替换为 Blade 自研的更高效的底层计算库实现。
底层计算库层面,Blade 实现了大量的高效算子和硬件计算 Kernel,并在若干子领域达到乃至超过了厂商 library,比如 这篇文章 里提到的针对 BatchMatmul 算子的优化,以及针对长程双向 LSTM 模型研发的 Blade RNN,能够在部分 workload 上超越 NVIDIA 提供的 cuDNN RNN 性能达两倍之多,此外 Blade 自研的 INT8 计算库,在若干经典模型上,性能超越了 TensorRT。同时 Blade 将 TAO compiler 作为优化后端接入,以更通用化的方式解决了大量的长尾多样性模型的性能优化问题。
模型层面,Blade 内嵌了 auto-compression 的模块,支持自动化的剪枝、Kernel 拆解、量化等模型优化策略(相关细节参见我们的论文 http://openaccess.thecvf.com/content_cvpr_2018_workshops/papers/w33/Zhang_Efficient_Deep_Learning_CVPR_2018_paper.pdf)。 其中量化部分支持固定位宽及混合位宽的量化策略,可以有效地发挥新硬件的硬件加速特性。剪枝部分包括自研的基于模型计算图结构动态适配的剪枝压缩策略,可以很好地适配引入多路连接的现代网络结构,比如 ResNet 和 DenseNet 等。Kernel 拆解通过近似变换,将原始网络算子拆解为低计算量的近似算子,并基于 finetune 调优进行精度拉回,从而达到显著减少理论计算量的目的。
所有的量化压缩策略,目前都已经嵌入到自动化的 auto-compression 框架流程里,用户只需要提供模型描述、基础配置,以及再训练所需的样本,即可借助于 PAI 平台能力,自动化完成模型的压缩变换。并且,因为复杂模型压缩策略涉及到耗时较长的再训练过程,所以 auto-compression 会与 TAO 编译优化以及 Auto-parallel 技术形成组合,以用户无感的方式对再训练过程进行性能加速,并内置到 EAS 系统,从而获得更佳的用户体验。
基于 FPGA 的软硬件联合优化 : PAI-FCNN
深度学习的巨量计算需求催生了硬件架构上的创新,例如 Google 的 TPU,以及阿里自研的 AliNPU 芯片。PAI 平台顺应业界 AI 新硬件的大趋势,利用硬件架构可定制的 FPGA 芯片,基于“软件定义硬件”的理念探索软硬件联合的深度优化,积累了以 CNN 模型服务为主的 PAI-FCNN 方案。一方面,PAI-FCNN 提供 GPU 之外的加速方案,为应用提供硬件定制的可能性;另一方面,PAI-FCNN 也起到通往 AI 新硬件的桥梁作用,为未来新硬件的无缝适配打下坚实基础。
当前,PAI-FCNN 在以下方面提供 GPU 之外的性能优化补充:
- 低延时的推理服务
- 针对低延时场景定制的硬件架构可以在最小 batchsize 下提供最高的性能,适合延时敏感的应用。
- 极低精度模型
- 极低精度模型可以大幅提高硬件利用率,降低硬件功耗。FPGA 的硬件可订制性为极低精度模型的使用提供可能,极端例子比如用二进制表示的 BNN 网络模型。一个实际使用案例是 8 位特征值,3 位权值表示的视频检测网络。
- 对 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 当中,我们封装了常用的图像算法 backbone 网络结构如 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 框架做深度定制和改进,有以下三个原因:
- TF 是近几年最流行的深度学习框架,用户认知度高,社区活跃,上下游工具链完整,多种异构平台支持等优点,这里不再赘言;
- TF 灵活的架构和良好的抽象非常适合扩展。比如 TF 里面对 device 有严格的抽象,可以非常轻巧的实现“虚拟 GPU”功能,在集群环境下支持多租户。再比如 TensorFlow 原生支持的 XLA,是一个基于编译器的优化框架,在这个框架下,我们加入了更多的优化点和优化策略,并且做到所有的优化互不冲突。还有很多这样的例子,基于 TensorFlow 优秀的模块设计,PAI 团队做了大量的改进和扩充,且不会打乱已有的结构和功能。
- 第三,TensorFlow 在很多场景的性能都还有提升的余地。TensorFlow 作为 Google 主导的开源深度学习系统,不论单机亦或分布式都做了很多优化,对异构硬件资源也支持得非常好。但深度学习框架涉及的领域实在太多,变化太快,而 TF 又是一个庞然大物,功能非常齐全,所以在某些场景或者技术点上,并没有做到极致,还有很大的提升空间。比如广为所知的 Horovod,对 TF 的多机多卡分布式训练做了大量的优化,大部分情形是优于原生 TensorFlow 的。
PAI 团队对 TF 的诸多方面做了优化与改进,比如引入效能更好的通讯库、线程模型以及内存分配机制,改进现有的 AdamOptimzer 以应对大规模稀疏梯度,新增 OP 以支持阿里云环境的大数据 IO,基于 XLA 的大量编译优化,混合精度,与 TensorRT 深度整合,虚拟 GPU 等。一方面,我们会把自己的修改 push 回社区分支;另外一方面,我们正在积极准备和梳理代码,把 PAI 对 TF 的改动整体的开源出来,抛砖引玉,共同繁荣社区。
开源流式学习算法平台 Alink
流式计算框架 Flink 越来越受到大家的重视,在去年年底的 Flink China Forward 大会上,阿里开源了基于 Flink 的 Blink,PAI 平台也即将开放大量流式算法。
PAI 算法市场
算法市场是 PAI 希望与开发者生态兼容而推出的概念。许多开发者有这样的疑惑:业务上了云,是不是就只能使用云端提供的能力,缺少了灵活性。这一点疑惑在机器学习算法领域尤为突出,因为理论界新的算法层出不穷,用户不同的业务场景也需要定制化算法。
基于这种需求,PAI 即将开放底层的算法开发框架,欢迎个人算法开发者进行算法自定义开发并推送到 PAI 算法市场。