01
背景
02
业务价值
GPU 共享调度允许多个任务共享 GPU 计算资源。这意味着多个任务可以同时在 GPU 上执行,从而实现多方面的业务价值 :
03
应用场景
04
现状问题与研究
在设计 GPU 共享调度时, 考虑资源利用率的同时, 还要保障隔离安全, 防止或降低资源冲突, 确保任务能高效分配、运行在计算单元上。本文着重调研总结了一些研究成果。概要如下:
05
NvShare:在 DL 开发中使用动态内存管理
NvShare 是一种 GPU 共享机制。允许多个容器同时安全地在同一 GPU 上运行,每个进程容器都拥有可用的全部 GPU 显存。
通过使用 UVM 统一内存管理技术,将 CUDA 的显存分配接口转发为 UVM 接口,使得程序可以使用系统内存作为显存的补充,避免超过显存时出现 OOM 的问题。透明地启用 GPU 页面错误(page fault)以使用系统 RAM 作为交换空间(swap)。
采用时间片轮转方式管理 GPU 算力调用,在给定时间量(TQ)内为单个进程提供 GPU 独占权限,从而避免性能抖动,默认 TQ 是 30 秒。
统一内存管理
06
HieD:DL GPU 集群共享保障
HiveD 将 GPU 资源抽象分为两层,即虚拟私有集群(VC)层和物理集群层。为每个租户提供一个 VC。每个 VC 都预分配了一组 Cell 。亲和结构与相应私有集群相同。确保任何调度决策都被约束在 VC 视图定义的边界内,从而保障共享安全。
私有虚拟集群系统架构
如果没有任何 GPU 在使用,则逻辑 Cell 将与物理集群解除绑定。为了提高利用率,可抢占低优先级作业机会性地消耗 GPU。这种动态绑定比静态绑定更灵活:动态绑定可以避免硬件出现故障的物理单元;可以避免低优先级作业不可抢占性占用 Cell;还可以通过打包 Cell 减少 GPU 碎片。
多级 Cell:
私有虚拟集群系统架构
如图示例,其中有 4 个级别的 Cell 结构:分别在 GPU(级别 1)、PCIe 交换机(级别 2)、CPU 插槽(级别 3)和 Node 级别(级别 4)。该集群有 1 个机架,由 4 个 8 卡 GPU 节点组成,由 3 个租户( A、B 和 C)共享。每个租户的 VC 的 cell 分配汇总在图中表格。租户 A 和 B 的 VC 都预留了一个 L3 cell(同一个 CPU 插槽下有 4 个 GPU),一个 L2 cell(同一个 PCIe 下有 2 个 GPU),一个 L1 cell (单 GPU)。大租户 C 预留了二个 L4 cell(节点级别)和一个 L2 Cell。
为了在 VC 中分配一个 level-k Cell,算法从 level-k 开始,如果需要则向上移动:它首先检查是否有空闲的 level-k Cell 可用,如果可用则分配一个。如果没有,该算法将按级向上移动,直到有空闲 level-l Cell 可用,其中 l>k。然后将一个空闲的 level-l Cell 递归地拆分为多个较低级别的 cell,直到一个 level-k Cell 可用。每次分裂都会在下一层产生一组空闲 Cell,这些 Cell 将被添加到下一层的空闲列表中。其中一个新的低级 Cell 再次分裂,直到产生空闲 level-k Cell。
Cell 释放过程以自下而上的方式进行。当一个 level-k Cell c 被释放时,算法将 c 增加到 level-k 空闲列表中,检查 c 的同级 Cell,如果 c 所有的同级 Cell 都是空闲的,算法将其合并到 level-(k+1)Cell,合并过程递归进行。通过这种方式,Cell 分配算法减少了 GPU 碎片,并创造机会调度更高级别 Cell 的作业。
在处理分配请求之前,算法确保该请求是合法的,即它在该级别的 VC 分配配额内。
如果原始 VC 分配可行,在层次均匀可组合的条件下,Cell 分配算法满足任何合法的 Cell 分配。
07
TGS:DL 容器云中的透明 GPU 共享
TGS 是一个用于在容器云中进行深度学习训练的 GPU 共享系统,旨在实现以下目标。
-
透明度。该系统应该对应用程序透明,这样用户就可以使用任何软件在容器中开发和训练 DNN 模型。 -
高 GPU 利用率。系统应实现计算和内存资源的高 GPU 利用率。 -
性能隔离。系统应为 DL 作业提供性能隔离。生产作业不应受到机会性作业的重大影响。 -
故障隔离。应用故障应由容器隔离。一个容器中的应用故障不应导致其他容器中的应用崩溃。
TGS 架构
如图所示,TGS 是一种操作系统层方法:它位于容器和 GPU 之间。容器和应用程序对 TGS 一无所知。用户可以使用任何自定义框架来开发和训练 DNN 模型。GPU 作为普通 GPU 暴露给容器。容器中的进程向 GPU 发布 GPU 内核,即在 GPU 上执行的函数,就像使用专用 GPU 一样。TGS 使用轻量级间接层在多个容器的工作负载之间共享 GPU。间接层拦截来自容器的 GPU 内核调用,并对这些 GPU 内核进行调节,以控制每个容器的资源使用情况。
TGS 利用自适应速率控制机制和透明的统一内存机制,解决了在操作系统层提供透明 GPU 共享的两个难题。第一个挑战是如何在容器之间自适应地共享 GPU 计算资源,而无需应用程序知情。为应对这一挑战,TGS 的速率监控器会监控每个容器的性能,并提供 CUDA 块(GPU 上的基本调度和执行单元)的数量,作为控制环的实时信号。根据该信号,TGS 的速率控制会自适应地控制每个容器向 GPU 发送 GPU 内核的速率。控制环会自动收敛,使机会型作业尽可能多地利用剩余资源,以实现较高的 GPU 利用率,同时又不会对生产作业的性能造成很大影响。
第二个挑战是实现透明的 GPU 内存超量订购。AntMan 修改了 DL 框架,以便在显存被超额订阅时交换显存。操作系统层解决方案 MPS 不支持显存超量订购,而是依靠应用程序来处理内存交换。这些方法都不透明。为了应对这一挑战,TGS 利用了 CUDA 统一内存,它将 GPU 内存和主机内存统一在一个内存空间中。TGS 拦截并重定向来自容器的 GPU 内存分配调用,将其转到 CUDA 统一内存空间。当 GPU 内存被超量占用时,TGS 可以自动将机会性作业的部分数据驱逐到主机内存,并将相应的虚拟地址映射到主机内存中的新数据位置。整个过程对应用程序是透明的。为确保性能隔离,TGS 使用内存放置优先权,优先为生产作业分配 GPU 内存,而不是机会性作业。
TGS 的设计还有两个优点。首先,该架构是轻量级的。TGS 开销低,符合容器原则。其次,TGS 具有与普通容器相同的故障隔离特性。TGS 中的容器使用独立的 GPU 上下文,而 MPS 则将容器的 CUDA 上下文合并为一个。因此,一个容器中的应用故障不会影响或终止其他容器。
续
未完待续,请看下篇
-
AIMD(Additive Increase Multiplicative Decrease )是一种计算机网络拥塞控制的方法。意思是增加时加法增加,减小时乘法减小。AIMD 方法的工作原理是,当网络没有出现拥塞时,我们会逐渐增加数据流量的发送速率。这个增加的速率通常是一种加法增加,也就是每次增加一个固定的数量。一旦网络出现拥塞,我们就要采取减少数据流量的措施。在 AIMD 中,我们采用乘法减小的方式来逐渐降低数据流量的发送速率。也就是说,每次发生拥塞时,我们会将发送速率乘以一个小于 1 的因子,从而减少数据流量,以缓解拥塞的情况。
-
长尾延迟(Tail Latency)是指在网络或系统中存在一小部分请求的响应时间比其余请求的响应时间更长的现象。这些请求通常被称为“长尾请求”。
-
DLT 作业异质性:指不同训练作业的属性和特征不同。这些属性和特征包括训练数据的大小、训练模型的复杂度、训练作业的优先级等。由于作业异质性的存在,不同训练作业的训练过程可能具有不同的性能和资源需求,需要对它们进行不同的调度和资源分配.
-
反馈驱动(feedback-driven):是指一种基于反馈信息的控制策略,即通过对系统输出的反馈信息进行监测和分析,来指导和调整系统的行为。在反馈驱动的控制策略中,系统会根据反馈信息来调整其输入或行为,以使其输出更接近于期望的目标或状态。
-
共享安全(shareing safety):确保每个租户只能访问其分配的资源,并防止不同租户之间的干扰和冲突。
-
机会作业(Opportunistic Jobs):是指在共享 GPU 集群中,由于 GPU 资源的有限性和高昂的成本,某些作业无法在需要时立即获取足够的 GPU 资源。GPU 机会作业是指这些作业,在等待其它高优先级作业完成后,可以利用闲置的 GPU 资源进行计算的作业。GPU 机会作业通常具有较低的优先级和较短的计算时间,因此可以在其它 GPU 资源占用较少的时间段获得 GPU 资源。GPU 机会作业的出现,可以更好地利用 GPU 资源,减少 GPU 资源的浪费和空闲,提高集群的利用率。
-
UVM(Unified Memory)统一内存是一种由 NVIDIA 推出的计算机内存技术,它可以将 GPU 内存和 CPU 内存合并为一个通用的内存地址空间。这种技术可以使得 GPU 和 CPU 之间的内存访问变得更加灵活和高效,因为它们可以通过相同的内存地址来访问数据,而不需要进行手动的数据拷贝和传输。这种技术可以极大地简化GPU和CPU之间的数据管理和传输,从而提高计算效率和性能。在使用 Unified Memory 技术时,开发者可以使用CUDA API来管理内存,而不需要关心内存的物理位置和数据传输等问题。此外,Unified Memory 技术还支持动态内存分配和统一虚拟内存等特性,可以更好地支持动态数据集和分布式计算等应用场景。
-
虚拟私有集群(VC):为每个租户提供的抽象定义的虚拟私有集群。
-
资源保障型作业:提供资源保障,以保证作业运行性能,会消耗相应租户的一定GPU资源配额
-
自省式调度(introspective scheduling):是一种集群调度策略,其核心思想是将集群中正在运行的任务的信息反馈给调度器,以便调度程序更好地决策下一步要运行的任务。
[1]
https://dl.acm.org/doi/10.1145/3369583.3392679 KubeShare: A Framework to Manage GPUs as First-Class and Shared Resources in Container Cloud
[2]
https://dspace.lib.ntua.gr/xmlui/handle/123456789/54290 NvShare: Dynamic memory management for the efficient utilization of graphics processing units in interactive machine learning development
https://cloud.tencent.com/developer/article/2185514
[3]
https://ieeexplore.ieee.org/abstract/document/8672318 GaiaGPU: Sharing GPUs in Container Clouds
[4]
https://www.usenix.org/conference/osdi20/presentation/zhao-hanyu HiveD: Sharing a GPU Cluster for Deep Learning with Guarantees
[5]
https://dl.acm.org/doi/epdf/10.5555/3488766.3488796 AntMan: Dynamic Scaling on GPU Clustersfor Deep Learning
[6]
https://www.usenix.org/conference/osdi18/presentation/xiao Gandiva: Introspective Cluster Scheduling for Deep Learning
[7]
https://www.usenix.org/system/files/nsdi23-wu.pdf Transparent GPU Sharing in Container Clouds for Deep Learning Workloads
主要负责AI Infra的编排与算力调度方向。当前主要研究方向为GPU的共享调度与混合负载调度。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论