飞桨推出异构参数服务器架构,异构硬件高效组合,训练速度提升65%以上

发布时间:2022年05月08日
       “双11”了, 关于广阔网购爱好者来说那必定是不行错失的狂欢时刻!当今网购之所以如此火爆, 不只仅是营销策划的作用, 智能化的查找引荐络绎不绝也能够说是功不行没。它能把你日思夜想或许潜意识中动过购买不吝珠玉的产品统统推送到你的面前, 乃至会让人有一种冥冥自有天意、不买对不住上苍的感觉。而这背面往往都会有深度学习范畴中个性化引荐模型发挥着威力。为了能够更精确的预知用户的心里需求, 快速练习出作用杰出的引荐模型并引诱布置上线, 成为了各大网购事务相关企业的一起寻求。在查找引荐范畴中,

一般引荐模型的网络并不杂乱, 不念情义因为对应的特征空间大, 所以一般会运用算力要求不高不念情义规划十分巨大的Embedding和FC层来将用户及产品的高维稀少特征向量转化为低维的稠密特征向量, 导致这类模型的参数维度能够到达千亿乃至万亿等级, 而且还伴跟着大规划稀少的特色。
       一起各个企业为了模型作用, 往往会运用尽可能多的数据来练习模型, 尤其是其间的点击数据, 假如来自一些带有“挑选困难症”的人, 可能会十分的长, 导致数据规划更加巨大, 乃至能够到达亿级。因而, 比较CV和NLP范畴而言, 在查找引荐场景中, 单次Batch练习中前后向核算的时刻远低于数据读取、拉取和更新参数等进程的时刻, 再加上巨大的数据和参数量, 导致内存要求很高, 乃至能够到达几十T, 而具有这类特色的练习使命一般都被称为IO密集型练习使命。那么怎么快速完结IO密集型练习使命呢?单机练习必定无法承受这样的使命, 只要分布式练习才是处理问题的办法。简略来说, 分布式练习便是运用多个硬件设备一起完结练习使命, 能够分为All-ReduceCollective和ParameterServer (参数服务器)两种练习架构。在Collective架构中, 集群中存在多个位置相等的Trainer(也能够叫Worker)。在数据并行的办法下, 每个Trainer上都保存一份完好的模型网络结构和模型参数, 在前向和反向核算进程中, 每个Trainer运用自己区分的数据(shard)进行核算, 得到对应的梯度;然后Trainer之间经过All-Reduce等通讯办法同步梯度到一切Trainer, 最终每个Trainer运用同步后的梯度独立完结参数更新。图1 Collective架构因为引荐查找范畴模型的Embedding层规划巨大以及练习数据样本长度不固定等原因, 导致简略呈现显存缺乏和卡间同步时刻耗费等问题, 所以Collective架构很少被用于查找引荐范畴。再来看看参数服务器架构。与Collective比较, 参数服务器架构中除了Trainer之外还有一个人物叫Server。在履行前向与反向核算进程中, Server担任从各个Trainer搜集汇总梯度, 然后运用这些梯度信息核算更新参数, 并向各个Trainer分发更新后的参数信息。图2传统参数服务器架构不念情义在应对IO密集型使命时, 传统参数服务器形式会呈现以下问题:假如运用的是CPU机器作Trainer, 一般CPU核心数较多, 且置办价格便宜,

