AntMan: Dynamic Scaling on GPU Clusters for Deep Learning|学习笔记

简介: 快速学习 AntMan: Dynamic Scaling on GPU Clusters for Deep Learning。

开发者学堂课程【PAL 平台学习路线:机器学习入门到应用:AntMan: Dynamic Scaling on GPU Clusters for Deep Learning】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/855/detail/14096


AntMan: Dynamic Scaling on GPU Clusters for Deep Learning

 

内容介绍:

一、Deep Learning in productions

二、Observations: Low utilization

三、Opportunities

四、AntMan:Dynamic scaling for DL jobs

 

一、Deep Learning in productions

image.png

·Computer Vision

·Natural Language Processing

·Speech Understanding

·Recommendation

·Advertisement

urge company runs DL in shared GPU clusters!

现在深度学习已经广泛地使用在各种各样的产品里面,横跨众多的领域,比如说计算机视觉,自然语言处理,语音推荐广告等等,因此深度学习事实上已经是产品流水线上至关重要的一环,而且占用了大量宝贵的 gpu 计算资源。为了让这些 gpu 资源保持在一个比较高的利用率,一些大公司,比如说阿里巴巴通常会共建这种共享的 gpu集群,方便不同的用户共享来使用这些 gpu 的资源。

 

二、Observations: Low utilization

image.png

5000+GPU cluster statistic:

·Low utilization in GPU SM usage

·Low utilization in GPU memory

为了解当前 gpu 共享集群中的资源使用情况,针对 pad 一个超过5000张卡的异构计算集群进行了工作,还了解了资源的使用状况。而出乎意料的是,就尽管通过多租户共享的传统方式来管理集群,希望利用用户间在资源使用时间上的差异进行一些资源共享的这种行为。但是集群水位仍然比较的低,统计发现,仅有20%的 gpu 使用者超过50%的显存,而从计算单元的角度,也就是 SM 利用率,仅有10%的 gpu 利用率高于80%。统计说明,当前 gpu 计算集群中的显存和计算单元利用率仍然相对较低,也有不少的资源闲置着,这意味着这些昂贵的硬件正在被浪费。

进一步深入地查看这种低利用率背后所在的原因。

1.利用率的原因

(1)是深度学习任务固有的,对于调度相对苛刻的需求。

(2)是深度学习任务自身的行为特性。

首先在阿里巴巴,深度学习计算任务通常需要处理海量的数据,于是这需要分布使多 gpu 的训练方式来完成。分布式深度学习任务中通常采用同步的随机梯度下降的方法,要求训练任务所需要的资源必须被同时满足,这样整个训练任务才会开始。还有一些深度学习任务,甚至需要更加苛刻的计算资源,即有可能申请的 gpu 需要在同一个机器上,从而才可以利用好机器内的高速通信带宽,也就是 NV link。这些资源请求在一个忙碌的生产环境 gpu 集群中,很难一下子得到满足,那么调度器它就必须为这种多 gpu 的训练任务,以某种形式来做一些资源的预留,从而使得让这些 gpu 资源处于一个闲置的等待的状态。比如,当一个用户申请四张卡,当前只有三张是空闲的,那么调度器就需要留住这三张卡,不调度给别的任务,等待最后一张卡就绪,从而把这个四张卡一起分配出去。如下图所示,当用户所申请的 gpu 资源越多,那么需要花费在等待上的这种空闲等待上的gpu 时间也就越来越多。

image.png

其次,尽管深度学习任务需要用 gpu 加速,这里发现很多的深度学习任务,其本身没有办法在整个任务的执行周期之内一直满负荷的使用 gpu。这是因为生产环境中的深度学习任务通常包含很多的计算部分,其中有一些不是很方便可以并行化,很难完全的占满整个的gpu 资源,比如说像图神经网络中的图材耀,广告模型中的特征抽取,还有计算机视觉里面的数据加强等等。考虑到在面临着海量数据的场景,随着数据的增多,在这种超大规模的分布式训练中,很多的时间需要花费在网络模型的同步的阶段,而相应的这部分的 gpu 也是空闲的。下图是截取了 ESP 模型,一个语音模型从它运行中间截取了一部分,训练部分它的 gpu 显存使用的少,但是 GPUSM 利用率比较的高。等到语音模型合成的这种部分,它的 gpu 显存则会突然间飙升,但是,整个利用率又会下降下来,那么整个任务在执行的过程中呈现一个动态资源需求的状态。

