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調度概述。