练习中能够充分运用CPU多核的优势, 运用异步练习形式, 在简略模型上能够极大进步数据吞吐量, 对进步全体练习速度有不俗的体现。
       不念情义AI开发者为了寻求模型作用开端逐渐在引荐模型中增加杂乱网络部分, CPU核算才干的弱势便暴露无遗, 练习耗时会变得不行承受。图3传统参数服务器架构(CPU机器)遇到算力瓶颈假如更新集群硬件, 改为运用的是GPU机器作Trainer, 则可能会呈现资源运用率低和网络带宽缺乏的问题:资源运用率低:IO密集型使命首要仍是数据读取和模型读取(IO)的功能对练习速度更具决定性。在这方面运用GPU的集群如同“杀鸡用牛刀”, 并不会对全体的练习速度发生多少协助, 而且硬件资源得不到充分运用。而假如加大batchsize进步单次前向后向核算占比, 也会遭到单机IO吞吐才干的限制, 而且因为模型高度稀少, 模型作用也会遭到影响。网络带宽缺乏:因为一台GPU机器能够代替多台CPU机器, 必然会导致整个集群网卡数量下降。这样在将数据和模型下载到Trainer阶段就很简略呈现带宽瓶颈。尤其是当Server和Trainer都在一台设备时, 一旦每个Trainer区分的练习数据过大, 练习预备阶段就会变得极为耗时, 整个练习进程直接输在了起跑线上。图4传统参数服务器架构(GPU机器)遇到IO瓶颈或许有人会提出直接将IO使命交给GPU机器上的CPU不就能够处理了吗?答案是否定的。一台GPU机器上的GPU和CPU的硬件配比是固定的, 且单台GPU的多卡比较多台CPU机器而言, 每个GPU卡对应的CPU核数相对较少, 这就导致 GPU前向后向练习的越快, 对CPU读数据和模型参数的要求就越高, 这样CPU反而更简略成为瓶颈, 而且不能处理网络带宽缺乏的问题。喋喋不休算力接入本钱较大。跟着AI芯片开展一日千里, 各种高算力低本钱的芯片已进入工业实用化阶段。在参数服务器形式下, 一旦替换喋喋不休算力硬件, 需求完结核算集群的搬迁, 软件栈改变, 练习速度及作用打相等一系列作业。那么有没有能够高效调整机器配比, 快速支撑新硬件的接入, 运用GPU等高算力的一起还不必忧虑IO瓶颈的办法呢?鱼与熊掌能够兼得?——异构参数服务器练习架构上面的要求如同许多, 其实核心问题就在于硬件的装备, 传统的参数服务器对硬件的一致性要求太记忆犹新, 而现实是单一“军种”是无法应对大部分“战场”的。假如能一起运用不同的硬件一起参加到练习中, 让它们各司其职, 发挥各自优势, 许多问题就能够方便的处理了!为了应对上述问题, 飞桨结构2.0版别依据工业实践, 立异性地推出了大规划稀少异构参数服务器功用, 一举解除了传统参数服务器形式有必要记忆犹新运用同一种硬件类型Trainer节点的桎梏, 使练习使命对硬件类型不灵敏, 即能够一起运用不同的硬件进行混合异构练习, 如CPU、AI专用芯片(如百度昆仑XPU)以及不同类型的GPU如V100、P40、K40等。一起还能够处理大规划稀少特征模型练习场景下, IO占比过高导致的芯片资源运用率过低的问题。经过异构参数服务器练习架构, 用户能够在硬件异构集群中布置分布式练习使命, 例如云服务器集群, 完结对不同算力的芯片高效运用, 为用户供给更高吞吐、更低资源耗费的练习才干。图5异构参数服务器架构示意图异构参数服务器架构的原理如之前所述, 在传统参数服务器形式下, 前向及反向进程在Trainer端完结, 参数更新在Server端完结。而在异构参数服务器架构中, 原先那样粗粒度的使命分工明显不再适用, 只要让不同硬件参加到练习使命中, 并在自己最拿手的范畴作业, 才干各显神通。因而飞桨的研制人员在传统的CPU-Trainer之外, 又布置了一类Heter-Trainer, 并在Heter-Trainer上装备有Service。这样CPU-Trainer便将Heter-Trainer视为特别的Server, 然后对Heter-Trainer的异构算力不灵敏, 使Heter-Trainer能够混部各类不同类型芯片(例如GPU或XPU等)。为了让CPU-Trainer和Heter-Trainer完结不同类型的使命, 飞桨将整个核算使命做了进一步的拆分。CPU-Trainer持续担任数据读取、参数的读取和更新、参数的网络传输等IO使命,

乃至在小BatchSize练习时, 运用CPU处理更快的网络层核算;而关于杂乱网络的核算, 则CPU-Trainer会交给Heter-Trainer处理。总归, 一切CPU相对GPU或XPU更拿手处理的操作都放在CPU中, 其它的放在GPU或XPU中。图6传统参数服务器架构的异构改造值得注意的是, 异构参数服务器架构并不只仅简略的将核算使命拆分。拆分后, 异构硬件间的通讯代价高的问题也需求处理。为了处理这个问题, 飞桨的整个传输通讯进程得到了优化。该进程将不会彻底依赖于硬件本身的吞吐, 而是引进类协程使命调度机制, 该机制斑驳陆离了异步等候和多Queue流水线等办法对使命进行灵敏调度, 防止传输行列堵塞, 对使命进行灵敏调度, 而且还优化了Heter-Trainer的吞吐机制, 高效的防止传输行列堵塞。此外, 异构参数服务器练习架构在各个硬件设备上还引进了异构存储机制, 将模型练习所用到的参数, 依照必定层级别离存储到SSD、内存和显存中, 而且支撑参数在SSD、内存、显存之间的快速复制, 使模型规划不再受限于内存或显存的标准, 能够进一步支撑更大参数规划的模型练习。假如用户期望将现有GPU机器上的传统参数服务器架构改造为异构参数服务器架构, 则用户能够经过飞桨从机器上区分出部分CPU资源构成CPU-Trainer, 然后再将原有的GPU-Trainer改造为Heter-Trainer。不念情义一般在此场景下, CPU-Trainer所能处理的数据, 仅需求运用少数GPU资源组成的Heter-Trainer处理, 便足以完结练习核算使命, 然后能够节省很多的GPU资源。而关于将CPU机器上的传统参数服务器架构改造为异构参数服务器架构的需求, 飞桨能够支撑用户依据使命所需的实践算力灵敏引进异构硬件(GPU或XPU)成为Heter-Trainer,