image.png

于是一个简单、直接应对这种集群利用率的方法就是把有限的 gpu 资源共享给多个任务,那么显然会带来一些挑战。首先,对于资源保障型的任务,即有用户使用的 gpu 资源支付了费用。基于这个任务是有扩大保障的,那么这里需要做到在资源共享的时候能够保障它们的性能和它独占 gpu 执行时性能一致。也就是需要避免由于共享带来其他的计算任务,从而导致性能的干扰。而进一步在 gpu 共享的时候,其实并行计算任务,可能在显存上存在着资源的竞争,最终有可能导致训练任务的失败,特别是考虑到生产环境中的计算任务,通常比深度学习的 bench mark 任务要复杂,其往往有动态的资源诉求。比如,Gpu 显存的需求可能突然间爆发性的增长,那么这个问题可能更加的严峻。

image.png

Challenges of GPU resource sharing:

(1)Performance isolation for resource-guarantee jobs

(2)Prevent failure from GPU memory contention

 

三、Opportunities

为了解决上面所提到的挑战,利用了深度学习训练特性中的一些特征,这样的机会。首先对于线上任务做了一个统计,采样了1万个生产任务,统计其深度学习模型的大小,以及 mini-batch 的迭代周期。如图所示,尽管深度学习任务跑起来可能会占满一个高达32 G 的显存的计算资源,但是其中只有非常小的一部分的显存是用来存储这种需要持久的深度学习计算模型的。这里统计显示,大概有90%的深度学习模型占用最多大概500兆的显存,而其实绝大部分的显存都是用来存储计算所临时产生的 tensor,也就是一个 mini-batch 周期内资源的申请,也会也会随着 mini-batch 的结束而释放。那么进一步,也发现深度学习任务的 mini-batch 周期非常小,80%的任务,mini batch 周期都在600个毫秒以内。

 image.png

总结,这里的机会有:小模型,非常短的 mini batch 的时间以及 mini batch 的特性非常的相似。后面在 NV link 里面分别利用了这样的特性做系统设计的事情。

·Small model size:Most GPU memory schedulable

·Short mini-batch:Fast resource coordination

·Similar mini-batch:Metrics to quantify interference

 

四、AntMan:Dynamic scaling for DL jobs

image.png

·Co-executing jobs on shared GPUs

·Resource-guarantee jobs

-Ensure performance same as dedicated execution

·Opportunistic jobs

-Best effort utilize spare resources

-Maximize cluster utilization

为此提出了 antman 系统,它是一个通过在共享的 gpu 上执行多个深度学习任务来这个提升集群利用率的深度学习基础设施。antman 的系统,它保障的资源保障型的任务的性能跟它独占 gpu 执行的时候完全一致,没有任务间的相互干扰。与此同时,使用超麦的计算任务,来提升整个集群的整体利用率。

 

五、系统的介绍

系统,首先在深度学习,比如框架,tensorflow 和 pytorch 中引入的动态扩缩的机制,分别对于内存和计算单元进行一个管理。 然后antman 整个系统的总体架构,就是展示通过联合的集群调度器和框架的设计,使得可以利用上刚刚提到的一些新的机制来做更好任务兼得资源的管理。展示一些实验的结果,以及总结工作。

Outline:

·Introduction

·AntMan: dynamic scaling mechanism

·AntMan: architecture

·Evaluation

·Conclusion

1.Dynamic scaling memory

