GPU 共享/虚拟化方案: 故障隔离、显存隔离、算力隔离
AI
任务一般都会用到 GPU
,这类资源相对 CPU/内存
来说往往更加昂贵,目前实现混部的开源方案有很多,基本是通过内核 cgroup 特性
针对传统 CPU
任务来做,真正实现 GPU
混部的方案却很少。因此,实现支持 QoS based GPU 共享/虚拟化
,即在支持 故障隔离、显存隔离、算力隔离 的同时 兼顾 GPU 应用性能,对混部来说是一种差异化竞争,意义重大。
目前业界已有的一些 GPU 共享/虚拟化
方案:
-
不支持隔离但同 GPU 可以挂多 Pod(可能被大家称为“软隔离”):
-
支持 cuda 层隔离的 vcuda
-
MPS
- 百度 MPS+CUDA Hook ,2.0 支持用户态和内核态两种方案
- 字节火山引擎 过去听分享可能也用到了 MPS
-
驱动层实现隔离
-
GPU 池化
-
深度学习共享显存的GPU共享
- 蚂蚁蚁人深度学习
这些方案架构都比较类似,往往是 scheduler extender + device plugin
:
新增 GPU 资源类型
,scheduler
维护一个新的 GPU 分配量
来实现调度和分配逻辑。具体特点:
- 软隔离方案是没有隔离,简单支持 GPU 多挂载,算力、显存等是否超限全靠用户应用自觉;
- vcuda方案是实现了隔离,拦截 cuda API,实现隔离,但实测性能不是很好,一些推理 case 延迟较高,且需随 cuda api 更新而变动;
- NVIDIA MPS 性能会好一些,但因为原生没有故障隔离,因此没有研究很多,根据百度文章介绍可能做了一些改造;
- 第四种驱动层隔离 cGPU 方案,后面腾讯云也推出 qGPU 实现,这类相比之前的方案性能各方面可能会好一点,但只能在公有云上使用,无法用来提高用户自身集群的 GPU 使用率。
- 蚂蚁深度学习共享显存,是与框架运行时,目前还不能形成标准;
以上是过去调研了解到的一些方案,若有错误之处,欢迎批评指正。
「如果这篇文章对你有用,请随意打赏」
FEATURED TAGS
agent
apiserver
application
bandwidth-limit
cgo
cgroupfs
ci/cd
client-go
cloudnative
cncf
cni
community
container
container-network-interface
containerd
controller
coredns
crd
custom-controller
deployment
docker
docker-build
docker-image
drop
ebpf
ecology
egress
etcd
gitee
github
gitlab
golang
governance
hpa
http2
image
ingress
iptables
jobs
kata
kata-runtime
kernel
kind
kubelet
kubenetes
kubernetes
library
linux-os
logging
loki
metrics
monitor
namespace
network
network-troubleshooting
node
nodeport
pingmesh
pod
prestop
prometheus
proxyless
pvc
rollingupdate
schedule
scheduler
serverless
sidecar
sigtrem
systemd
throttling
timeout
tools
traceroute