本文主要描述如何通过volcano实现GPU资源的虚拟化。基于volcano官方文档整理。
1. 背景
随着大模型和AI的发展,GPU算力的需求越来越高,但是GPU成本高昂,对于小型工作负载,单个GPU可能造成资源浪费;而对于大型工作负载,单个GPU的算力又可能未被充分挖掘。因此需要通过GPU虚拟化的技术来提高GPU的利用率。
2. Volcano虚拟化方式
Volcano主要支持硬件和软件两种GPU共享模式,用以实现vGPU调度并满足不同的硬件能力与性能需求:
2.1. HAMI-core(基于软件的vGPU)
描述: 通过VCUDA (一种CUDA API劫持技术) 对GPU核心与显存的使用进行限制,从而实现软件层面的虚拟GPU切片。
使用场景: 适用于需要细粒度GPU共享的场景,兼容所有类型的GPU
。
2.2. Dynamic MIG(硬件级GPU切片)
描述: 采用NVIDIA的MIG (Multi-Instance GPU)
技术,可将单个物理GPU分割为多个具备硬件级性能保障的隔离实例。
使用场景: 尤其适用于对性能敏感的工作负载,要求GPU支持MIG特性
(如A100、H100系列)。
2.3. 对比
模式 | 隔离级别 | 是否依赖MIG GPU | 需注解指定模式 | 核心/显存控制方式 | 推荐应用场景 |
---|---|---|---|---|---|
HAMI-core | 软件 (VCUDA) | 否 | 否 | 用户自定义 (核心/显存) | 通用型工作负载 |
Dynamic MIG | 硬件 (MIG) | 是 | 是 | MIG实例规格决定 | 对性能敏感的工作负载 |
3. 部署
1、 部署volcano,参考:Volcano的使用
2、 部署volcano-vgpu-device-plugin
。
该组件是一个DaemonSet。
1 | wget https://raw.githubusercontent.com/Project-HAMi/volcano-vgpu-device-plugin/refs/heads/main/volcano-vgpu-device-plugin.yml |
更改调度器配置:
1 | kind: ConfigMap |
验证部署
1 | # kubectl get node {node-name} -o yaml |
4. 使用
通过volcano.sh/vgpu-mode: "hami-core"
来选择使用哪种虚拟化方式。
4.1. HAMI-core使用方法
pod yaml
1 | kind: Pod |
4.2. Dynamic MIG使用方法
若需启用MIG (Multi-Instance GPU)模式,请在目标GPU节点上执行以下命令:
1 | sudo nvidia-smi -mig 1 |
- MIG实例规格配置(可选):
volcano-vgpu-device-plugin
会自动生成一套初始MIG配置,并存储于kube-system
命名空间下的volcano-vgpu-device-config
ConfigMap中。用户可按需自定义此配置。更多详情请参阅vgpu设备插件YAML文件。
- 带MIG注解的Pod配置示例:
1 | kind: Pod |
注意:实际分配的显存大小取决于最匹配的MIG实例规格(例如:请求3GB显存,可能会分配到规格为5GB的MIG实例)。
参考:
赞赏一下