不同于现有的深度学习框架,比如现在的 Tensorflow 和 pytorch ,这些都是会独占 gpu 的设计,AntMan 其实是为共享的形式来设计的。AntMan 的系统,持续的观察深度学习应用真实的 gpu 内存,显存的使用量,及时的调整这种显存使用的上限,达到一个恰好够用的这样的一种位置。于是,就可以主动的腾出这些空闲的显存给其他的任务来用。正如上面所提到的动态资源诉求,比如一个深度实验任务,可能突然间申请比现在更多的这种 gpu 的显存就会导致整个任务的失败,那么这个时候应该如何解决这样的问题呢?AntMan 主要采用Universal memory (朴实内存)的概念,AntMan 通过在 cpu 测内存临时缓存的爆发性诉求,从而最后在 mini-batch 边界处去做调整来做到对于资源保障型任务,不让其失败的保证。下图所示,在 T0的时刻进行中的任务,它的显存资源增长,此时,显存上限又被限制住了,于是它所需要的这些临时的张量(tensor),它就会被放置到 cpu 上,也就是绿线的部分。等到T1的时刻,经过 antman 的协调,已经提升了当前任务所使用的显存的上限,那么在下一个mini-batch的时候,这种原来分配在 cpu 上的显存就可以直接自动的换入到这个 gpu 中,那么从而分配在gpu设备上。

 image.png

下面展示的是交换过程。左边是在 T0到 T1时刻之间,这样的 tensor 是放置在 cpu 侧,但是其假装自己是在 gpu 侧来执行的。而到了 T1时刻之后,由于 gpu 显存,它的供应是充足的,所以 tensor 就自动的切回在 gpu 设备之上

·Adjust memory to an appropriate fit

·Cache memory burst to prevent failure, raise upper-bound

·Ensure resource-guarantee job per

image.png 

此外对于训练任务,比如超麦的低优先级的任务,也可以通过收缩其 gpu 显存占用来为其他的任务提供资源的保障。下图,在 T0时刻低优先级的任务,其被这里的系统控制压制了它的显存的使用量比真实的需求还要低。于是,同样的有一部分临时的张量就是要被放置到这样的 cpu 上来,接着往下执行,而等到 T1的时刻,另外的跟其共享的任务完成,这时 gpu 的资源又非常的充足,那么其显存占用突然就可以直接涨上去,从而完成这样的操作,可以更快把任务跑完。因此通过 antman 这样的显存管理方式,使得一方面可以在 gpu 显存有空闲的时候,放置一些低优先级的任务来执行,而另外一方面,低优先级的任务的执行永远是为高优先级任务避让的,使得可以保障高优先级任务的 gpu 资源的诉求,这就是动态显存管理的机制。

·Adjust memory to an appropriate fit

·Cache memory burst to prevent failure,raise upper-bound

·Ensure resource-guarantee job performance

·Best-effort utilize the spare memory

·Opportunistic jobs train with universal GPU and CPU memory

image.png 

2.Dynamic scaling computation

通过一个例子来介绍 antman 是如何对算力上去做动态的调整,来避免任务间的相互影响。下图显示有一个任务 a,独自运行在 gpu 上,这里画了这个六个 gpu 的 kernel,是任务 a 的 gpu  kernel,其都会被提交到 gpu 里面顺序的依次执行。可以看到现在的整个 gpu 的利用率不高,因为里面有一些黄色的部分,这些没有任何的 gpu kernel 在上面执行,有很多闲置的 gpu 的时间片。

image.png

为了能够把这些闲置的 gpu 时间片利用起来,紧接着调度了一个任务 b,放置到 gpu 上,整个执行的过程大概是这样的,还是原来的 gpu,现在它上面多了许多绿色的方框,整个变得忙碌起来,所有的时间片都被填满了,任务 b 的执行,使得整个 gpu 的利用率提升了。然而因为任务 b 的插入,使得任务a 的 gpu kernel 可能在相同的时间内被 delay 了,那么呈现出来的结果是任务 a 被干扰,途径下降了。其实任务间干扰的存在,主要是因为在框架层缺乏一种机制,使得可以控制任务 b,它只使用空闲的 cpu 时间片,不再去用任务 a 正在用的时间片。

 image.png

为了解决这样的问题,在 antman 里面,在框架的执行和 gpu 中间插入了叫做 gpu Op manager 的模块,这个模块会管理所有的 gpu 的 operator 执行,通过延迟一些 gpu 的执行,来控制对于 gpu 中 kernel 的发射频率。这种延迟其实就是通过注入一些空闲的时间片来做到,而用这种方式相当于 antman 有一个机制可以限制住这个任务 b 对于 gpu 时间片的占用率,从而就可以用这种方式保障任务 a 对于 gpu 算力资源的使用。

  image.png

