Volcano GPU虚拟化
本文主要描述如何通过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。
wget https://raw.githubusercontent.com/Project-HAMi/volcano-vgpu-device-plugin/refs/heads/main/volcano-vgpu-device-plugin.yml
kubectl apply -f volcano-vgpu-device-plugin.yml
更改调度器配置:
kind: ConfigMap
apiVersion: v1
metadata:
name: volcano-scheduler-configmap
namespace: volcano-system
data:
volcano-scheduler.conf: |
actions: "enqueue, allocate, backfill"
tiers:
- plugins:
- name: predicates
- name: deviceshare
arguments:
deviceshare.VGPUEnable: true # 启用vgpu插件
deviceshare.SchedulePolicy: binpack # 调度策略:binpack / spread
验证部署
# kubectl get node {node-name} -o yaml
# 查看是否有上报GPU资源
volcano.sh/vgpu-memory: "89424"
volcano.sh/vgpu-number: "8"
4. 使用
通过volcano.sh/vgpu-mode: "hami-core"
来选择使用哪种虚拟化方式。
4.1. HAMI-core使用方法
pod yaml
kind: Pod
apiVersion: v1
metadata:
name: hami-pod
annotations:
volcano.sh/vgpu-mode: "hami-core" # 指定模式
spec:
schedulerName: volcano
containers:
- name: cuda-container
image: nvidia/cuda:9.0-devel
resources:
limits:
volcano.sh/vgpu-number: 1 # 请求1张GPU卡
volcano.sh/vgpu-cores: 50 # (可选)每个vGPU使用50%核心
volcano.sh/vgpu-memory: 3000 # (可选)每个vGPU使用3G显存
4.2. Dynamic MIG使用方法
若需启用MIG (Multi-Instance GPU)模式,请在目标GPU节点上执行以下命令:
sudo nvidia-smi -mig 1
- MIG实例规格配置(可选):
volcano-vgpu-device-plugin
会自动生成一套初始MIG配置,并存储于kube-system
命名空间下的volcano-vgpu-device-config
ConfigMap中。用户可按需自定义此配置。更多详情请参阅vgpu设备插件YAML文件。
- 带MIG注解的Pod配置示例:
kind: Pod
apiVersion: v1
metadata:
name: mig-pod
annotations:
volcano.sh/vgpu-mode: "mig"
spec:
schedulerName: volcano
containers:
- name: cuda-container
image: nvidia/cuda:9.0-devel
resources:
limits:
volcano.sh/vgpu-number: 1
volcano.sh/vgpu-memory: 3000
注意:实际分配的显存大小取决于最匹配的MIG实例规格(例如:请求3GB显存,可能会分配到规格为5GB的MIG实例)。
参考:
-
AliyunContainerService/gpushare-scheduler-extender: GPU Sharing Scheduler for Kubernetes Cluster
-
volcano-vgpu-device-plugin: Device-plugin for volcano vgpu which support hard resource isolation
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.