第一板块:开篇
近日,阿里云机器学习平台PAI和北京大学杨智老师团队单干的论文《GoldMiner: Elastic Scaling of Training Data Pre-Processing Pipelines for Deep Learning》被数据库畛域顶会SIGMOD 2023接管。
GoldMiner察看到深度学习工作中的数据预处理流水线具备无状态的特点,具备外在的资源弹性。基于此,GoldMiner将数据预处理流水线和模型训练局部拆散执行,通过主动计算图剖析来辨认无状态的数据预处理计算,并对其实现高效的并行减速和弹性伸缩,从而缓解数据预处理瓶颈,晋升训练性能。通过与集群调度器的协同设计,GoldMiner进一步施展了数据预处理计算的资源弹性,大幅晋升集群调度效率。试验显示GoldMiner可晋升训练性能达12.1倍,晋升GPU集群利用率达2.5倍。
第二板块:背景
近年来,随着GPU加速器的一直进化,以及各类软件优化技术的层出不穷,深度学习训练的计算效率正一直被晋升到新的档次。但与此同时,深度学习实质上仍是一种多阶段、多资源的工作类型:不仅须要在GPU上进行大量的训练计算,同时往往也须要CPU端的数据预处理流水线(如数据加强、特色转换等),这类预处理计算是训练出高质量模型的必要步骤。因而,GPU端训练性能的晋升也带来了更大的数据预处理压力,使后者成为新的性能瓶颈。
咱们察看到数据预处理瓶颈对工作训练性能和集群资源利用效率都有粗浅的影响。一方面,对于单个训练任务而言,数据预处理瓶颈意味着训练性能的受损。咱们在一台装备8块V100 GPU和64个vCPU核的虚拟机上应用一块GPU和不同的vCPU数进行了性能测试,察看不同模型须要多少vCPU能力达到最优性能。结果显示(下图)大部分模型都须要超过8个vCPU(即一块GPU均匀能失去的vCPU数)能力达到最优性能,甚至局部模型须要消耗掉整机八卡的64个vCPU。这就意味着这类模型在共享集群中很可能无奈失去足够的CPU资源,导致数据预处理局部性能降落,最终影响训练效率(下图右侧纵轴示意仅应用8个vCPU时能达到的绝对性能)。
而另一方面,上述的问题在云上场景中会更为严重,影响共享集群中的资源分配效率。目前企业个别都会构建或购买共享GPU集群来运行训练任务,在这种GPU集群中GPU利用率至关重要。而用户为了防止本人工作CPU有余,可能被动进步工作的CPU-GPU配比,然而这些用户自定义的CPU-GPU配比很容易导致集群资源碎片。比方某台机器上因为跑了一些CPU-GPU配比拟高的工作,最终CPU比GPU先被调配完,这样机器上闲暇的GPU会无奈被调配进来,不仅导致低廉的GPU资源被节约,也会进步工作的等待时间。咱们在阿里巴巴外部GPU集群中的察看发现有近40%的工作等待时间节约在了这种“GPU足够但CPU有余”的状况上。
解决上述的两方面问题的一种伎俩是将GPU端训练和CPU端数据预处理拆散,使这两局部计算的资源分配不用捆绑在同一台机器上。这样当机器CPU资源有余时能够应用其余机器的资源,一来能够为单个任务分配更多的CPU资源达到减速成果,同时也缓解了碎片GPU无奈调配的问题。实际上这一思路并不是首次被提出,然而要用这种形式进步工作和集群效率仍存在一系列技术挑战。
第三板块:挑战
只管已有一些计划(如tf.data service、PyTorch DPP)反对数据预处理计算的拆散执行,现有技术仍有以下几方面挑战须要解决:
- 计算切分效率:现有技术简略地通过深度学习框架提供的Dataset/DataLoader API,将这类API外部封装的计算作为数据预处理计算拆散进来。然而咱们发现即使在这类API之外,仍可能存在一部分计算是能够拆散执行的,简略的切分形式错失了这部分并行减速的机会。
- 用户代码侵入性:tf.data service [1]、PyTorch DPP [2]等技术要达到数据预处理的拆散执行,均须要用户重构这部分代码逻辑,有较大的代码侵入性。咱们心愿达到以用户通明的形式实现这一拆散的成果。
- 与集群调度的联合:在与训练拆散后,数据预处理计算实际上蕴含了外在的资源弹性,而现有技术均没有在集群调度的档次开掘这部分弹性,以晋升集群整体资源利用效率。
第四板块:破局
GoldMiner是一个主动、弹性的数据预处理服务。如图所示,GoldMiner应用data worker(DW)和training worker(TW)两类角色来别离进行数据预处理和训练两局部计算。GoldMiner可从原始用户代码中自动化地辨认出data worker局部的计算(也蕴含没有被封装在Dataset/DataLoader API中的计算)。同时GoldMiner实现了数据预处理计算的弹性伸缩,并通过与集群调度器的协同设计,进一步晋升了集群效率。
GoldMiner实现这一成果的关键在于利用了数据预处理计算的无状态性。这里的无状态是指数据预处理不依赖于模型参数,而模型参数须要在训练的每一次迭代中被重复更新,因而不依赖于模型参数的计算即可与训练局部异步化地执行。咱们晓得深度学习计算能够被表白为数据流图(DFG),GoldMiner通过对于用户DFG的剖析,主动找出其中无状态的子图。下图是一个典型举荐模型的DFG,不同于间接仅切分Dataset的做法(图中的Simple partition),GoldMiner通过辨认与模型参数的依赖关系,将切分范畴主动扩大到后续的一些特色转换操作(Expected partition)。试验显示通过这一拓展咱们能够将data worker并行减速的成果再晋升1.6倍。
基于自动化的图切分,GoldMiner进一步实现了data worker局部子图在多个data workers间的并行减速以及data workers和training workers间的数据传递。利用data worker的无状态性,这一分布式执行实现了data workers数量的动静伸缩,从而在集群闲暇资源一直变动的过程中更高效地利用资源。
为了充分发挥data worker的资源弹性,GoldMiner提供了一个data worker调度器,调度器会在工作和集群两个档次进行动静资源调整。对于每个工作,GoldMiner调整其DW和TW的尺寸以搜寻到一个扩大效率最高的配置;在集群维度上,GoldMiner在不同工作之间动静调整data workers数量调配,以优化某些全局调度指标(如最小化工作实现工夫)。这两层调整利用了一个对立的性能指标,即在DW和TW之间传递数据的队列,该队列的状态体现了DW和TW的相对速度,以及减少DW的潜在收益。在一个64-GPU的集群中进行的试验显示GoldMiner调度器能够缩短均匀工作实现工夫达2.5倍,晋升GPU分配率达2.1倍。
第五板块:利用
咱们此前曾经在客户的实在举荐模型上评测了GoldMiner的成果,结果显示GoldMiner可为用户模型减速1.43倍,并可削减13%的训练老本。目前在落地部署中。
同时咱们也开发了PyTorch版本实现,并行将与PAI-DLC集成,向用户提供数据预处理减速的能力。
第六板块:
- 论文名字:GoldMiner: Elastic Scaling of Training Data Pre-Processing Pipelines for Deep Learning
- 论文作者:赵汉宇,杨智,程羽,田超,任仕儒,肖文聪,袁满,陈浪石,刘恺博,张杨,李永,林伟
- 论文pdf链接:https://dl.acm.org/doi/pdf/10.1145/3589773
参考文献:
[1] Andrew Audibert, Yang Chen, Dan Graur, Ana Klimovic, Jiri Simsa, Chandramohan A. Thekkath. A Case for Disaggregation of ML Data Processing. https://arxiv.org/abs/2210.14826
[2] Mark Zhao, Niket Agarwal, Aarti Basant, Bugra Gedik, Satadru Pan, Mustafa Ozdal, Rakesh Komuravelli, Jerry Pan, Tianshu Bao, Haowei Lu, Sundaram Narayanan, Jack Langman, Kevin Wilfong, Harsha Rastogi, Carole-Jean Wu, Christos Kozyrakis, Parik Pol. Understanding Data Storage and Ingestion for Large-Scale Deep Recommendation Model Training. ISCA'22
点击立刻收费试用云产品 开启云上实际之旅!
原文链接
本文为阿里云原创内容,未经容许不得转载。