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損失などの問題を解決します。
デバイスプラグインのバージョンを確認します。
対象ノードの
/etc/kubernetes/manifests/nvidia-Device-Plugin. yml
ファイルのdevice pluginのimageタグを表示します。 デバイスプラグインのバージョンを示すタグです。 バージョン番号が0.9.3以降の場合は、変更する必要はありません。 それ以外の場合は、最新バージョンv0.9.3-0dd4d5f5-aliyun
に変更します。静的ポッドの環境変数を変更します。
次のコードを使用して、
/etc/kubernetes/manifests/nvidia-device-plugin.yml
ファイルを編集して、新しい環境変数CHECKPOINT_DEVICE_ID_STRATEGY
を静的ポッド構成に追加します。env: -name: CHECKPOINT_DEVICE_ID_STRATEGY 値: index
GPUデバイスプラグインを再起動する:
変更を有効にするためにノードでGPUデバイスプラグインを再起動する方法の詳細については、「GPUデバイスプラグインの再起動」をご参照ください。
関連ドキュメント
GPU関連の問題の詳細については、「GPUアクセラレーションノードの診断」および「FAQ」をご参照ください。
GPU共有の詳細については、「GPU共有の概要」をご参照ください。