盘点来自工业界的GPU共享方案

2021 年 9 月 2 日 计算机视觉life

点击上方“计算机视觉life”,选择“星标”

快速获得最新干货

作者丨阎姝含@知乎
来源丨https://zhuanlan.zhihu.com/p/398369404
文章仅用于学术分享。

进年来工业界一直孜孜不倦地寻求提升GPU利用率的方案,能被更多用户理解和使用的GPU共享走进工程师的视野中。本文将总结目前有公开PR的、来自工业界的部分GPU容器计算共享方案,看看工业界对GPU共享的定位和需求。本文将依旧着眼于unix-like os上计算容器场景的资源隔离能力,不包括win os,VM,视频,游戏相关方案。受限于笔者能力,可能出现一些错漏,希望多多指正。

首先,回顾一下GPU共享方案的分类[21]。以下类型中,仅CUDA聚合为空分,其余为时分。

阿里 cGPU

来自阿里的cGPU(container GPU)[1]是最早提出的通过内核劫持来实现容器级GPU共享的方案。cGPU实现了一个内核模块cgpu_km,该模块可以对一个物理GPU虚拟出16个虚拟GPU设备。在容器挂载设备时,修改后的container runtime将挂载虚拟GPU设备,而不是真实GPU设备。通过这种方式实现了GPU劫持。当用户程序的请求下发至内核模块cgpu_km时,模块通过修改请求及回复来限制GPU显存资源。同时,内核模块也实现了简单的算力调度,通过限制每个容器可下发kernel的时间片来隔离算力资源。可以提供公平/抢占/权重三种算力分配模式。值得注意的是,cGPU目前不能中止已经发送到GPU上的请求,因此如追求算力隔离,需要延长时间片的长度,会造成一定的算力浪费。出于某些考虑未有开源。

既然是容器级的GPU共享,接入到K8s的组件是必不可少的。阿里开源了相应的device plugin[3]和调度器[2]。设计的device plugin提供的核心资源是显存,这和cGPU是一脉相承的。另外由于当前K8s支持的资源类型是一维的,而GPU共享资源是二维的。为了实现调度能力,应用了一些tricky 的技巧,也让device plugin不得不和APIServer直接通信。

腾讯 GaiaGPU

腾讯提供了一整套GPU共享解决方案GaiaGPU[4],是完全开源的GPU共享方案,salute。GaiaGPU中的vCUDA(virtual CUDA)[5]是GPU资源限制组件,属于CUDA劫持。vCUDA通过劫持CUDA的显存申请和释放请求,为每个容器管理它的显存使用量,进而实现了显存隔离。唯一需要注意的是申请context并不通过malloc函数,因此无法知道进程在context使用了多少显存。因此vcuda每次都去向GPU查询当前的显存使用量。在算力隔离方面,使用者可以指定容器的GPU利用率。vCUDA将会监控利用率,并在超出限制利用率时做一些处理。此处可以支持硬隔离和软隔离。两者的不同点是,如果有资源空闲,软隔离允许任务超过设置,而硬隔离不允许。由于使用的是监控调节[22]的方案,因此无法在短时间内限制算力,只能保证长时间的效率公平。所以不适合推理等任务时间极短的场景。

GaiaGPU也提供了Device plugin GPU manager[6]和调度器 GPU admission[7],GPU admission既允许用户申请一张虚拟卡,也允许用户像之前一样申请一机多卡,这可能可以满足一些小型集群的需要。GPU manager除实现了device plugin该实现的,也做了很多繁杂的功能,使得apiserver的负担更重了。

腾讯 qGPU

腾讯在内核劫持类GPU共享方向上,也推出了资源隔离方案qGPU(qos GPU)[8]。从架构图中就可以看出,qGPU和同属于内核劫持方案的cGPU类似。但值得注意的是,qGPU效仿Nvidia vGPU在必要时context switch,实现了强算力隔离,这也是其名字的由来。出于某些考虑未有开源。

百度 MPS+CUDA Hook的GPU隔离方案

百度推出的GPU共享方案[9]也是一个CUDA劫持方案,通过经典CUDA劫持限制显存,在算力隔离方面使用了MPS。没有开源代码。MPS在限制算力方面,除了众所周知的错误影响问题,其实算力限制并不严格,且无法根据GPU状态灵活调节算力的限制。期待下一代方案。

在K8s接入部分,也实现了Device plugin和调度器extender,不过未开源。

爱奇艺 vGPU