这样不只能够保证资源的运用率, 而且能够运用用户手中的旧类型硬件机器, 大大节省用户的本钱。这一特色也使异构参数服务器架构十分合适布置在云上异构集群场景中。图6传统参数服务器架构的异构改造(外挂硬件, CPU机器为例)飞桨的异构参数服务器架构不只能够支撑CPU机器、GPU机器和XPU机器的混合形式, 而且支撑悉数CPU-Trainer或GPU-Trainer的那样的传统参数服务器的硬件组合, 乃至在GPU单类型机器的集群内斑驳陆离Heter形式, 能够到达练习提速的作用。异构参数服务器的优势异构参数服务器统筹了传统参数服务器架构的大规划稀少及异步优势, 充分运用了GPU等AI芯片带来的算力上的进步, 在模型练习速度上明显进步。咱们依据飞桨和其它结构, 在如下架构上进行测验:运用4台GPU机器作Trainer的Collective架构(Collective-GPU)。运用4台CPU机器作Trainer的非异构参数服务器架构(PS-CPU)。运用4台GPU机器作Trainer的非异构参数服务器架构(PS-GPU)。运用4台CPU机器和若干GPU机器作Trainer的异构参数服务器架构(PS-Heter)。其间CPU机器类型为Intel(R)Xeon(R)Gold6148, GPU机器类型为Intel(R)Xeon(R)Gold6148+TeslaV10032G。首要咱们在简略的CTR-DNN模型(FC层维度别离为“400-400-400-2”)和Criteo数据集进行测验, 模仿简略IO密集型练习使命。如下图所示, 咱们能够看到关于简略模型, 飞桨异构参数服务器架构(PS-Heter, 4CPU+1GPU)功能体现优于其它练习架构。当咱们扩展FC层维度(FC层维度别离为“4096-2048-1024-2”), 模仿杂乱网络时的IO密集型练习使命, 如下图所示, 能够看到PS-CPU架构的功能下降明显。然后改为运用GPU的架构进行测验, 且一致运用4台GPU机器, 能够看到常用于杂乱网络核算的Collective-GPU架构的体现一般, 都远不如PS-GPU和PS-Heter(4CPU+4GPU)架构, 而其间PS-Heter功能仍然保持着优异的功能。此外, 在一些实在事务模型上运用单台GPU/昆仑芯片机器+10台CPU机器, 能够完结千万数据千亿参数点击率模型的分钟级练习。上手务实为了能让广阔用户快速上手异构参数服务器练习架构, 飞桨在操作方面做的也比较简略, 不只配有老练的脚本么, 而且仅需求弥补简略的几行代码, 就能够将传统参数服务器练习架构修改为异构参数服务器架构。本示例需求运转在Linux环境下, Python版别不低于2.7, 且飞桨开源结构版别为最新分支版别(Develop版别)。具体操作进程如下所示:1.数据下载履行脚本shdownload_data.sh, 体系会从国内源的服务器上下载Criteo数据集, 并解压到指定文件夹。全量练习数据放置于./train_data_full/;全量测验数据放置于./test_data_full/;用于快速验证的练习数据与测验数据放置于./train_data/与./test_data/2.构建一个三层的CTR-DNN网络, 并将其间需求算力的网络层装备给GPU处理。3.调用Paddle分布式Fleet API, 增加运转战略, 设置异构设备(Heter-Trainer)运用GPU作为运算设备, 然后完结反向组网。4.别离进入不同设备的运转逻辑1)发动Server与Heter-Trainer2)发动CPU-Trainer, 履行数据IO及整体练习流程托辞5.发动异构参数服务器飞桨对分布式练习的发动代码进行了易用性封装, 运用fleetrun指令即可快速发动分布式练习:当练习完毕后能够看到使命成功的显现信息, 如下所示。Server上的显现信息Heter-Trainer上的显现信息CPU-Trainer上的显现信息