A survey of GPU sharing for DL
当前机器学习训练中,使用GPU提供算力已经非常普遍,对于GPU-based AI system的研究也如火如荼。在这些研究中,以提高资源利用率为主要目标的GPU共享(GPU sharing)是当下研究的热点之一。GPU共享涉及到的技术面较广,包括GPU架构(计算,存储等),Cuda,IO(内存,显存),机器学习框架(Tf,Pytorch),集群&调度,ML/DL算法特性,通信(单机内和多机间),逆向工程等等,是一个自上而下的工作。本篇文章希望能提供一个对GPU共享工作的分享,希望能和相关领域的研究者们共同讨论。限于笔者能力有限,可能会出现一些错漏,希望能多多指正,感谢。
GPU共享,是指在同一张GPU卡上同时运行多个任务。优势在于:(1)集群中可以运行更多任务,减少抢占。(2)资源利用率(GPU/显存/e.t.c.)提高;GPU共享后,总利用率接近运行任务利用率之和,减少了资源浪费。(3)可以增强公平性,因为多个任务可以同时开始享受资源;也可以单独保证某一个任务的QoS。(4)减少任务排队时间。(5)总任务结束时间下降;假设两个任务结束时间分别是x,y,通过GPU共享,两个任务全部结束的时间小于x+y。
想要实现GPU共享,需要完成的主要工作有:(1)资源隔离,是指共享组件有能力限制任务占据算力(线程/SM)及显存的比例,更进一步地,可以限制总线带宽。(2)并行模式,主要指时间片模式和MPS模式。
资源隔离
资源隔离是指共享组件有能力限制任务占据算力/显存的比例。限制的方法就是劫持调用。图一是在Nvidia GPU上,机器学习自上而下的视图。由于Cuda和Driver不开源,因此资源隔离层一般处在用户态。在内核态做隔离的困难较大,但也有一些工作。顺带一提,Intel的Driver是开源的,在driver层的共享和热迁移方面有一些上海交大和Intel合作的工作。图一/使用Nvidia GPU机器学习自上而下视图
来自腾讯的Gaia(ISPA'18)[1]共享层在Cuda driver API之上,它通过劫持对Cuda driver API的调用来做到资源隔离。劫持的调用如图二所示。具体实现方式也较为直接,在调用相应API时检查:(1)对于显存,一旦该任务申请显存后占用的显存大小大于config中的设置,就报错。(2)对于计算资源,存在硬隔离和软隔离两种方式,共同点是当任务使用的GPU SM利用率超出资源上限,则暂缓下发API调用。不同点是如果有资源空闲,软隔离允许任务超过设置,动态计算资源上限。而硬隔离则不允许超出设置量。该项目代码开源在[2]。实测即使只跑一个任务也会有较大JCT影响,可能是因为对资源的限制及守护程序的资源占用问题。KubeShare(HPDC '20)[3]的在资源隔离方面也是类似的方案。图二/ Gaia限制的CUDA driver API
发了44篇论文(截止2020年3月)的rCuda[4]和Gaia有相似之处,他们都是在Cuda driver API之上,通过劫持调用来做资源隔离。不同的是,rCuda除了资源隔离,最主要的目标是支持池化。池化简单来讲就是使用远程访问的形式使用GPU资源,任务使用本机的CPU和另一台机器的GPU,两者通过网络进行通信。也是因为这个原因,共享模块需要将CPU和GPU的调用分开。然而正常情况下混合编译的程序会插入一些没有开源的Cuda API,因此需要使用作者提供的cuda,分别编译程序的CPU和GPU部分。图三显示了rCuda的架构。如果使用该产品,用户需要重新编译,对用户有一定的影响。该项目代码不开源。另外vCUDA(TC '12)[5]和qCUDA(CloudCom '19)[18]也采用了和rCuda相似的技术。图三/rCuda架构
GPUShare(IPDPSW' 16)[6]也是劫持的方式,但不同的是,它采用预测执行时间的方式来实现计算资源的公平性。作者认为比切换周期还小的短kernel不会影响公平使用,因此只限制了较大的kernel。
来自阿里的cGPU[7],其共享模块在Nvidia driver层之上,也就是内核态。由于是在公有云使用,相对于用户态的共享会更加安全。它也是通过劫持对driver的调用完成资源隔离的,通过设置任务占用时间片长度来分配任务占用算力,但不清楚使用何种方式精准地控制上下文切换的时间。值得一提的是,由于Nvidia driver是不开源的,因此需要一些逆向工程才可以获得driver的相关method的name和ioctl参数的结构。该方案在使用上对用户可以做到无感知,当然JCT是有影响的。代码没有开源,也没有论文。图四是cGPU的架构图。图四/cgpu架构图
来自Nvidia的vGPU[8]其共享模块在Nvidia driver里面。vGPU通过vfio-mdev提供了一个隔离性