爱奇艺的GPU共享方案也叫vGPU(和Nvidia的虚拟机方案vGPU重名)[10],也是CUDA劫持方案。在显存隔离上也是使用了经典的CUDA函数劫持的方法,由于没有开源代码因此不清楚context问题是如何解决的。在算力隔离方面比较特别,和RTA2019的Fractional GPU[11][12]思想颇为近似,通过将kernel限制在某些SM上来限制使用部分算力。但这实质上是一种空分的方法,需要将上下文合并才可以实现共享GPU,因此也会有错误传播的问题,场景限制颇大。

在K8s接入部分,使用和阿里同样的方案。

第四范式 OpenAIOS vGPU

第四范式的GPU共享方案还叫vGPU[13],也是CUDA劫持方案。由于没有开源资源隔离部分的代码,从文档中推测,其实现和GaiaGPU的vcuda较为类似:显存隔离使用的是经典CUDA劫持方法,通过预估获得context大小;使用监控隔离的方案隔离算力。同样地,方案的优缺点也和vCUDA类似。较为特别的一点是,和阿里Antman[18]相同地,第四范式vGPU通过Nvidia UVM实现了虚拟显存。不过UVM实质上是使用内存来虚拟显存,因此会消耗较大的内存,且性能会有较大下降。若要使用虚拟显存功能,还需思考程序本身占用的内存和虚拟显存的trade off。

第四范式开源了device plugin[14],使用了和nvidia device plugin中处理MIG设备一样的思路,将节点上所有虚拟GPU设备设定为同一大小。这丧失了一定的用户自由,但对大型集群来说,这样做更通用且更容易维护。同时,采用这种方案不需重新设计调度器。

AWS aws-virtual-gpu

AWS提供了一套非常简单的GPU共享方案[15],该方案通过tensorflow框架的参数per_process_gpu_memory_fraction实现了显存隔离,通过MPS的CUDA_MPS_ACTIVE_THREAD_PERCENTAGE实现了算力的限制。方案受限于tf框架,且使用了MPS,显然是个玩具之作。

在接入K8s方面,AWS开源的device-plugin[16]没有考虑资源的二维关系,实现了非常简化的资源allocate。

趋动科技 OrionX

趋动科技在AI算力资源池化解决方案OrionX中实现了GPU共享的能力[17]。在资源隔离方面,使用了CUDA劫持的方案,通过MPS以及其他方式限制算力。OrionX中也包含定制的device plugin和调度器方案,亦无开源。

另,OrionX属于GPU池化类解决方案,GPU资源隔离仅为OrionX的部分能力,详细请参见评论区。

总结

通过列举上述方案,可以看出各大公司主要还是处于试验期,应用尚不成熟。在设计上,倾向于对用户更易使用的,更通用的方案,而非考虑计算任务特性进而定制适合的方案。对规模很大的云场景,面向更多类型和水平的用户,如此设计是必行之举。对于GPU共享,一些资深工程师亦有深刻意见[19][20],讨论分析了在不同场景下技术的适用性问题。也推荐读者兼听则明。

注:本文仅代表笔者的个人观点,有表述错误的可能性,请读者仅作参考。且本文不代表笔者所处的任何机构的观点。

Reference

  • [1]https://www.alibabacloud.com/help/zh/doc-detail/171786.htm

  • [2]https://github.com/AliyunContainerService/gpushare-scheduler-extender

  • [3]https://github.com/AliyunContainerService/gpushare-device-plugin

  • [4]J. Gu, S. Song, Y. Li and H. Luo, "GaiaGPU: Sharing GPUs in Container Clouds," 2018 IEEE Intl Conf on Parallel & Distributed Processing with Applications, Ubiquitous Computing & Communications, Big Data & Cloud Computing, Social Computing & Networking, Sustainable Computing & Communications (ISPA/IUCC/BDCloud/SocialCom/SustainCom), Melbourne, Australia, 2018, pp. 469-476, doi: 10.1109/BDCloud.2018.00077.

  • [5]https://github.com/tkestack/vcuda-controller

  • [6]https://github.com/tkestack/gpu-manager

  • [7]https://github.com/tkestack/gpu-admission

  • [8]https://cloud.tencent.com/developer/article/1831090

  • [9]https://mp.weixin.qq.com/s?__biz=MzI2NDc5MDYzMA==&mid=2247488710&idx=1&sn=2424a831e01abfec4c2541faee869c90&scene=21#wechat_redirect

  • [10]https://xie.infoq.cn/article/eb24edc21bfda6527df8aaa31

  • [11]https://ieeexplore.ieee.org/document/8743200

  • [12]https://github.com/sakjain92/Fractional-GPUs

  • [13]https://zhuanlan.zhihu.com/p/391539554

  • [14]https://github.com/4paradigm/k8s-device-plugin

  • [15]https://aws.amazon.com/cn/blogs/opensource/virtual-gpu-device-plugin-for-inference-workload-in-kubernetes/

  • [16]https://github.com/awslabs/aws-virtual-gpu-device-plugin

  • [17]https://github.com/virtaitech/orion

  • [18]alibaba/GPU-scheduler-for-deep-learning

  • [19]https://mp.weixin.qq.com/s?__biz=MzU5ODY2MTk3Nw==&mid=2247485478&idx=1&sn=f6080430cefc3cfceada7952b5448663&chksm=fe418610c9360f06a10a7568d4ac6b9803849e6d9e6c2a248378d5c22589c0fb21826301a375&mpshare=1&scene=1&srcid=0720cxzBfdyN4xjWWkweLtYI&sharer_sharetime=1628583192078&sharer_shareid=167c4152e9744cd338d09d105c484292&version=3.1.11.90266&platform=mac#rd

  •  [20]https://github.com/zw0610/zw0610.github.io/tree/master/notes-cn

  • [21]https://zhuanlan.zhihu.com/p/285994980

  • [22]https://zhuanlan.zhihu.com/p/368424273

