Analysis of Large-Scale Multi-Tenant GPU Clusters for DNN Training Workloads
这是一篇2019年的ATC, 来自微软亚洲研究院
Abstract
调度框架旨在提供如下特性
- 高效率
- 资源隔离
- 用户间公平共享
然而,基于深度神经网络 (DNN) 的工作负载主要在 GPU 上训练,与传统的大数据有两个显着差异数据分析工作负载
- 首先,从集群利用率的角度来看,GPU 代表了无法在用户之间以细粒度共享的单一资源
- 其次,从工作负载的角度来看,深度学习框架需要gang schedule,这降低了调度的灵活性,并使作业本身在运行时对故障没有弹性
在本文中
- 我们展示了来自 Microsoft 多租户 GPU 集群的长达两个月的跟踪的详细工作负载特征
- 通过将调度程序日志与来自各个作业的日志相关联,我们研究了影响多租户集群上 DNN 训练工作负载的集群利用率的三个不同问题:
- (1) 队列调度和位置约束的影响
- (2) 位置的影响关于 GPU 利用率
- (3) 训练期间的失败。
- 根据我们运行大规模操作的经验,我们提供了与用于 DNN 训练工作负载的下一代集群调度器相关的设计指南
Introduction
深度学习工作负载对集群管理系统提出了许多新的要求或限制。
- 由于机器学习算法属于浮点计算密集型,因此这些工作负载需要 GPU 等硬件加速器。然而,与 CPU 不同,加速器通常没有适当的硬件支持来细粒度共享 [21]。虽然有支持共享的软件机制,但它们通常具有很高的开销,使得跨作业共享资源具有挑战性 [40、53]。
- 此外,对大型数据集的训练通常需要使用多个 GPU [20],而机器学习框架通常需要同时调度每个 GPU 上的任务,即gang schedule [18]。这增加了共享集群中资源碎片化和低利用率的风险。
- 最后,多 GPU 训练还意味着跨 GPU 的模型参数同步,因此在调度时实现更好的局部性以允许使用更快的互连进行机器内和机器间通信非常重要。
在本文中
- 我们介绍如何设计一个基于 GPU 的用于生产的训练深度学习模型的大型多租户集群。
- Philly是 Microsoft 中的一项服务,用于训练机器学习模型,为集群上运行的作业执行资源调度和集群管理。
- 然后,我们使用来自该系统的数据,呈现详细的工作负载特征,并研究诸如gang schedule、位置要求和故障等因素如何影响集群利用率。
- 我们介绍如何设计一个基于 GPU 的用于生产的训练深度学习模型的大型多租户集群。
我们研究了位置感知调度如何影响性能和利用率的两个主要方面
首先,我们研究等待局部约束如何影响在训练作业运行之前的排队延迟。
训练工作需要gang shcedule,因为超参数是为特定的 GPU 数量配置选择的。
鉴于训练作业需要很长时间运行,而更好的局部性可以提供更快互连的可用性,进而提高性能,
Philly的调度程序在开始运行训练作业之前等待 GPU 的适当可用性
我们的研究表明,正如人们所期望的那样,放宽局部性约束可以减少排队延迟,尤其是对于使用许多 GPU 的作业
接下来,我们研究局部感知调度如何影响分布式训练作业的 GPU 利用率。
- 尽管集群中的大多数 GPU 都分配给了用户,使用中的 GPU 的硬件利用率平均只有 52% 左右。
- 我们调查了导致 GPU 利用率低的两个原因:
- (1) 单个作业在服务器之间的分布,忽略了局部性约束,增加了同步开销
- (2) 同一服务器上的不同作业的托管或打包导致争用导致干扰对于共享资源
最后,我们研究了作业可能无法成功完成的原因,并详细描述了集群中此类失败的原因。
- 大约 30% 的工作由于失败而被杀死或未成功完成。失败是由堆栈中的错误引起的,编程错误是失败的主要原因,并且发生在训练过程的早期;
- 由于像 HDFS 这样的集群组件导致的故障往往发生在训练生命周期的后期。
我们的指南
- 首先,由于缺乏局部性会影响利用率和作业运行时间,并且由于 DNN 训练作业需要长时间运行,因此调度程序应该以排队延迟为代价来遵守局部性约束。
- 其次,共享一台服务器的不同作业可能会相互干扰,从而对它们的训练时间产生不利影响。因此,调度程序应该旨在隔离专用服务器上的作业,同时实施碎片整理迁移等技术,以支持需要更多 GPU 的作业的位置限制。
- 第三,许多故障应该及早发现,远在它们被安排在更大的共享集群上之前。这可以通过在小型专用服务器池上安排每个传入作业来实现,甚至使用单个 GPU 应该能够从多 GPU 作业中捕获简单的编程和配置错误。
- 此外,对运行时故障的在线分析可以让调度程序调整其重试策略,从而避免浪费的重新执行。
Philly: System Overview
在本节中,我们将概述 Philly 的设计和架构。首先,我们描述了我们系统支持的工作负载,然后描述了集群的硬件特性。接下来,我们描述作业的生命周期。最后,我们解释了我们的数据收集管道,并强调了我们在后续部分中用于执行分析的数据。作者想指出,Philly 是由我们公司的开发团队在过去几年中开发的,并经历了多代设计。