前提条件
运行Volcano设备插件所需的前提条件如下:
- NVIDIA驱动 > 440
- nvidia-docker版本 > 2.0 (参见如何安装及其前提条件)
- 将docker配置为使用nvidia作为默认运行时
- Kubernetes版本 >= 1.16
- Volcano版本 >= 1.9
环境设置
安装 Volcano
参考安装指南安装Volcano。
安装后,更新调度器配置:
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
安装 Volcano vGPU Device Plugin
参考Enabling GPU Support in Kubernetes。
验证环境是否就绪
检查节点状态,如果在可分配资源(allocatable resources)中包含 volcano.sh/vgpu-memory
和 volcano.sh/vgpu-number
,则表示环境正常。
$ 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/vgpu-memory: "89424"
volcano.sh/vgpu-number: "8" # GPU 资源
capacity:
cpu: "4"
ephemeral-storage: 123722704Ki
hugepages-1Gi: "0"
hugepages-2Mi: "0"
memory: 8174332Ki
pods: "110"
volcano.sh/vgpu-memory: "89424"
volcano.sh/vgpu-number: "8" # GPU 资源
运行 GPU 共享作业
可以通过在resource.limit
中设置”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:
schedulerName: volcano
containers:
- name: cuda-container
image: nvidia/cuda:9.0-devel
command: ["sleep"]
args: ["100000"]
resources:
limits:
volcano.sh/vgpu-number: 2 # 申请 2 个 vGPU 卡
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
还可通过访问以下地址,在节点上收集GPU利用率、GPU显存使用量、Pod的GPU显存限制和Pod的GPU显存使用量等指标:
curl {volcano-device-plugin-pod-ip}:9394/metrics

问题与贡献
- 可以通过提交新的issue报告Bug。
- 可以通过发起拉取请求(pull request)为项目做出贡献。