Aryl: An Elastic Cluster Scheduler for Deep Learning
摘要
- 训练和推理中的问题:
- 当流量负载较低时,推理集群的 GPU 利用率较低
- 由于缺乏资源,训练作业往往需要较长的排队时间
- 我们引入了 Aryl,一个新的集群调度器来解决这些问题。
- Aryl 引入了容量贷款,将空闲推理 GPU 服务器贷款给训练工作。它进一步利用弹性扩展来扩展培训作业的 GPU 分配,以更好地利用借出的资源。
- 容量借贷和弹性扩展为集群管理带来了新的挑战。
- 当需要返回借出的服务器时,我们需要最小化作业抢占的数量
- 当更多的 GPU 可用时,我们需要将它们分配到弹性作业,并最小化作业完成时间(JCT)
- Aryl使用基于原则的启发式方法来解决这些组合问题。
- 它引入了服务器抢占成本的概念,并在服务器回收期间使用贪婪的方法降低这一成本。
- 它进一步依赖于为弹性工作的每个额外工人定义的 JCT 缩减值,以多选择背包问题解决调度问题。
- 在64-GPU 测试平台上的原型实现和超过50,000个生产作业的15天跟踪的大规模模拟表明
- Aryl 在平均排队时间和 JCT 方面带来了1.53 x 和1.50 x 的减少
- 集群调度器提高了高达26.9% 的集群使用率
引言
现在的通常做法
分别构建和管理两种类型的 GPU 集群
- 一种用于培训
- 一种用于推理
这是因为,对于相同的模型
- 推理比训练需要更少的计算和 GPU 内存,并且不太可能利用训练 GPU 的众多核心[11,35,39]。
- 推理集群通常使用较弱的 GPU,比如 Nvidia T4
- 训练集群使用 Nvidia V100和 A100
这种分离给双方都造成了问题, 尤其是对训练工作。
- 具体来说,由于白天的流量模式,推断集群的利用率通常很低(< 40%)。
- 与此同时,培训工作在开始之前经历了漫长的排队过程
- 从超过50,000个工作的15天的跟踪中可以看出,平均排队次数超过3,000次,95% 的排队次数接近10,000次。
- 排队时间长是由于高集群利用率和 GPU 资源碎片造成的。
为了解决上述问题,我们提出了容量贷款
- 以允许推理集群在低流量时期贷款空闲的 GPU 服务器来运行培训作业,并在推理工作负载再次增加时收回它们。
- 容量贷款缓解了推理的利用率问题和训练的排队问题。对 GPU 类型要求不严格的训练工作是可行的。
- 对于借用服务器,我们需要确保它们在可用时被培训作业迅速利用。
- 我们从弹性伸缩中获得灵感,用于培训工作以更好地使用借用服务器。
- 弹性伸缩允许正在运行的作业向外伸缩或向内伸缩,以更好地利用动态变化的资源池。
- 它还有助于减少排队延迟,因为弹性作业可以首先从少量工作线程开始,并在有更多资源可用时增加其工作线程。
- 以允许推理集群在低流量时期贷款空闲的 GPU 服务器来运行培训作业,并在推理工作负载再次增加时收回它们。
容量加载和弹性伸缩为集群调度创造了新的自由度。随着我们在新的设计领域中的不断探索,我们遇到了一些新的挑战,这些挑战必须在我们获得收益之前加以解决。
首先,虽然贷款决策可以完全由推理集群调度程序来确保推理工作负载不受影响,但是回收更加复杂。
- 当推断集群需要回收一些租借的服务器时,训练调度程序必须抢占这些服务器上所有正在运行的作业。考虑到与抢占相关的高开销和长时间运行时间,调度程序必须仔细选择服务器,以最小化总的抢占。
其次,作业调度问题在具有弹性伸缩性的情况下会更加复杂。
- 资源配置必须考虑需求固定的非弹性工作和需求可变的弹性工作的组合。
- 我们发现经典的调度策略,如最短作业优先在弹性情况下不在有用,并在只有两个作业的情况下找到 JCT的最优解是困难的
- 给定分配结果,调度程序仍然需要确定worker-server的位置,以最小化碎片,由于容量借用导致服务器是GPU异构的。
我们解决这些挑战的关键直觉
- 优先考虑每个工作所需的最小资源而不是弹性需求
- 优先考虑专用训练服务器而不是借用推理服务器
- 这是有意义的,因为弹性工作的最小需求等同于非弹性工作,不分配资源是有害的,但弹性部分可以在以后实现,而不拖延工作。
因此,我们的解决方案遵循上述直觉,呈现出两阶段结构。
- 对于回收
- 我们首先杀死在租借服务器上运行的弹性工作线程,因为停止它们不会导致任何作业级别的抢占。
- 当抢占成为不可避免的,我们将问题描述为一个具有依赖项值的背包问题[32] ,并开发一种有效的启发式方法来解决它
- 对于资源配置
- 我们首先分配非弹性工作和弹性工作的基本需求,目的是创造尽可能多的工作。
- 第一阶段可以使用 SJF 来减少排队时间
- 然后,如果资源允许,我们扩展调度的弹性作业。
- 第二阶段则是一个多项选择的背包问题 ,以最小化运行时间
- 这在实践中通常可以使用动态规划来解决:
- 我们通过将非弹性作业放置到训练服务器
- 并尽可能将弹性作业放置到租借服务器
- 作业根据最佳拟合递减策略进行排序,以解决装箱和最小化碎片。
- 我们首先分配非弹性工作和弹性工作的基本需求,目的是创造尽可能多的工作。
- 对于回收
Aryl,这是一个新的集群调度器,可以实现弹性扩展的容量借贷。
- Aryl 有一个协调器,通过执行来自推断调度器的关于何时以及如何贷款或回收的指令,以及通过决定返回哪些借出的服务器以回收,来管理容量贷款。
- 然后作业调度器周期性地确定分配和放置,并根据资源和作业动态对新的和现有的弹性作业进行扩展。
- 为了实用起见,Aryl 只考虑大型 DNN 的弹性伸缩
我们将我们的贡献总结如下。
- 我们报告了培训和推理分组单独管理的问题,即推理分组的利用率低,培训分组的排队时间长,这些问题是从生产性的图形处理单元分组来衡量的。
- 我们提出集群级容量借贷和作业级弹性调度两个新的集群调度控制旋钮,以解决上述问题。
- 我们研究由此产生的集群调度问题,发展一种关键的直觉,优先考虑每项工作所需的最低资源,以解决弹性问题,并使用一种有原则的方法来描述和解决每个问题。
- 我们设计并实现了集成了我们的解决方案的新型集群调度器 Aryl。Aryl 与现有资源管理框架协同工作,可以部署。通过试验台试验和大规模仿真验证了其优越性能。