Kubernetes GPU 虚拟化方案
主流架构Device Plugin:K8s订定装备插件接口规范,定义异构资源的上报和分配,装备厂商只必要实现相应的API接口,无需修改kubelet源码即可实现对其他硬件装备的支持。
Extended Resource:Scheduler可以根据Pod的创建删除计算资源可用量,而不再范围于CPU和内存的资源统计,进而将有特殊资源需求的Pod调度到相应的节点上。
通过Device Plugin 异构资源调度流程如下:
[*]Device plugin 向kubelet上报当前节点资源情况
[*]用户通过yaml文件创建负载,定义Resource Request
[*]kube-scheduler根据从kubelet同步到的资源信息和Pod的资源请求,为Pod绑定符合的节点
[*]kubelet监听到绑定到当前节点的Pod,调用Device plugin的allocate接口为Pod分配装备
[*]kubelet启动Pod内的容器,将装备映射给容器
https://img2024.cnblogs.com/other/3300446/202501/3300446-20250109163658999-929180138.png
GPU虚拟化方案大致分为用户态隔离和内核态隔离:
[*]用户态主要是通过vcuda的方式,挟制cuda调用,比如下面介绍的两种开源
[*]内核态主要是用过虚拟gpu驱动的方式,比如腾讯云的qgpu和阿里云的cgpu,不过这两个都是闭源的
Nvidia-GPU
NVIDIA 提供的 Time-Slicing GPUs in Kubernetes 是一种通过 oversubscription(超额订阅) 来实现 GPU 共享的计谋,有两种计谋,单卡调度模式和超卖模式。
单卡的意思就是一个Pod调度一张GPU,当这个GPU有Pod使用了,就不可被其他Pod使用。
超卖模式这种计谋能让多个任务在同一个 GPU 上进行,而不是每个任务都独占一个 GPU。Time Slicing(时间片)指的是 GPU 自己的时间片调度。
也就是说假如有两个进程同时使用同一个GPU,两个进程同时把 CUDA 任务发射到 GPU 上去,GPU 并不会同时实行,而是采用时间片轮转调度的方式。
进程和进程间的显存和算力没有任何限制,谁抢到就是谁的。
腾讯GPU-manager
基于Nvidia的k8s Device Plugin 实现
GPUManager是腾讯自研的容器层GPU虚拟化方案,除兼容Nvidia 官方插件的GPU资源管理功能外,还增加碎片资源调度、GPU调度拓扑优化、GPU资源Quota等功能,在容器层面实现了GPU资源的化整为零,而在原理上仅使用了wrap library和linux动态库链接技能,就实现了GPU 算力和显存的上限隔离。
在工程设计上,GPUManager方案包括三个部分,cuda封装库vcuda、k8s device plugin 插件gpu-manager-daemonset和k8s调度插件gpu-quota-admission。
vcuda库是一个对nvidia-ml和libcuda库的封装库,通过挟制容器内用户程序的cuda调用限制当前容器内进程对GPU和显存的使用。
gpu-manager-daemonset是尺度的k8s device plugin,实现了GPU拓扑感知、装备和驱动映射等功能。GPUManager支持共享和独占两种模式,当负载里tencent.com/vcuda-core request 值在0-100情况下,采用共享模式调度,优先将碎片资源集中到一张卡上,当负载里的tencent.com/vcuda-core request为100的倍数时,采用独占模式调度,必要注意的是GPUManager仅支持0~100和100的整数倍的GPU需求调度,无法支持150,220类的非100整数倍的GPU需求调度。
gpu-quota-admission是一个k8s Scheduler extender,实现了Scheduler的predicates接口,kube-scheduler在调度tencent.com/vcuda-core资源请求的Pod时,predicates阶段会调用gpu-quota-admission的predicates接口对节点进行过滤和绑定,同时gpu-quota-admission提供了GPU资源池调度功能,办理不同类型的GPU在namespace下的配额问题。
https://img2024.cnblogs.com/other/3300446/202501/3300446-20250109163659250-985337140.png
方案优点:
[*]同时支持碎片和整卡调度,提高GPU资源利用率
[*]支持同一张卡上容器间GPU和显存的使用隔离
[*]基于拓扑感知,提供最优的调度计谋
[*]对用户程序无侵入,用户无感
方案缺点:
[*]驱动和加速库的兼容性依靠于厂商
[*]存在约5%的性能消耗
此项目腾讯云官方已不再支持,社区也处在无人维护状态,亲测cuda12有问题,调用报错
HAMi
HAMi 可为多种异构装备提供虚拟化功能,支持装备共享和资源隔离。
支持的装备:
https://img2024.cnblogs.com/other/3300446/202501/3300446-20250109163659475-1793151292.png
https://img2024.cnblogs.com/other/3300446/202501/3300446-20250109163659671-22415403.png
HAMi 由多个组件组成,包括统一的 mutatingwebhook、统一的调度器扩展器、不同的装备插件以及针对每种异构 AI 装备的容器内虚拟化技能。
https://github.com/Project-HAMi/HAMi/tree/master
能力:
[*]支持碎片、整卡、多卡调度隔离,支持按量或者按百分比调度隔离
[*]支持指定目标卡型
[*]支持指定目标卡
目前该项目非常活跃,而且支持的cuda版本也比力友爱,>10.1
原文地点:https://leason.top/Kubernetes-GPU-虚拟化方案.html#more
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]