GPU设备插件(GPU Device-Plugin)是Kubernetes集群中用于管理每个节点的GPU的组件,使得Kubernetes能够更方便、高效地利用GPU资源。本文介绍在独占GPU调度场景下,如何对节点的GPU Device-Plugin进行重启、GPU设备隔离、版本查看与更新等操作。
GPU Device-Plugin重启
在ACK的独占GPU调度场景下,节点上GPU的设备上报的Device Plugin默认以一个Static Pod的形式部署,所以重启过程需要在目标节点上进行。具体操作如下:
mv /etc/kubernetes/manifests/nvidia-device-plugin.yml /etc/kubernetes/
# 等待几秒,旧Pod被清理的过程。
mv /etc/kubernetes/nvidia-device-plugin.yml /etc/kubernetes/manifests/
GPU设备隔离
GPU设备隔离操作仅支持在nvidia-device-plugin的v0.9.1及以上版本中使用。您可以参见下文查看并更新Device-Plugin版本查看Device-Plugin的版本。
在ACK的独占GPU调度场景下,出于某些原因(例如GPU设备故障等),您需要隔离节点上的某个GPU设备,ACK提供了一个机制可供您手动对节点上的某个设备进行隔离,以避免新的GPU应用Pod被分配到这张GPU卡。具体的操作方式如下:
在目标节点/etc/nvidia-device-plugin/
的目录下操作unhealthyDevices.json
这个文件,如果此文件不存在,请新建此文件。unhealthyDevices.json
的文件格式请按照以下JSON格式编排。
{
"index": ["x", "x" ..],
"uuid": ["xxx", "xxx" ..]
}
您可以根据个人偏好,在JSON中填写目标隔离设备的index
或uuid
(同一个设备只需填写任意一个),保存文件后即可自动生效。
设置完成后,您可以通过查看Kubernetes Node上报的Resource中的nvidia.com/gpu
资源的数量以查看隔离的效果。
查看并更新Device-Plugin版本
您可以在目标节点上/etc/kubernetes/manifests/nvidia-device-plugin.yml
文件中查看的device-plugin的镜像Tag,其所代表的版本号即为Device-Plugin的版本。
目前ACK所支持的最新的版本为v0.9.3-0dd4d5f5-aliyun
。如需将节点中的nvidia-device-plugin升级至最新版本,请将nvidia-device-plugin的static的YAML文件(/etc/kubernetes/manifests/nvidia-device-plugin.yml
)的内容按照以下YAML中所示进行修改(镜像Tag、启动命令、resources
、volumeMounts
和volumes
)。
apiVersion: v1
kind: Pod
... ...
hostNetwork: true
containers:
- image: registry-<REGION-ID>-vpc.ack.aliyuncs.com/acs/k8s-device-plugin:v0.9.1-576cfc77-aliyun
# Image中的<REGION-ID>需替换为节点所在的Region Id,例如cn-beijing、cn-hangzhou等。
name: nvidia-device-plugin-ctr
args: ["--fail-on-init-error=false","--pass-device-specs=true","--device-id-strategy=index"]
resources:
requests:
memory: "1Mi"
cpu: "1m"
limits:
memory: "200Mi"
cpu: "500m"
... ...
volumeMounts:
- name: device-plugin
mountPath: /var/lib/kubelet/device-plugins
- name: device-plugin-config
mountPath: /etc/nvidia-device-plugin
volumes:
- name: device-plugin
hostPath:
path: /var/lib/kubelet/device-plugins
- name: device-plugin-config
hostPath:
path: /etc/nvidia-device-plugin
type: DirectoryOrCreate
GPU Device-Plugin修改Device Checkpoint的Key
Device-Plugin在为Pod分配设备时会在节点上创建一份CheckPoint文件,用于记录和保存哪些设备已经被分配,以及它们对应Pod的信息。在NVIDIA GPU Device-Plugin中,Checkpoint文件默认使用GPU的UUID为作为每个GPU设备的唯一标识符(Key)。您可以参见下文将该Key修改为设备的Index,以解决VM冷迁移导致的UUID丢失等问题。
在目标节点上的
/etc/kubernetes/manifests/nvidia-device-plugin.yml
文件中查看Device-Plugin的镜像Tag,其所代表的版本号即为Device-Plugin的版本。如果版本号大于等于0.9.3的版本,则无需修改版本号,否则请将版本号修改为最新的版本号v0.9.3-0dd4d5f5-aliyun
。修改
/etc/kubernetes/manifests/nvidia-device-plugin.yml
文件中的Static Pod的环境变量,参见以下代码增加一个环境变量CHECKPOINT_DEVICE_ID_STRATEGY
。env: - name: CHECKPOINT_DEVICE_ID_STRATEGY value: index
参见本文档中的GPU Device-Plugin重启对该节点上的GPU Device-Plugin进行重启,使得修改内容生效。
相关文档
如遇到GPU节点相关问题,请参见自助诊断GPU节点问题、GPU FAQ。
如需了解共享GPU调度的相关信息,请参见共享GPU调度概述。