3.AntMan crchitecture

在深度学习框架里面引入了显存和算力管理的一些机制,来优化整个深度学习的任务。 antman 采用的是分层的架构,这里有全局的调度器,会负责整个集群内所有任务的调度。每一个调度器上,可以看到有本地调度器。其有两个职责:第一,是这里红色虚线所示,它负责收集设备和任务相关的统计信息,来构建一个本地的统计信息视图。其次,它通过在框架里的接口来控制协调任务间的执行,控制每个任务到底应该使用多少的显存和算力,比如像右下角控制了同一个 gpu,在 gpu 上的tensorflow任务,pytorch指这个任务的相应的用量。全局的调度器,其实是通过汇总所有的本地调度器上报上来的一些信息,于是就有了一整个集群的view,用这样的信息就可以调度,当需要调度任务的时候,可以把这些超麦的低优先级的任务调到那些钻孔弦的 gpu 上执行,从而使得这些任务比较小的概率会被压制,让这些任务也可以比较快的跑完。

 image.png

4.Micro-benchmark:Memory grow-shrink

首先通过 Michael benchmark 这样的方式来评估 antman 引入的新的显存和算力管理的机制的有效性。首先关注显存管理机制的高效性,实验通过手动的触发显存,它的收缩和和扩展的增长来评估,因为区隔了显存管理带来的额外的代价,当显存收缩的时候,释放一个 resnet 的模型所需要花费的时间大概是17ms。显存增长的时候,其实它跟深度学习训练的这种正向 forward 的流程是一体的,所以很难直接的评估出来,于是在这里,是选用了两个连续的 mini-batch 迭代,其中第二个 mini-batch,会重用前面一个已经缓存住的显存,就没有额外的代价,于是这两个 mini-batch 所花费的时间之差,就是显存增长时需要花费额外代价,对模型就是115ms,这种相同的方法去评估更多的典型的深度学习模型, Google net等。结论是即便每分钟都触发一次显存的扩缩, antman 的显存管理机制,也仅仅只会引入0.4%的额外代价,这还是都可以接受的。

·Efficient memory shrinkage and growth

·Resnet50

·Shrink:17ms

·Growth:115ms

·Only 0.4% overhead at one minute interval

image.png 

5.Micro-benchmark:Adaptive computation

第二个 micro-benchmark 主要重点关注在计算单元的管理上,需要确保在共享 gpu 的时,超麦的低优先级的任务仅仅只占用空闲的资源,而不会影响到需要资源保障的高优先级任务的性能。 antman 实现是通过自信算力调整来做到的,这里是构建 micro-benchmark。首先使用一个 esp 模型(一个语音到文字生成的这种深度学习模型),来作为把它设置为一个高优先级需要保障的计算任务,就是下图里红色的部分,然后采用 resnet50来做一个低先级,希望能够白白获取这些 idol 的 gpu cycle 的低优先级的超麦任务。此时为了排除显存带来的影响,这里的两个计算任务,它使用的显存之和都是小于32G的。如下图 A,不做任何的资源的限制,两个任务随便 pick 在一起来进行执行,那么 ESPnet 受到的干扰其实还是比较大的。体现在它 gpu 利用率比较低,然后端到单的整个的执行时间,统计出来是105.2分钟,其实比单独独占执行所需要的时间已经多于五倍了。将这样的 resnet50 的任务放置在这样的 gpu 上,跟esp net一起执行,会带来巨大的任务间的干扰,违背了对于 esp net任务的承诺,执行时间被显著的拖长了。而在图 b 中通过 antman 动态算力控制机制,可以在两个任务之间做协调,使得 ESP net 的 gpu 利用率得到显著的提升,最终完成时间也几乎跟其独占 cpu 执行时间是相同的。所以需要注意,从140到390s 接秒的时候,其实是 ESP 模型的解码阶段。这个时候它几乎不需要使用到 gpu 的计算单元,antman 也会自动发现这一点,把这部分的计算时间的算力给 resnet50,可以在时间内,resnet50 的利用率巨高,能够达到90%+,那么就可以自动用上 gpu 算力的资源。

