当前位置:河南时尚之窗 >> 科技 >> 文章正文

深度分析:GPU共享深度学习

发布于:2020-11-22

新智元报道

来源:知乎

作者:薛磊

【新智元导读】GPU共享是指在同一GPU卡上同时运行多个任务。本文详细讨论了深度学习GPU的资源隔离和并行模式,并对深度学习和GPU提出了展望。

目前在机器学习训练中使用GPU提供计算能力的情况非常普遍,基于GPU的AI系统的研究也在如火如荼的进行。在这些研究中,以提高资源利用率为目标的GPU共享是当前研究的热点之一。

本文希望能提供一个GPU共享工作的分享,并与相关领域的研究者探讨。

GPU共享是指在同一个GPU卡上同时运行多个任务。优点是:

(1)集群可以运行更多的任务,减少抢占。

(2)资源利用率(GPU/视频内存/E.T.C .)提高;GPU共享后,总利用率接近运行任务利用率之和,减少了资源浪费。

(3)公平性可以增强,因为多个任务可以同时开始享受资源;某个任务的QoS也可以独立保证。(

4)减少任务排队时间。

(5)总任务结束时间减少;假设两个任务的结束时间分别为x和y,通过GPU共享,两个任务的结束时间都小于x和y。

要实现GPU共享,需要完成的主要任务如下:(1)资源隔离,即共享组件可以限制任务占用的计算能力(线程/SM)和视频内存的比例,进而可以限制总线带宽。(2)并行模式主要指时间片模式和MPS模式。

资源隔离

资源隔离是指共享组件有能力限制任务占用的计算能力/视频内存比例。限制的方法是劫持呼叫。图1是英伟达GPU上机器学习的自顶向下视图。因为Cuda和Driver都不是开源的,所以资源隔离层一般都是用户模式。

在内核模式下很难隔离,但是有一些任务。顺带一提,Intel的Driver是开源的,上海交大和Intel在驱动层的共享和热迁移方面也有一些合作。

图1/使用英伟达GPU机器学习自顶向下视图

来自腾讯的Gaia(ISPA'18)[1]分享了Cuda驱动API上面的一层,通过劫持对Cuda驱动API的调用来隔离资源。被劫持的呼叫如图2所示。

具体实现方法也比较直接。调用相应的应用编程接口时,请检查:

(1)对于视频内存,一旦申请视频内存后任务占用的视频内存大于config中的设置,就会报错。(2)对于计算资源,有硬隔离和软隔离两种方式。共同点是当任务使用的GPU SM利用率超过资源上限时,就会暂停API调用。

不同之处在于,如果资源闲置,软隔离允许任务超出设置并动态计算资源上限。硬隔离不允许超过设定量。项目代码在[2]中是开源的。

根据实际测量,即使只运行一个任务,也会有很大的JCT影响,这可能是由于守护进程的资源限制和资源占用。KubeShare(HPDC '20)[3]在资源隔离方面也是类似的方案。

图GAIA限制的CUDA驱动API

RCuda[4],发表了44篇论文(截止2020年3月),类似于Gaia,因为都是基于Cuda驱动API,通过劫持调用做资源隔离。

不同之处在于,除了资源隔离,区域协调股的主要目标是支持池化。池化简单来说就是以远程访问的形式使用GPU资源。任务使用本机的CPU和另一台机器的GPU,通过网络进行通信。为此,共享模块需要将CPU和GPU的调用分开。

但是一般情况下,混合编译的程序会插入一些没有开源的Cuda API,所以需要使用作者提供的Cuda分别编译程序的CPU和GPU部分。

图3显示了rCuda的架构。如果使用产品,用户需要重新编译,对用户会有一定的影响。项目代码不是开源的。

标签: 任务 显存 资源

上一篇:中国消费者协会点名李佳琪、王涵、李雪芹 有33万多条关于直播的负面投诉

下一篇:苍蝇被抢反位 从容拿出老虎 结束后弹幕:我的担心是正确的