すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:GPUデバイスプラグイン関連の操作

最終更新日:Nov 14, 2024

GPUデバイスプラグインは、KubernetesクラスターのGPUを備えたノードを管理するために使用されるコンポーネントです。 これにより、KubernetesはGPUリソースをより便利かつ効率的に管理できます。 このトピックでは、排他的なGPUスケジューリングを伴うシナリオで、ノードでのGPUデバイスプラグインの再起動、GPUデバイスの分離、GPUデバイスプラグインのバージョンのクエリと更新などの操作を実行する方法について説明します。

GPUデバイスプラグインの再起動

Container Service for Kubernetes (ACK) 専用のGPUスケジューリングシナリオでは、GPUデバイスプラグインはデフォルトで静的ポッドとしてデプロイされます。 したがって、静的ポッドが実行されているノードで再起動プロセスを実行する必要があります。 次のコマンドを実行して、GPUデバイスプラグインを再起動します。

mv /etc/kubernetes/manifests/nvidia-device-plugin.yml /etc/kubernetes/
# Wait a few seconds for the system to delete the original pod. 
mv /etc/kubernetes/nvidia-device-plugin.yml /etc/kubernetes/manifests/

GPUデバイスの分離

重要

GPUデバイスの分離操作は、nvidia-device-plugin 0.9.1以降でのみサポートされています。 nvidia-device-pluginのバージョンを照会する方法の詳細については、「Device-Pluginのバージョンの照会と更新」をご参照ください。

ACK排他的GPUスケジューリングシナリオでは、特定の理由 (GPUデバイスの障害など) でノード上の特定のGPUデバイスを分離する必要がある場合があります。 ACKは、障害のあるGPUデバイスへの新しいポッドのスケジューリングを回避するために、ノード上の障害のあるGPUデバイスを手動で分離できるようにするメカニズムを提供します。 GPUデバイスを分離するには、次の操作を実行します。

目的のノードの /etc/nvidia-device-plugin/ ディレクトリでunhealthyDevices.jsonファイルを見つけます。 存在しない場合は、unhealthyDevices.jsonという名前のファイルを作成できます。 unhealthyDevices.jsonファイルは、次のJSON形式である必要があります。

{
 "index": ["x" 、"x" ..] 、
 "uuid": ["xxx", "xxx" ..]
} 

オンデマンドでJSON文字列で分離するデバイスのindexまたはuuidパラメーターを指定できます。 デバイスごとに、2つのパラメータのいずれかを指定するだけで済みます。 ファイルを保存すると、ファイルは自動的に有効になります。

クラスターに報告されたnvidia.com/gpuリソースの量を照会して、分離結果を確認できます。

GPUデバイスプラグインのバージョンの照会と更新

GPU Device Pluginのタグは、目的のノードの /etc/kubernetes/manifests/nvidia-device-plugin.ymlファイルにあります。 このタグが示すバージョン番号は、GPU Device Pluginのバージョンです。

ACKでサポートされている最新バージョンはv0.9.3-0dd4d5f5-aliyunです。 ノードのnvidia-device-pluginを最新バージョンに更新する場合は、nvidia-device-plugin静的YAMLファイル /etc/kubernetes/manifests/nvidia-device-plugin.ymlを次の内容 (imageタグ、スタートアップコマンド、リソース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
    # Replace <REGION-ID> in Image with the ID of the region where your node resides, such as cn-beijing or 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デバイスプラグインでデバイスチェックポイントのキーを変更する

デバイスプラグインは、ポッドのデバイス割り当て中にノードにチェックポイントファイルを作成し、割り当てられたデバイスと対応するポッド情報を記録および保存します。 NVIDIA GPUデバイスプラグインでは、デフォルトで、チェックポイントファイルは各GPUデバイスのユニバーサル一意識別子 (UUID) を一意識別子 (キー) として使用します。 次の手順を実行して、このキーをデバイスインデックスに変更し、VMコールド移行中のUUID損失などの問題を解決します。

  1. デバイスプラグインのバージョンを確認します。

    対象ノードの /etc/kubernetes/manifests/nvidia-Device-Plugin. ymlファイルのdevice pluginのimageタグを表示します。 デバイスプラグインのバージョンを示すタグです。 バージョン番号が0.9.3以降の場合は、変更する必要はありません。 それ以外の場合は、最新バージョンv0.9.3-0dd4d5f5-aliyunに変更します。

  2. 静的ポッドの環境変数を変更します。

    次のコードを使用して、/etc/kubernetes/manifests/nvidia-device-plugin.ymlファイルを編集して、新しい環境変数CHECKPOINT_DEVICE_ID_STRATEGYを静的ポッド構成に追加します。

    env:
          -name: CHECKPOINT_DEVICE_ID_STRATEGY
            値: index 
  3. GPUデバイスプラグインを再起動する:

    変更を有効にするためにノードでGPUデバイスプラグインを再起動する方法の詳細については、「GPUデバイスプラグインの再起動」をご参照ください。

関連ドキュメント

GPU関連の問題の詳細については、「GPUアクセラレーションノードの診断」および「FAQ」をご参照ください。

GPU共有の詳細については、「GPU共有の概要」をご参照ください。