GPU

Volcano GPU虚拟化

Posted by 胡伟煌 on 2025-06-23

本文主要描述如何通过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
2
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

更改调度器配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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

验证部署

1
2
3
4
# 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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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节点上执行以下命令:

1
sudo nvidia-smi -mig 1
  • MIG实例规格配置(可选)

volcano-vgpu-device-plugin会自动生成一套初始MIG配置,并存储于kube-system命名空间下的volcano-vgpu-device-config ConfigMap中。用户可按需自定义此配置。更多详情请参阅vgpu设备插件YAML文件

  • 带MIG注解的Pod配置示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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实例)。

参考:



支付宝打赏 微信打赏

赞赏一下