Multi-Resource Interleaving for Deep Learning Training(论文笔记)

问题

训练不同的DL模型有不同的资源需求,在各种资源上的性能瓶颈也不同。GPU不是唯一的瓶颈。性能瓶颈可能在存储I/O(微小模型)、CPU(强化学习中的模拟)以及网络IO(大型DL模型的分布式训练)上。因此只基于GPU调度DL训练任务,会导致资源远远没有被完全利用。

DL训练任务的计算模式是阶段式和迭代式的。即一个DL训练任务包含很多次迭代,每次迭代又分成一系列的阶段,包括数据读取、预处理、前向传播、反向传播和梯度同步。其中,每个阶段大量运用某一种特定资源。通过交错不同任务的不同阶段,多个任务可以被打包在同一个资源集合上执行。

本文提出了Muri,一种用于DL的多资源集群调度器,利用多资源交错来实现较高的资源利用率,减少任务完成时间(JCT)。核心思想是交错多个不同性能瓶颈的任务,来高效利用资源。

概述

用户提交DL训练任务到Muri调度器。Muri调度器保持一个任务队列缓冲提交的任务,并做任务调度决定。调度器包括以下三个部分:

Muri scheduler

Resource profiler

资源分析器对每个作业的每种资源类型的资源使用情况进行剖析,并估计不同作业组的交错效率,用作调度算法的输入。 首次提交作业时,作业分析器会执行几次试运行以测量资源使用情况和执行持续时间。 对于训练之前提交过的相同模型的作业,可以重复使用过去收集的资源分析。 给定一个作业组,资源分析器使用资源分析来估计交错效率。

Job scheduler

作业调度器将作业从作业队列调度到集群中的机器上。 在作业到达和作业完成时,调用调度程序。 调度器根据不同作业组的交错效率,采用多轮作业分组算法来决定哪些作业组成一组来共享资源,以最大限度地提高资源利用率。 该算法可以找到两种资源类型的单GPU作业的最优分组策略。 作者扩展了算法以处理两种以上的资源类型并支持多 GPU 作业。 该算法避免了多 GPU 作业的跨组打包,以最大限度地减少交错开销。

Worker monitor

Worker Monitor 收集每台机器的资源信息并跟踪每项作业的进度。资源信息包括每台机器上资源的可用容量。 针对 GPU 集群上的 DL 工作负载,worker monitor 收集每台机器上 GPU 的数量和拓扑,以便调度程序可以使用这些信息来放置多 GPU 作业。 当计划的作业完成时,监视器会通知调度程序,释放的资源可以用于队列中的作业。

Muri executor

每台机器上都有一个 Muri 执行器。 执行器从作业调度器接收作业和分组策略,并根据分组策略在机器上执行作业。 executor 还向 worker monitor 报告资源利用率和作业进度。 训练过程中一旦出现故障,executor会将故障信息上报给worker monitor,并协助处理故障。

Muri设计

需要两种资源的单GPU任务调度

这里的两种资源类型是指CPU和GPU。可以允许两个任务打包在一起,交替使用CPU和GPU。

在这里插入图片描述

获取资源交错效率

首先计算资源的交错效率 γ \gamma γ,是资源不是空闲的时间占比,计算方式如下:
( t i j t_i^j tij表示任务i使用资源j的持续时间)

在这里插入图片描述

在这里插入图片描述

计算最优分组方案

目标是最大化整个分组方案的交错效率,提高资源的利用率。作者把这个问题转换为了求最大权重匹配的问题。把任务视为一个顶点,把两个任务的资源交错效率视为连接这两个顶点的边,然后求最大权重匹配,即可达到交错效率最大化的目标。

Blossom算法是求最大权重匹配的一个多项式算法,时间复杂度 O ( ∣ V ∣ 3 ) O(|V|^3) O(V3)

多GPU多资源任务调度

处理多资源类型

这里的多资源指GPU、CPU、存储IO和网络IO。

第一个问题是计算交错的效率。需要枚举所有的交错顺序,计算出交错效率,然后取最好的。下图是两种不同的交错顺序:

在这里插入图片描述

一旦顺序决定好,就可以计算交错效率。方式如下:
(k是资源类型的数量,p是一个组中的作业数量)

在这里插入图片描述

在这里插入图片描述

第二个问题是给作业分组。给定k种资源类型,一个组至多包含k个任务。作者设计了一个多轮启发式算法。主要的思想是,将匹配过程分成多轮,每轮使用Blossom算法来分组任务。即在每轮,得到一个最大权重的匹配,意思是这两个任务是一组的,然后将这两个节点合并成一个节点。之后这个节点被用于下一轮和其他节点匹配。直到一个节点包括k个任务为止(k是资源类型的数量,一般是4,也就是进行两轮)。

处理多GPU任务

一个组中的一个任务的训练速度取决于这个组中其他任务的训练速度。一个多GPU分布式训练任务可能会被分到多个组,比如一个组共享一个GPU。这个分布式任务可能会和不同的任务进行交错,因为所有的worker必须同步训练,所以训练慢的组会影响到训练快的组。例子如下:

在这里插入图片描述

解决办法就是,把多GPU任务分到不同的桶中。一个桶中的任务使用同样数量的GPU进行训练。Muri应用多轮分组算法来给同一个桶中的任务分组,即分到一组的任务有同样的GPU数量需求。

假如有4个任务A、B、C、D,它们都使用5个GPU进行训练。在第一轮中,A和B分到一组,C和D分到一组。在第二轮中,A,B,C和D被并到一组,使用相同数量的GPU资源。

优化平均任务完成时间

Muri按照优先级调度任务, p i p_i pi是任务i的优先级,值越低,优先级越大。对于任务剩余完成时间已知的情况,采用SRSF计算优先级,为 p i = r i × g i p_i = r_i\times g_i pi=ri×gi(其中 r i r_i ri是剩余完成时间, g i g_i gi是使用的GPU数量)。对于任务完成时间未知的情况,使用2D-LAS调度,即 p i = a i × g i p_i = a_i \times g_i pi=ai×gi a i a_i ai是任务i已经运行的时间)。

现实中处理多资源的使用

实际上,不同资源类型的使用是重叠的。对于某个作业的每个时间点,作者将资源使用率最高的资源类型视为该作业使用的资源类型。如果作业的资源使用低于某一阈值,就将其视为零(例如,可能忽视Storage的使用)。使用这种方案,可以估计出使用每种资源类型的持续时间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值