关于深度学习:深度学习弹性数据流水线系统-GoldMiner大幅提升任务和集群效率

7次阅读

共计 3627 个字符,预计需要花费 10 分钟才能阅读完成。

第一板块:开篇

近日,阿里云机器学习平台 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

点击立刻收费试用云产品 开启云上实际之旅!

原文链接

本文为阿里云原创内容,未经容许不得转载。

正文完
 0