全部產品
Search
文件中心

Container Service for Kubernetes:GPU Device-Plugin相關操作

更新時間:Aug 27, 2024

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中填寫目標隔離裝置的indexuuid(同一個裝置只需填寫任意一個),儲存檔案後即可自動生效。

設定完成後,您可以通過查看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、啟動命令、resourcesvolumeMountsvolumes)。

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丟失等問題。

  1. 在目標節點上的/etc/kubernetes/manifests/nvidia-device-plugin.yml檔案中查看Device-Plugin的鏡像Tag,其所代表的版本號碼即為Device-Plugin的版本。如果版本號碼大於等於0.9.3的版本,則無需修改版本號碼,否則請將版本號碼修改為最新的版本號碼v0.9.3-0dd4d5f5-aliyun

  2. 修改/etc/kubernetes/manifests/nvidia-device-plugin.yml檔案中的Static Pod的環境變數,參見以下代碼增加一個環境變數CHECKPOINT_DEVICE_ID_STRATEGY

        env:
          - name: CHECKPOINT_DEVICE_ID_STRATEGY
            value: index
  3. 參見本文檔中的GPU Device-Plugin重啟對該節點上的GPU Device-Plugin進行重啟,使得修改內容生效。

相關文檔