Setup:

·ESPnet(resource-guarantee)

·ResNet50(opportunistic)

Results:

·Naive packing 100

·5.23xslowdown for ESPnet

·Adaptive scaling

·Same performance as in a dedicated GPU

 image.png

6.Trace experiment

这都是 Micro benchmark 的实验,用来分别验证设计上的选择,得到的这些效果。采用了一个这个集群多任务实验,在一个64 V100构成的小集群上做测试,来比较完整的 antman 系统跟现有的工业界生产和应用使用的系统。比如像yarn-cs-prrmpt,还有学术界当前最好的深度学习进行调度器 gandiva。这里展示三种不同的调度器下平均任务完成时间,还有 maxband,可以看出相比于 yarn,gandiva,antman 的平均完成时间显著的下降了2倍和1.8倍左右,Makespan 也显著的下降。而在图 B 里面,验证了 antman 是能够保证高优先级任务的性能,使用对比的对象就是 yarn 的调度器,甚至是让其进一步打开杀掉优先级任务的抢占功能,把这个功能打开,可以看到就是绿线跟红线基本上是重合的,也就是对于带抢占模式的yarn,还有 antman ,它对于高优先级的任务的完成时间,保障能力都是相同的,而不同的是 yarn 为了保障这种高优先级的任务,它最终杀掉了46%的集成任务。而 antman 不需要去击杀任何其他任务。

Setup:

·64V100 GPUS

·9 SOTA workloads in two tenants

Achievement:

·JCT:2.05x(YARN-CS),1.84x(Gandiva)

·MakeSpan:1.76x(YARN-CS),1.67x(Gandiva)

·Ensure SLAs for resource-guarantee jobs

 image.png

目前 antman 已经在阿里巴巴所有 gpu 集群上全量部署。这里是展示在2020年4月的统计结果,相比起2019年11月12月,也就是正式把 antman 在集训上推广上线之前,一个生产环境的 gpu集群,包括5000张各种各样类型的 gpu 卡。这个集群是用来支撑着阿里巴巴的核心,商业逻辑上面运行的一些深度学习的计算任务,包括淘宝的搜索推荐广告,对话理解等这样的模型。这个对比显示可以在这个相同的硬件资源层面上,为深度学习的用户提供额外的17% gpu 的计算资源给到超麦的低优先级的任务。从硬件层面,最终整个集群的利用率,显存到 GPUSM 的算力利用率都有42%到34%的提升,任务的平均等待时间显著下降了两倍,下降到一个量级以上,这也是得益于在拥有超麦的能力之后,整个集群的吞吐率的上升。Table 5是做的任务干扰分析,可以看到此结果,99%的计算任务,在跟别人共享执行的时候,不存在任何的性能下降。

Setup:

·5000+GPU

·Production cluster

Achievement:

·Up to 17.1% extra GPUs for jobs

·42% improvement in GPU memoryutilization

·34% improvement in GPU SM utilization Avg

·queuing delay reduces by 2.05x

+

 image.png

7.Couclusion

总结,本次工作中提出了 antman 是阿里巴巴 PAI 当前的深度学习计算平台的一个基础设施。antman 在深度学习框架中创新性地去引入了动态扩缩的机制,针对深度学习用户在运行时采用了细粒度的 gpu 资源管控的方法,有了这样的新机制之后,antman 可以避免任务间的干扰。在这个前提下,去引入更多的超卖低优先级的任务,来最大化集群的这个利用率。实验证明,阿里巴巴在 gpu 集群和算力都因为这个 antman 的引入得到了一个巨大的提升,其不需要损失任何任务间的公平性来达到。目前 antman 的代码都在 github上面开源了,,也可以尝试 py-dlc 产品里面也已经集成了当前 antman 的功能。

AntMan: Dynamic Scaling on GPU Clusters for Deep Learning

·Deployed DL infrastructure at Alibaba

·Introduces dynamic scaling primitives

·Maximize utilization using opportunistic jobs while avoiding job interference

