Volcano Device Plugin
官方文档:
注意: 本文档仅供参考。
1. 前置条件
运行 Volcano 设备插件的先决条件列表如下:
- NVIDIA 驱动程序 > 440
- nvidia-docker 版本 > 2.0(请参阅安装方法及其先决条件)
- Docker 配置中默认运行时为 NVIDIA 。
- Kubernetes 版本 >= 1.16
- Volcano 版本 >= 1.9
2. 快速入门
2.1 准备您的GPU节点
以下步骤需要在所有 GPU 节点上执行。本说明文档假设您已安装 NVIDIA 驱动程序和 nvidia-docker。
请注意,您需要安装的是 nvidia-docker2 软件包,而不是 nvidia-container-toolkit 软件包。 这是因为--gpusKubernetes 尚未支持这些新选项。例如:
# Add the package repositories
$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
$ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
$ curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
$ sudo apt-get update && sudo apt-get install -y nvidia-docker2
$ sudo systemctl restart docker
您需要在节点上将 NVIDIA 运行时设置为默认运行时。我们将编辑 Docker 守护进程配置文件,该文件通常位于/etc/docker/daemon.json:
{
"default-runtime": "nvidia",
"runtimes": {
"nvidia": {
"path": "/usr/bin/nvidia-container-runtime",
"runtimeArgs": []
}
}
}
如果
runtimes尚未安装,请前往nvidia-docker的安装页面。
2.2 配置
您需要在 volcano-scheduler configMap 中启用 vgpu:
kubectl edit cm -n volcano-system volcano-scheduler-configmap
对于 Volcano v1.9 及更高版本,请使用以下配置映射。
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 # enable vgpu
deviceshare.SchedulePolicy: binpack # scheduling policy. binpack / spread
- name: predicates
- name: proportion
- name: nodeorder
- name: binpack
2.3 共享模式
Volcano-vgpu 支持两种设备共享方式:HAMi-core和dynamia-mig。一个节点可以使用HAMi-core,或Dynamic-mig。支持异构部署(节点的一部分使用 HAMi-core,另一部分使用 Dynamic-mig)。
简要介绍这两种模式:
HAMi-core 是由 HAMi 社区提供的用户层资源隔离器,适用于所有类型的 GPU。
Dynamic-mig 是一种硬件资源隔离器,适用于 Ampere 架构或更高版本的 GPU。
下表显示了汇总信息:
| 模式 | 隔离 | 需要 MIG GPU | 注解 | 核心/内存控制 | 推荐用于 |
|---|---|---|---|---|---|
| HAMI-core | 软件(VCUDA) | 不 | 不 | 是的 | 一般工作量 |
| 动态 MIG | 硬件 | 是的 | 是的 | MIG控制 | 对绩效要求高的工作 |
您可以通过调整配置来设置共享模式并自定义安装。
2.4 在 Kubernetes 中启用 GPU 支持
在所有要使用的 GPU 节点上启用此选项后,您可以通过部署以下 Daemonset 在集群中启用 GPU 支持:
kubectl create -f volcano-vgpu-device-plugin.yml
2.5 请确认环境已准备就绪
检查节点状态,如果volcano.sh/vgpu-number包含在可分配资源中则没问题。
kubectl get node {node name} -oyaml
...
capacity:
volcano.sh/vgpu-memory: "89424"
volcano.sh/vgpu-number: "10" # vGPU resource
2.6 运行 VGPU 作业
可以通过在 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
annotations:
volcano.sh/vgpu-mode: "hami-core" # (Optional, 'hami-core' or 'mig')
spec:
schedulerName: volcano
containers:
- name: cuda-container
image: nvidia/cuda:9.0-devel
command: ["sleep"]
args: ["100000"]
resources:
limits:
volcano.sh/vgpu-number: 2 # requesting 2 gpu cards
volcano.sh/vgpu-memory: 3000 # (optinal)each vGPU uses 3G device memory
volcano.sh/vgpu-cores: 50 # (optional)each vGPU uses 50% core
EOF
您可以使用容器内的 nvidia-smi 来验证设备内存。
警告: 如果您在使用 NVIDIA 镜像的设备插件时未请求 GPU,则机器上的所有 GPU 都将暴露在您的容器内。容器使用的虚拟 GPU 数量不能超过该节点上的 GPU 数量。 您可以通过分配注解来指定此任务的模式
volcano.sh/vgpu-mode;否则,两种模式均可用。
3. 监视器
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