GKE での GPU のトラブルシューティング


このページでは、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 以降にアップグレードします。

次のステップ

さらにサポートが必要な場合は、Cloud カスタマーケアにお問い合わせください。