このページでは、Google Kubernetes Engine(GKE)の GPU に関連する問題を解決する方法について説明します。
さらにサポートが必要な場合は、Cloud カスタマーケアにお問い合わせください。
GPU ドライバのインストール
このセクションでは、GKE での NVIDIA デバイス ドライバの自動インストールに関するトラブルシューティング情報を提供します。
Ubuntu ノードでドライバのインストールが失敗する
L4 GPU または H100 GPU がアタッチされた Ubuntu ノードを使用する場合、GKE がインストールするデフォルトの GPU ドライバが、これらの GPU に必要なバージョン以上ではない可能性があります。その結果、GPU デバイス プラグイン Pod が保留中のままになり、これらのノード上の GPU ワークロードで問題が発生する可能性があります。
この問題を解決するには、GPU ドライバ バージョン 535 をデフォルト ドライバとしてインストールする次の GKE バージョンにアップグレードすることをおすすめします。
- 1.26.15-gke.1483000 以降
- 1.27.15-gke.1039000 以降
- 1.28.11-gke.1044000 以降
- 1.29.6-gke.1073000 以降
- 1.30.2-gke.1124000 以降
また、次のコマンドを実行して、ドライバ バージョン 535 以降を手動でインストールすることもできます。
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/ubuntu/daemonset-preloaded-R535.yaml
GPU デバイス プラグインが CrashLoopBackOff エラーで失敗する
2023 年 1 月 25 日より前にノードプールでドライバの手動インストール方法を使用した場合、その後、ドライバの自動インストールをサポートする GKE バージョンにノードプールをアップグレードすると、次の問題が発生します。両方のインストール ワークロードが同時に存在し、競合するドライバ バージョンをノードにインストールしようとします。
GPU デバイス プラグイン init コンテナが Init:CrashLoopBackOff
ステータスで失敗します。コンテナのログは次のようになります。
failed to verify installation: failed to verify GPU driver installation: exit status 18
この問題を解決するには、次の方法を試してください。
手動ドライバ インストール DaemonSet をクラスタから削除します。これにより、競合するインストール ワークロードが削除され、GKE がノードにドライバを自動的にインストールできるようになります。
kubectl delete -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/cos/daemonset-preloaded.yaml
手動ドライバ インストール DaemonSet マニフェストをクラスタに再適用します。2023 年 1 月 25 日に、自動ドライバのインストールを使用するノードを無視するようにマニフェストを更新しました。
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/cos/daemonset-preloaded.yaml
ノードプールの自動ドライバのインストールを無効にします。更新オペレーションが完了すると、既存のドライバ インストール DaemonSet が正常に動作するようになります。
gcloud container node-pools update POOL_NAME \ --accelerator=type=GPU_TYPE,count=GPU_COUNT,gpu-driver-version=disabled \ --cluster=CLUSTER_NAME \ --location=LOCATION
次のように置き換えます。
POOL_NAME
: ノードプールの名前。GPU_TYPE
: ノードプールですでに使用されている GPU タイプ。GPU_COUNT
: ノードプールにすでに接続されている GPU の数。CLUSTER_NAME
: ノードプールを含む GKE クラスタの名前。LOCATION
: クラスタの Compute Engine のロケーション。
エラー: "Container image cos-nvidia-installer:fixed is not present with pull policy of Never." または "Container image ubuntu-nvidia-installer:fixed is not present with pull policy of Never."
この問題は、nvidia-driver-installer
Pod が PodInitializing
状態にあり、GPU プラグイン デバイスまたは GPU ドライバ インストーラ Pod が次のエラーを報告している場合に発生します。具体的なエラー メッセージは、ノードで実行されているオペレーティング システムによって異なります。
COS
Container image "cos-nvidia-installer:fixed" is not present with pull policy of Never.
Ubuntu
Container image "gke-nvidia-installer:fixed" is not present with pull policy of Never.
この問題は、ガベージ コレクタがプリロードの NVIDIA ドライバ イメージを削除してノードのスペースを解放するときに発生することがあります。ドライバ Pod が再作成された場合、またはそのコンテナが再起動された場合、GKE はプリロードされたイメージを見つけることができません。
COS の実行時に発生するガベージ コレクションの問題を軽減するには、修正を含む次のいずれかのバージョンに GKE ノードをアップグレードします。
- 1.25.15-gke.1040000 以降
- 1.26.10-gke.1030000 以降
- 1.27.6-gke.1513000 以降
- 1.28.3-gke.1061000 以降
ノードで Ubuntu を実行している場合、このガベージ コレクションの問題に対する修正はまだありません。Ubuntu でこの問題を軽減するには、ホストとやり取りする特権コンテナを実行して、NVIDIA GPU ドライバが正しく設定されるようにします。この操作を行うには、ノードから sudo /usr/local/bin/nvidia-container-first-boot
を実行するか、次のマニフェストを適用します。
apiVersion: v1
kind: Pod
metadata:
name: gke-nvidia-installer-fixup
spec:
nodeSelector:
cloud.google.com/gke-os-distribution: ubuntu
hostPID: true
containers:
- name: installer
image: ubuntu
securityContext:
privileged: true
command:
- nsenter
- -at
- '1'
- --
- sh
- -c
- "/usr/local/bin/nvidia-container-first-boot"
restartPolicy: Never
この問題の別の原因として、ノードの再起動またはホストのメンテナンス後に NVIDIA ドライバ イメージが失われることも考えられます。これは、エフェメラル ローカル SSD ストレージを使用する機密ノード、または GPU を使用するノードで発生する可能性があります。この場合、GKE はノードに nvidia-installer-driver
コンテナ イメージをプリロードし、これらのイメージを初回起動時にブートディスクからローカル SSD に移動します。
ホスト メンテナンス イベントがあったことを確認するには、次のログフィルタを使用します。
resource.type="gce_instance"
protoPayload.serviceName="compute.googleapis.com"
log_id("cloudaudit.googleapis.com/system_event")
ホストのメンテナンスの問題を軽減するには、GKE バージョンを次のいずれかのバージョンにアップグレードします。
- 1.27.13-gke.1166000 以降
- 1.29.3-gke.1227000 以降
- 1.28.8-gke.1171000 以降
エラー: failed to configure GPU driver installation dirs: failed to create lib64 overlay: failed to create dir /usr/local/nvidia/lib64: mkdir /usr/local/nvidia/lib64: not a directory.
NCCL fastsocket が有効になっている場合、GPU デバイス プラグイン内の GPU ドライバ インストーラ コンテナでこのエラーが発生します。
failed to configure GPU driver installation dirs: failed to create lib64 overlay: failed to create dir /usr/local/nvidia/lib64: mkdir /usr/local/nvidia/lib64: not a directory.
この問題は、GKE 1.28 と 1.29 を実行しているクラスタおよびノードでのみ発生します。
この問題は、GPU ドライバ インストーラと NCCL fastsocket の競合状態が原因で発生します。
この問題を軽減するには、GKE バージョンを次のいずれかのバージョンにアップグレードします。
- 1.28.8-gke.1206000 以降
- 1.29.3-gke.1344000 以降
エラー: Failed to get device for nvidia0: device nvidia0 not found.
次のエラーは、マイナー 0 の GPU で XID 62 と RmInitAdapter が失敗したことを示しています。
Failed to get device for nvidia0: device nvidia0 not found.
NVIDIA ドライバ バージョン 525.105.17 には通信エラー(XID)を引き起こすバグがあり、これにより、GPU が正しく初期化されない可能性があります。
この問題を解決するには、NVIDIA ドライバをドライバ バージョン 525.110.11 以降にアップグレードします。
A3 VM の GPU をリセットする
問題によっては、A3 VM の GPU のリセットが必要になる場合があります。
GPU をリセットする手順は次のとおりです。
GPU をリセットする必要があるノードから、GPU リソースをリクエストする Pod を削除します。
ノードで GPU デバイス プラグインを無効にします。
kubectl get nodes \ --selector=kubernetes.io/hostname=NODE_NAME \ --no-headers | awk '{print $1}' \ | xargs -I{} kubectl label node {} gke-no-default-nvidia-gpu-device-plugin=true
NODE_NAME
は、ノードの名前で置き換えます。ノードをサポートする VM に接続します。
SSH セッションで、GPU をリセットします。
/home/kubernetes/bin/nvidia/bin/nvidia-smi --gpu-reset
GPU デバイス プラグインを再度有効にします。
kubectl get nodes --selector=kubernetes.io/hostname=NODE_NAME \ --no-headers \| awk '{print $1}' \ | xargs -I{} kubectl label node {} gke-no-default-nvidia-gpu-device-plugin=false \ --overwrite
次のステップ
さらにサポートが必要な場合は、Cloud カスタマーケアにお問い合わせください。