koordinator
koordinator copied to clipboard
[proposal] 实现支持隔离并兼顾应用性能的 GPU 共享/虚拟化方案
What is your proposal:
AI 任务一般都会用到 GPU,这类资源相对 CPU/内存来说往往更加昂贵,目前实现混部的开源方案有很多,基本是通过内核 cgroup 特性针对传统 CPU 任务来做,真正实现 GPU 混部的方案却很少。因此,实现支持 QoS based GPU 共享/虚拟化,即在支持 故障隔离、显存隔离、算力隔离 的同时 兼顾 GPU 应用性能,对混部来说是一种差异化竞争,意义重大。
Why is this needed:
目前业界已有的一些 GPU 共享/虚拟化方案:
-
不支持隔离但同 GPU 可以挂多 Pod(可能被大家称为“软隔离”):
-
支持 cuda 层隔离的 vcuda
-
MPS
- 百度 MPS+CUDA Hook ,2.0 支持用户态和内核态两种方案
- 字节火山引擎 过去听分享可能也用到了 MPS
-
驱动层实现隔离
-
驱动科技GPU 池化
以上是过去调研了解到的一些方案,若有错误之处,欢迎批评指正。这些方案架构都比较类似,往往是 scheduler extender + device plugin,新增 GPU 资源类型,调度器维护一个新的 GPU 分配量来实现调度和分配逻辑。具体特点是第一种方案没有隔离,简单支持 GPU 多挂载,算力、显存等是否超限全靠用户应用自觉;第二种实现了隔离,拦截 cuda API,实现隔离,但实测性能不是很好,一些推理 case 延迟较高,且需随 cuda api 更新而变动;第三种 NVIDIA MPS 性能会好一些,但因为原生没有故障隔离,因此没有研究很多,根据百度文章介绍可能做了一些改造;第四种,阿里云之前推出了驱动层隔离 cGPU 方案,后面腾讯云也推出 qGPU 实现,这类相比之前的方案性能各方面可能会好一点,但只能在公有云上使用,无法用来提高用户自身集群的 GPU 使用率。
综上所述,业界 GPU 共享/虚拟化方案有很多,大致看了一下 koordinator 的 gpushare 相关的 pr #502 可能类似第一种,这类相对同质化也比较严重,希望能更进一步,实现一种兼顾隔离和性能的方案!
Is there a suggested solution, if so, please add it:
可以参考 cGPU/qGPU... 之类的
https://www.usenix.org/conference/osdi20/presentation/xiao 在框架层面也是可以做一些工作的
https://www.usenix.org/conference/osdi20/presentation/xiao 在框架层面也是可以做一些工作的
嗯,但这种方式对用户不太友好
投mps一票
https://www.usenix.org/conference/osdi20/presentation/xiao 在框架层面也是可以做一些工作的
嗯,但这种方式对用户不太友好
同意。这种需要框架运行时支持的,不可能去做一一适配,感觉只会出现在公司内部的场景,有专门的团队做运维和场景适配。
公司内部这几种都有做过对比。第二种随模型迭代演进,后期维护成本非常高。还是看好第三种,希望大厂能开源共建。
看 字节 GTC 2022 介绍用了 vcuda+MPS,百度也在 MPS 上做了挺多,看起来如果能解决 MPS 故障隔离问题性能应该比其它时分复用好点
之前也调度过一些,最后选了腾讯的tkestack,感觉没啥开源特别好用的