【SIGMOD 2023】深度学习弹性数据流水线系统GoldMiner,大幅提升任务和集群效率

news2024/10/6 14:29:24

第一板块:开篇

近日,阿里云机器学习平台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时能达到的相对性能)。

image.png

而另一方面,上述的问题在云上场景中会更为严重,影响共享集群中的资源分配效率。目前企业一般都会构建或购买共享GPU集群来运行训练任务,在这种GPU集群中GPU利用率至关重要。而用户为了避免自己任务CPU不足,可能主动提高任务的CPU-GPU配比,然而这些用户自定义的CPU-GPU配比很容易导致集群资源碎片。比如某台机器上由于跑了一些CPU-GPU配比较高的任务,最终CPU比GPU先被分配完,这样机器上空闲的GPU会无法被分配出去,不仅导致昂贵的GPU资源被浪费,也会提高任务的等待时间。我们在阿里巴巴内部GPU集群中的观察发现有近40%的任务等待时间浪费在了这种“GPU足够但CPU不足”的情况上。

image.png

解决上述的两方面问题的一种手段是将GPU端训练和CPU端数据预处理分离,使这两部分计算的资源分配不必捆绑在同一台机器上。这样当机器CPU资源不足时可以使用其他机器的资源,一来可以为单个任务分配更多的CPU资源达到加速效果,同时也缓解了碎片GPU无法分配的问题。实际上这一思路并不是首次被提出,然而要用这种方式提高任务和集群效率仍存在一系列技术挑战。

第三板块:挑战

尽管已有一些方案(如tf.data service、PyTorch DPP)支持数据预处理计算的分离执行,现有技术仍有以下几方面挑战需要解决:

  1. 计算切分效率:现有技术简单地通过深度学习框架提供的Dataset/DataLoader API,将这类API内部封装的计算作为数据预处理计算分离出去。然而我们发现即便在这类API之外,仍可能存在一部分计算是可以分离执行的,简单的切分方式错失了这部分并行加速的机会。
  2. 用户代码侵入性:tf.data service [1]、PyTorch DPP [2]等技术要达到数据预处理的分离执行,均需要用户重构这部分代码逻辑,有较大的代码侵入性。我们希望达到以用户透明的方式实现这一分离的效果。
  3. 与集群调度的结合:在与训练分离后,数据预处理计算实际上蕴含了内在的资源弹性,而现有技术均没有在集群调度的层次挖掘这部分弹性,以提升集群整体资源利用效率。

第四板块:破局

GoldMiner是一个自动、弹性的数据预处理服务。如图所示,GoldMiner使用data worker(DW)和training worker(TW)两类角色来分别进行数据预处理和训练两部分计算。GoldMiner可从原始用户代码中自动化地识别出data worker部分的计算(也包含没有被封装在Dataset/DataLoader API中的计算)。同时GoldMiner实现了数据预处理计算的弹性伸缩,并通过与集群调度器的协同设计,进一步提升了集群效率。

image.png

GoldMiner实现这一效果的关键在于利用了数据预处理计算的无状态性。这里的无状态是指数据预处理不依赖于模型参数,而模型参数需要在训练的每一次迭代中被反复更新,因此不依赖于模型参数的计算即可与训练部分异步化地执行。我们知道深度学习计算可以被表达为数据流图(DFG),GoldMiner通过对于用户DFG的分析,自动找出其中无状态的子图。下图是一个典型推荐模型的DFG,不同于直接仅切分Dataset的做法(图中的Simple partition),GoldMiner通过识别与模型参数的依赖关系,将切分范围自动扩展到后续的一些特征转换操作(Expected partition)。实验显示通过这一拓展我们可以将data worker并行加速的效果再提升1.6倍。

image.png

基于自动化的图切分,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倍。

image.png

第五板块:应用

我们此前已经在客户的真实推荐模型上评测了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

免费领取 交互式建模PAI-DSW、模型训练PAI-DLC 5000CU*H计算资源包,以及价值500元模型在线服务 PAI-EAS 抵扣包。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/669808.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

redis登录常见报错

