Volcano vgpu 设备插件用于 Kubernetes
注意:
使用 volcano-vgpu 时,不需要 安装 HAMi,仅使用
Volcano vgpu device-plugin 即可。它可以为由 volcano 管理的 NVIDIA 设备提供设备共享机制。
该插件基于 Nvidia Device Plugin,并使用 HAMi-core 实现对 GPU 卡的硬隔离支持。
Volcano vgpu 仅在 volcano > 1.9 版本中可用。
快速开始
安装 Volcano
helm repo add volcano-sh https://volcano-sh.github.io/helm-charts
helm install volcano volcano-sh/volcano -n volcano-system --create-namespace
配置调度器
更新调度器配置:
kubectl edit cm -n volcano-system volcano-scheduler-configmap
kind: ConfigMap
apiVersion: v1
metadata:
name: volcano-scheduler-configmap
namespace: volcano-system
data:
volcano-scheduler.conf: |
actions: "enqueue, allocate, backfill"
tiers:
- plugins:
- name: priority
- name: gang
- name: conformance
- plugins:
- name: drf
- name: deviceshare
arguments:
deviceshare.VGPUEnable: true # 启用 vgpu
- name: predicates
- name: proportion
- name: nodeorder
- name: binpack
启用 Kubernetes 的 GPU 支持
在你想要使用的 所有 GPU 节点上启用此选项后,
可以通过部署以下 DaemonSet 来在集群中启用 GPU 支持:
kubectl create -f https://raw.githubusercontent.com/Project-HAMi/volcano-vgpu-device-plugin/main/volcano-vgpu-device-plugin.yml
验证环境是否就绪
检查节点状态,如果 volcano.sh/vgpu-number
出现在 allocatable 资源中,即表示正常。
kubectl get node {node name} -oyaml
输出示例:
status:
addresses:
- address: 172.17.0.3
type: InternalIP
- address: volcano-control-plane
type: Hostname
allocatable:
cpu: "4"
ephemeral-storage: 123722704Ki
hugepages-1Gi: "0"
hugepages-2Mi: "0"
memory: 8174332Ki
pods: "110"
volcano.sh/gpu-number: "10" # vGPU 资源
capacity:
cpu: "4"
ephemeral-storage: 123722704Ki
hugepages-1Gi: "0"
hugepages-2Mi: "0"
memory: 8174332Ki
pods: "110"
volcano.sh/gpu-memory: "89424"
volcano.sh/gpu-number: "10" # vGPU 资源
运行 VGPU 作业
可以通过在 resources.limits
中设置 volcano.sh/vgpu-number
、volcano.sh/vgpu-cores
和 volcano.sh/vgpu-memory
来请求 VGPU:
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
name: gpu-pod1
spec:
containers:
- name: cuda-container
image: nvidia/cuda:9.0-devel
command: ["sleep"]
args: ["100000"]
resources:
limits:
volcano.sh/vgpu-number: 2 # 请求 2 张 GPU 卡
volcano.sh/vgpu-memory: 3000 # (可选)每个 vGPU 使用 3G 显存
volcano.sh/vgpu-cores: 50 # (可选)每个 vGPU 使用 50% 核心
EOF
你可以在容器内使用 nvidia-smi
验证设备显存使用情况:
⚠️ 警告:
如果你在使用 device plugin 配合 NVIDIA 镜像时未显式请求 GPU,
那么该节点上所有 GPU 都会暴露在你的容器中。
容器中使用的 vGPU 数量不能超过该节点上的 GPU 总数。
监控
volcano-scheduler-metrics
会记录每次 GPU 使用和限制情况,
你可以通过访问以下地址来获取这些指标:
curl {volcano scheduler cluster ip}:8080/metrics