·42% in GPU memory utilization,34%in GPU SM utilization

[Code]https://github.com/alibaba/GPU-scheduler-for-deep-learning

[Production] PAI-DLC: a cloud-native deep learning training platform

相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
相关文章
|
3月前
|
存储 算法 计算机视觉
【博士每天一篇文献-模型】Meta-Learning Based Tasks Similarity Representation for Cross Domain Lifelong Learning
本文提出了一种基于元学习的跨域终身学习框架,通过跨域三元组网络(CDTN)学习任务间的相似性表示,并结合自注意模块与软注意网络(SAN)来增强特征提取和任务权重分配,以提高学习效率并减少对先前知识的遗忘。
49 1
【博士每天一篇文献-模型】Meta-Learning Based Tasks Similarity Representation for Cross Domain Lifelong Learning
|
1月前
|
机器学习/深度学习 编解码 算法
论文精度笔记(二):《Deep Learning based Face Liveness Detection in Videos 》
论文提出了基于深度学习的面部欺骗检测技术,使用LRF-ELM和CNN两种模型,在NUAA和CASIA数据库上进行实验,发现LRF-ELM在检测活体面部方面更为准确。
26 1
论文精度笔记(二):《Deep Learning based Face Liveness Detection in Videos 》
|
21天前
|
机器学习/深度学习 存储 人工智能
【大语言模型】ACL2024论文-01 Quantized Side Tuning: Fast and Memory-Efficient Tuning of Quantized Large Language
本文介绍了Quantized Side Tuning(QST)方法,旨在解决大型语言模型(LLMs)微调过程中的内存效率和速度问题。QST通过将模型权重量化为4位,并引入一个与LLM分离的侧网络,显著减少了内存占用并加快了微调速度,同时保持了与现有技术相当的性能。实验表明,QST可以将总内存占用减少高达2.3倍,并将微调速度提高高达3倍。
23 0
|
3月前
|
机器学习/深度学习 自然语言处理
论文:Scaling Laws For Dense Retrieval
【8月更文挑战第5天】《密集检索的缩放定律》探究了模型大小与训练数据量对密集检索性能的影响,揭示了两者间的幂律缩放关系。此ACM SIGIR 2024论文提出使用对比熵评估模型,并展示如何利用缩放定律优化训练流程及资源分配,在预算限制下提升模型表现,为密集检索技术的发展提供了宝贵指导。论文链接:https://dl.acm.org/doi/abs/10.1145/3626772.3657743。
56 6
|
机器学习/深度学习 算法
尝试理解论文SPOT1的代码1:Supported Policy Optimization for Offline Reinforcement Learning
尝试理解论文SPOT1的代码1:Supported Policy Optimization for Offline Reinforcement Learning
137 0
PointNet++:Deep Hierarchical Feature Learning on Points Sets in a Metrci Space 学习笔记
PointNet++:Deep Hierarchical Feature Learning on Points Sets in a Metrci Space 学习笔记
80 0
|
机器学习/深度学习 存储 传感器
Automated defect inspection system for metal surfaces based on deep learning and data augmentation
简述:卷积变分自动编码器(CVAE)生成特定的图像,再使用基于深度CNN的缺陷分类算法进行分类。在生成足够的数据来训练基于深度学习的分类模型之后,使用生成的数据来训练分类模型。
156 0
|
机器学习/深度学习 算法 数据挖掘
A Generative Adversarial Network-based Deep Learning Method for Low-quality Defect ImageReconstructi
本文提出了一种基于生成对抗网络 (GAN) 的 DL 方法,用于低质量缺陷图像识别。 GAN用于重建低质量缺陷图像,并建立VGG16网络识别重建图像。
150 0
|
机器学习/深度学习 存储 自然语言处理
Bi-SimCut: A Simple Strategy for Boosting Neural Machine Translation 论文笔记
Bi-SimCut: A Simple Strategy for Boosting Neural Machine Translation 论文笔记
|
机器学习/深度学习 PyTorch 算法框架/工具
Batch Normlization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》论文详细解读
Batch Normlization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》论文详细解读
126 0
Batch Normlization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》论文详细解读