第一次接触redis登录的时候遇见几个报错 一、使用以下两个命令报错: ./redis-cli -h 127.0.0.1 -p 6380 ./redis-cli -p 6380 报错:Could not connect to Redis at 127.0.0.1:6380: Connection refused 应该和redis.conf中配置的bind字段的IP有关…

一文全揽C/C++中所有指针相关知识点(从原理到示例,学不完根本学不完!!!!)

本篇会对C/C中【常见指针相关知识】一直进行总结迭代,记得收藏吃灰不迷路,一起学习分享喔 请大家批评指正,一起学习呀~ 一、指针基本知识1.1 指针的定义1.2 (*) 和( &) 运算符1.3 如何声明…

SM国密算法(四) -- SM3算法

一、简介 SM3密码杂凑算法是中国国家密码管理局2010年公布的中国商用密码杂凑算法标准。适用于商用密码应用中的数字签名和验证。 SM3是在[SHA-256]基础上改进实现的一种算法,其安全性和SHA-256相当。SM3和MD5的迭代过程类似,也采用Merkle-Damgard结构。…

OpenCV(图像处理)-基于python-滤波器(低通、高通滤波器的使用方法)

1.概念介绍2. 图像卷积filter2D() 3. 低通滤波器3.1 方盒滤波和均值滤波boxFilter()blur() 3.2 高斯滤波(高斯噪音)3.3 中值滤波(胡椒噪音)3.4 双边滤波 4. 高通滤波器4.1Sobel(索贝尔)(高斯&am…

STL之set和map

目录 一. 原型二. 模板参数适配三. 迭代器四. 插入函数的修改四. 代码 一. 原型 简单实现的红黑树 template<class K, class V> struct RBTreeNode {RBTreeNode<K, V>* _left;RBTreeNode<K, V>* _right;RBTreeNode<K, V>* _parent;pair<K, V> …

FPGA_学习_11_IP核_RAM_乒乓操作

本篇博客学习另一个IP核&#xff0c;RAM。 用RAM实现什么功能呢&#xff1f; 实现乒乓操作。 乒乓操作是什么呢&#xff1f; 参考&#xff1a; FPGA中的乒乓操作思想_fpga中乒乓操作的原因_小林家的龙小年的博客-CSDN博客 何为乒乓操作_fanyuandrj的博客-CSDN博客 以下是本人理…

Clion开发STM32之日志模块(参考RT-Thread)

前言 日志对于开发和排错方面有着很重要的影响。通过查看RT-Thread的源码&#xff0c;将日志的打印输出划分到具体的文件和通过宏定义对具体的日志等级进行划分&#xff0c;这样就比较方便。结合此源码的形式将其分离出来&#xff0c;作为自己项目的日志框架进行使用分为日志驱…

crossover软件下载2023最新版虚拟机

在Mac系统中一直存在一个比较令用户们头疼的问题&#xff0c;那就是安装不了想要的Windows软件。如果使用的第一台电脑就是MacBook那接触到的Windows软件想必并不是很多。但我们中的大多数人都是从小先学习了Windows的操作系统&#xff0c;再过渡到Mac系统上的。 那有小伙伴会…

最新基于MATLAB 2023a的机器学习、深度学习实践应用

MATLAB 2023版的深度学习工具箱&#xff0c;提供了完整的工具链&#xff0c;使您能够在一个集成的环境中进行深度学习的建模、训练和部署。与Python相比&#xff0c;MATLAB的语法简洁、易于上手&#xff0c;无需繁琐的配置和安装&#xff0c;能够更快地实现深度学习的任务。 M…

Flink流批一体计算(4):Flink功能模块

目录 Flink功能架构 Flink输入输出 Flink功能架构 Flink是分层架构的分布式计算引擎&#xff0c;每层的实现依赖下层提供的服务&#xff0c;同时提供抽象的接口和服务供上层使用。 Flink 架构可以分为4层&#xff0c;包括Deploy部署层、Core核心层、API层和Library层 部署层…

基于SSM的宠物领养系统的设计与实现

1.引言 动物作为人类的宠物已经有几千年的历史了&#xff0c;尤其是猫和狗因其天性被人类所喜爱和推崇&#xff0c;好多的成语故事、俗语等都及它们有关。但是&#xff0c;近几年来由于生活节奏的加快&#xff0c;人们的压力增大&#xff0c;没有时间和空间去照顾宠物&#xf…

ProGuard 进阶系列(三) Java 类文件解析

书接上文&#xff0c;当我们从用户的配置文件中读取到所有的配置信息后&#xff0c;下一步便是将配置中的指定的类文件进行读取&#xff0c;构建需要混淆的 Java 类文件的语法树。在阅读类文件之前&#xff0c;先来看一下输入输出参数中的内容&#xff0c;我使用的是一个 Andro…

大一下暑期计划 + 2023字节青训营预告直播

目录 &#x1f33c;前言 &#x1f339;后端学习方法 &#x1f333;1&#xff0c;层次 &#x1f333;2&#xff0c;体系 &#x1f333;3&#xff0c;算法和数据结构 &#x1f333;4&#xff0c;总结 &#x1f339;前端学习方法 &#x1f333;基础 &#x1f339;求职中如…

如何在Microsoft Excel中使用LEN函数

如果你曾经想尝试查找一行文本中的字符数&#xff0c;你可以使用Microsoft Excel来查找&#xff0c;这要归功于LEN函数。以下是如何使用它。 一、什么是 LEN 函数 LEN函数是一个简单的计算函数&#xff0c;用于计算给定文本字符串中的所有字符&#xff0c;包括数字、字母、特…

【数据库课设】图书馆资源管理系统 源码+流程图+结构设计(借还图书 逾期罚款 图书管理 读者管理 信息查询)python实现

文章目录 一 实现功能&#xff08;1&#xff09;管理员功能&#xff08;2&#xff09;读者功能 二 数据流图三 概念结构设计四 文件目录五 源码&#xff1a;main.py六 运行截图 一 实现功能 &#xff08;1&#xff09;管理员功能 一个管理员编号对应一个密码&#xff0c;且需…

redis—安装以及可视化

前言 redis 是一种非关系型数据库&#xff0c;什么是非关系型数据库&#xff0c;之前我们在mysql专栏 也有提到过&#xff0c;这边就不再过多的赘述&#xff0c;忘记了的小伙伴可以再次阅读这篇文章 终于明白了数据库的【关系型】与【非关系型】 其实这还是挺重要的&#xff…

ruoyi+vue回显数字的问题,解决方案

在项目中用ruoyi框架和前端vue进行开发&#xff0c; 需求是在前端生成下拉框&#xff0c;下拉框中的内容需要调用后端接口进行数据返回&#xff0c; 现在新增的时候&#xff0c;数据已经返回了&#xff0c;但是再修改的时候&#xff0c;进行回显数据导致前端列表中展示出来的…

城市排水监测系统为城市排水防涝提质增效

城市化进程中&#xff0c;城市排水系统成为城市基础设施建设的重要组成部分。然而&#xff0c;随着气候变化和城市建设规模的扩大&#xff0c;极端天气和内涝风险不断增加&#xff0c;城市的排水系统面临巨大挑战。因此&#xff0c;建立一套智能化城市排水监测系统&#xff0c;…

【python】一些常用的pandas技巧

有了gpt之后&#xff0c;确实很多代码都可以让gpt给改错。嘎嘎香 merge多个dateframe https://stackoverflow.com/questions/44327999/how-to-merge-multiple-dataframes data_net [a,b,c,d] net_merged reduce(lambda left,right: pd.merge(left,right,on[key column],ho…

小程序安全指南:保护用户数据的最佳实践

第一章&#xff1a;引言 近年来&#xff0c;小程序已成为移动应用开发的重要组成部分。它们为用户提供了方便的功能和个性化的体验&#xff0c;然而&#xff0c;与此同时&#xff0c;小程序安全问题也引起了广泛的关注。保护用户数据是开发者应该高度重视的问题。在本指南中&a…