独家重磅课程!

1、重磅来袭!基于LiDAR的多传感器融合SLAM 系列教程:LOAM、LeGO-LOAM、LIO-SAM

2、系统全面的相机标定课程:单目/鱼眼/双目/阵列 相机标定:原理与实战

3、视觉SLAM必备基础课程:视觉SLAM必学基础:ORB-SLAM2源码详解

4、深度学习三维重建课程:基于深度学习的三维重建学习路线

5、激光定位+建图课程:激光SLAM怎么学?手把手教你Cartographer从入门到精通!

6、视觉+IMU定位课程 视觉惯性里程计58讲教程全部上线!IMU预积分/残差雅克比推导、边缘化约束、滑窗BA!

7、手把手图像三维重建课程:系统学三维重建42讲全部上线!掌握稠密匹配、点云融合、网格重建、纹理贴图!


全国最棒的SLAM、三维视觉学习社区↓


技术交流微信群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN算法竞赛等微信群,请添加微信号 chichui502 或扫描下方加群,备注:”名字/昵称+学校/公司+研究方向“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

投稿、合作也欢迎联系:simiter@126.com


扫描关注视频号,看最新技术落地及开源方案视频秀 ↓


—   版权声明  —

本公众号原创内容版权属计算机视觉life所有;从公开渠道收集、整理及授权转载的非原创文字、图片和音视频资料,版权属原作者。如果侵权,请联系我们,会及时删除。

登录查看更多
11

相关内容

2021年中国AI开发平台市场报告
专知会员服务
71+阅读 · 2021年10月26日
专知会员服务
22+阅读 · 2021年7月15日
专知会员服务
78+阅读 · 2020年6月20日
华为发布《自动驾驶网络解决方案白皮书》
专知会员服务
119+阅读 · 2020年5月22日
最新《分布式机器学习》论文综述最新DML进展,33页pdf
专知会员服务
117+阅读 · 2019年12月26日
是时候放弃TensorFlow集群,拥抱Horovod了
AI前线
5+阅读 · 2019年4月28日
Colab 免费提供 Tesla T4 GPU,是时候薅羊毛了
机器之心
10+阅读 · 2019年4月25日
免费!Google Colab现已支持英伟达T4 GPU
新智元
5+阅读 · 2019年4月25日
干货|GPU加速深度学习
全球人工智能
5+阅读 · 2017年7月20日
Arxiv
3+阅读 · 2021年10月14日
Arxiv
13+阅读 · 2021年5月25日
Arxiv
3+阅读 · 2020年11月28日
Arxiv
15+阅读 · 2020年2月5日
Arxiv
3+阅读 · 2018年3月13日
Arxiv
3+阅读 · 2015年11月29日
VIP会员
相关资讯
是时候放弃TensorFlow集群,拥抱Horovod了
AI前线
5+阅读 · 2019年4月28日
Colab 免费提供 Tesla T4 GPU,是时候薅羊毛了
机器之心
10+阅读 · 2019年4月25日
免费!Google Colab现已支持英伟达T4 GPU
新智元
5+阅读 · 2019年4月25日
干货|GPU加速深度学习
全球人工智能
5+阅读 · 2017年7月20日
相关论文
Arxiv
3+阅读 · 2021年10月14日
Arxiv
13+阅读 · 2021年5月25日
Arxiv
3+阅读 · 2020年11月28日
Arxiv
15+阅读 · 2020年2月5日
Arxiv
3+阅读 · 2018年3月13日
Arxiv
3+阅读 · 2015年11月29日
Top
微信扫码咨询专知VIP会员