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

Container Service for Kubernetes:GPU に関するよくある質問

最終更新日:Jun 16, 2026

Container Service for Kubernetes (ACK) クラスターにおける GPU の一般的な問題を解決します。これには、ドライバーのセットアップ、NVML エラー、ノード管理などが含まれます。

問題の分類

説明

リンク

GPU エラーとトラブルシューティング

GPU ドライバーの問題、DCGM や Prometheus などの監視ツール、NVML 初期化の失敗や XID エラーなどのランタイムエラー。

cGPU の問題

cGPU の設定、起動、ランタイムエラー、およびカーネルモジュールの権限の問題。

GPU ノードとクラスター管理

GPU カードの使用状況の検出、仮想化のサポート、カーネルのアップグレードなどのノードのメンテナンス、障害のある GPU カードの隔離など、クラスターレベルの操作。

クラスター内の GPU ECC 設定に一貫性がないのはなぜですか?

誤り訂正符号 (ECC) モードは、GPU メモリエラーを検出および訂正し、利用可能な GPU メモリがわずかに減少しますが、安定性と信頼性を向上させます。ACK は統一された ECC 設定を強制しないため、ノード間で設定が異なる場合があります。

ECC を有効または無効にするタイミング:

推奨事項

ワークロードの種類

ECC を無効にする

コスト重視のワークロードや、オンラインのリアルタイム推論などの低レイテンシー推論

ECC を有効にする

データベースサーバー、金融システム、科学技術計算、ハイパフォーマンスコンピューティング (HPC) など、データの一貫性と完全性が要求されるワークロード

GPU ノードの ECC モードの設定:

  1. 現在の ECC ステータスを確認します。

    nvidia-smi

    期待される出力:

    Fri Jun  6 11:49:05 2025
    +---------------------------------------------------------------------------------------+
    | NVIDIA-SMI 535.161.07             Driver Version: 535.161.07   CUDA Version: 12.2     |
    |-----------------------------------------+----------------------+----------------------+
    | GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
    | Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
    |                                         |                      |               MIG M. |
    |=========================================+======================+======================|
    |   0  Tesla T4                       On  | 00000000:00:08.0 Off |                    0 |
    | N/A   31C    P8               9W /  70W |      0MiB / 15360MiB |      0%      Default |
    |                                         |                      |                  N/A |
    +-----------------------------------------+----------------------+----------------------+
    
    +---------------------------------------------------------------------------------------+
    | Processes:                                                                            |
    |  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
    |        ID   ID                                                             Usage      |
    |=======================================================================================|
    |  No running processes found                                                           |
    +---------------------------------------------------------------------------------------+

    Volatile Uncorr. ECC 列では、0 は ECC が有効でエラーがないことを、Off は ECC が無効であることを示します。

  2. 必要に応じて ECC を有効または無効にします。

    • ノード上のすべての GPU で ECC を有効にする:nvidia-smi -e 1

    • ノード上のすべての GPU で ECC を無効にする:nvidia-smi -e 0

  3. 変更を有効にするために、オペレーティングシステムを再起動します。

    重要

    ノードを再起動する前に、必要なすべてのデータを保存してください。

  4. nvidia-smi で新しい ECC ステータスを確認します。次の出力は、ECC が無効であることを示しています。

    Fri Jun  6 11:52:15 2025
    +---------------------------------------------------------------------------------------+
    | NVIDIA-SMI 535.161.07             Driver Version: 535.161.07   CUDA Version: 12.2     |
    |-----------------------------------------+----------------------+----------------------+
    | GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
    | Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
    |                                         |                      |               MIG M. |
    |=========================================+======================+======================|
    |   0  Tesla T4                       On  | 00000000:00:08.0 Off |                  Off |
    | N/A   31C    P8               9W /  70W |      0MiB / 16384MiB |      0%      Default |
    |                                         |                      |                  N/A |
    +-----------------------------------------+----------------------+----------------------+
    
    +---------------------------------------------------------------------------------------+
    | Processes:                                                                            |
    |  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
    |        ID   ID                                                             Usage      |
    |=======================================================================================|
    |  No running processes found                                                           |
    +---------------------------------------------------------------------------------------+

ACK は GPU 仮想化インスタンスをサポートしていますか?

GPU 仮想化インスタンスには、NVIDIA の GRID ライセンスが必要です。ライセンスを購入し、独自のライセンスサーバーを構築する必要があります。

Alibaba Cloud はライセンスサーバーを提供していないため、vGPU アクセラレーションクラスターであっても、GPU 仮想化インスタンスを直接使用することはできません。ACK コンソールでは、クラスターノードとして GPU 仮想化インスタンスを選択することはできなくなりました。

サポート対象外のインスタンスプレフィックスには、ecs.vgn5iecs.vgn6iecs.vgn7i、および ecs.sgn7i が含まれます。これらのインスタンスを使用するには、NVIDIA から GRID ライセンスを購入し、独自のライセンスサーバーを構築する必要があります。構築には Elastic Compute Service (ECS) インスタンスを使用し、NVIDIA の公式チュートリアルに従ってください。NVIDIA をご参照ください。

GPU 仮想化インスタンスの NVIDIA ドライバーライセンスを更新するには、ライセンスサーバーが必要です。
ECS インスタンスを購入し、NVIDIA の公式チュートリアルに従ってライセンスサーバーを構築してください。

ライセンスサーバーをお持ちの場合は、次の手順に従って GPU 仮想化インスタンスを ACK クラスターに追加します。

ACK クラスターへの GPU 仮想化インスタンスの追加:

  1. Privilege Quota に移動し、カスタム OS イメージ機能をリクエストします。

  2. NVIDIA GRID ドライバーと GRID ライセンスが設定された CentOS 7.x または Alibaba Cloud Linux 2 に基づいてカスタム OS イメージを作成します。詳細については、「インスタンスからのカスタムイメージの作成」および「GPU仮想化インスタンスへのGRIDドライバーのインストール (Linux)」をご参照ください。

  3. ノードプールを作成します。詳細については、「ノードプールの作成と管理」をご参照ください。

  4. GPU 仮想化インスタンスをノードプールに追加します。詳細については、「既存ノードの追加」をご参照ください。

次のステップ: 詳細については、「ACKクラスター内のGPU仮想化 (vGPU) インスタンスのNVIDIAドライバーライセンスの更新」をご参照ください。

既存クラスター内の GPU ノードでカーネルを手動でアップグレードする方法

カーネルをアップグレードした後、NVIDIA ドライバーを再インストールして GPU 機能を復元します。

説明

カーネルのバージョンが 3.10.0-957.21.3 より前の場合にのみ、カーネルをアップグレードします。

この手順では、カーネルのアップグレード自体については説明しません。カーネルがアップグレードされた後に必要な NVIDIA ドライバーの再インストールについてのみ説明します。

  1. GPU ノードを cordon して、スケジュール不可としてマークします。この例では、ノード cn-beijing.i-2ze19qyi8votgjz12345 を使用します。

    kubectl cordon cn-beijing.i-2ze19qyi8votgjz12345
    
    node/cn-beijing.i-2ze19qyi8votgjz12345 already cordoned
  2. GPU ノードを drain します。

    kubectl drain cn-beijing.i-2ze19qyi8votgjz12345 --grace-period=120 --ignore-daemonsets=true
    
    node/cn-beijing.i-2ze19qyi8votgjz12345 cordoned
    WARNING: Ignoring DaemonSet-managed pods: flexvolume-9scb4, kube-flannel-ds-r2qmh, kube-proxy-worker-l62sf, logtail-ds-f9vbg
    pod/nginx-ingress-controller-78d847fb96-5fkkw evicted
  3. 現在の NVIDIA ドライバーをアンインストールします。

    説明

    この例では、ドライバーバージョン 384.111 を使用します。異なるバージョンの場合は、NVIDIA から対応するパッケージをダウンロードし、バージョン番号を置き換えてください。

    1. GPU ノードにログオンし、nvidia-smi でドライバーバージョンを確認します。

      sudo nvidia-smi -a | grep 'Driver Version'
      Driver Version                      : 384.111
    2. NVIDIA ドライバーのインストールパッケージをダウンロードします。

      cd /tmp/ && sudo curl -O https://cn.download.nvidia.cn/tesla/384.111/NVIDIA-Linux-x86_64-384.111.run
      説明

      NVIDIA ドライバーをアンインストールするには、インストールパッケージを使用する必要があります。

    3. ドライバーをアンインストールします。

      sudo chmod u+x NVIDIA-Linux-x86_64-384.111.run
      sudo sh ./NVIDIA-Linux-x86_64-384.111.run --uninstall -a -s -q
  4. カーネルをアップグレードします。

  5. GPU インスタンスを再起動します。

    sudo reboot
  6. 再度 GPU ノードにログインし、kernel-devel パッケージをインストールします。

    sudo yum install -y kernel-devel-$(uname -r)
  7. NVIDIA の Web サイトから必要な NVIDIA ドライバーをダウンロードしてインストールします。この例では、バージョン 410.79 を使用します。

    cd /tmp/
    sudo curl -O https://cn.download.nvidia.cn/tesla/410.79/NVIDIA-Linux-x86_64-410.79.run
    sudo chmod u+x NVIDIA-Linux-x86_64-410.79.run
    sudo sh ./NVIDIA-Linux-x86_64-410.79.run -a -s -q
    
    # GPU のウォームアップ
    sudo nvidia-smi -pm 1 || true
    sudo nvidia-smi -acp 0 || true
    sudo nvidia-smi --auto-boost-default=0 || true
    sudo nvidia-smi --auto-boost-permission=0 || true
    sudo nvidia-modprobe -u -c=0 -m || true
  8. /etc/rc.d/rc.local に次の設定が含まれていることを確認します。ない場合は追加します。

    sudo nvidia-smi -pm 1 || true
    sudo nvidia-smi -acp 0 || true
    sudo nvidia-smi --auto-boost-default=0 || true
    sudo nvidia-smi --auto-boost-permission=0 || true
    sudo nvidia-modprobe -u -c=0 -m || true
  9. kubelet と Docker を再起動します。

    sudo service kubelet stop
    sudo service docker restart
    sudo service kubelet start
  10. GPU ノードをスケジュール可能に戻します。

     kubectl uncordon cn-beijing.i-2ze19qyi8votgjz12345
    
     node/cn-beijing.i-2ze19qyi8votgjz12345 already uncordoned
  11. GPU ノードのデバイスプラグイン Pod でドライバーのバージョンを確認します。

    docker ps で GPU ノード上で実行中のコンテナが表示されない場合は、「GPU ノード上のコンテナ起動の問題を解決する」をご参照ください。
     kubectl exec -n kube-system -t nvidia-device-plugin-cn-beijing.i-2ze19qyi8votgjz12345 nvidia-smi
     Thu Jan 17 00:33:27 2019
     +-----------------------------------------------------------------------------+
     | NVIDIA-SMI 410.79       Driver Version: 410.79       CUDA Version: N/A      |
     |-------------------------------+----------------------+----------------------+
     | GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
     | Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
     |===============================+======================+======================|
     |   0  Tesla P100-PCIE...  On   | 00000000:00:09.0 Off |                    0 |
     | N/A   27C    P0    28W / 250W |      0MiB / 16280MiB |      0%      Default |
     +-------------------------------+----------------------+----------------------+
    
     +-----------------------------------------------------------------------------+
     | Processes:                                                       GPU Memory |
     |  GPU       PID   Type   Process name                             Usage      |
     |=============================================================================|
     |  No running processes found                                                 |
     +-----------------------------------------------------------------------------+

GPU ノードでのコンテナー起動問題の解決

現象: GPU ノードで kubelet と Docker を再起動した後、コンテナーが起動しません。

sudo service kubelet stop
Redirecting to /bin/systemctl stop kubelet.service
sudo service docker stop
Redirecting to /bin/systemctl stop docker.service
sudo service docker start
Redirecting to /bin/systemctl start docker.service
sudo service kubelet start
Redirecting to /bin/systemctl start kubelet.service

sudo docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

原因: Docker と kubelet の Cgroup ドライバーが一致していません。Docker の Cgroup ドライバーを確認します:

sudo docker info | grep -i cgroup
Cgroup Driver: cgroupfs

修正: 出力が cgroupfs である場合は、以下の手順に従ってください。

  1. /etc/docker/daemon.json をバックアップし、以下の設定で更新します。

    sudo cat >/etc/docker/daemon.json <<-EOF
    {
        "default-runtime": "nvidia",
        "runtimes": {
            "nvidia": {
                "path": "/usr/bin/nvidia-container-runtime",
                "runtimeArgs": []
            }
        },
        "exec-opts": ["native.cgroupdriver=systemd"],
        "log-driver": "json-file",
        "log-opts": {
            "max-size": "100m",
            "max-file": "10"
        },
        "oom-score-adjust": -1000,
        "storage-driver": "overlay2",
        "storage-opts": ["overlay2.override_kernel_check=true"],
        "live-restore": true
    }
    EOF
  2. Docker と kubelet を再起動します。

    sudo service kubelet stop
    Redirecting to /bin/systemctl stop kubelet.service
    sudo service docker restart
    Redirecting to /bin/systemctl restart docker.service
    sudo service kubelet start
    Redirecting to /bin/systemctl start kubelet.service
  3. Cgroup ドライバーが systemd になっていることを確認します。

    sudo docker info | grep -i cgroup
    Cgroup Driver: systemd

ECS Bare Metal Instance ノードの追加に失敗した場合の対処方法

現象: ecs.ebmgn7 ECS ベアメタルインスタンスノードのクラスターへの追加に失敗します。

原因: ECS ベアメタルインスタンス (ecs.ebmgn7) はマルチインスタンス GPU (MIG) をサポートしています。 ACK は、これらのノードを追加する際に、競合を防ぐために既存の MIG 設定をリセットします。 リセットがタイムアウトした場合、ノードの追加は失敗します。

診断: ノードホストで ACK のデプロイログを確認します。

sudo cat /var/log/ack-deploy.log

ログにこのエラーが表示された場合、MIG のリセットがタイムアウトしたことを示します:

command timeout: timeout 300 nvidia-smi --gpu-reset

解決策: ノードを再度追加します。詳細については、「既存ノードの追加」をご参照ください。

Alibaba Cloud Linux 3 で GPU コンテナーを実行すると 「Failed to initialize NVML: Unknown Error」 が発生する場合の対処方法

症状: GPU コンテナで nvidia-smi を実行すると、次が返されます。

sudo nvidia-smi

Failed to initialize NVML: Unknown Error

原因: Alibaba Cloud Linux 3 で systemctl daemon-reload または systemctl daemon-reexec を実行すると cgroup 設定が更新され、コンテナ内の NVIDIA Management Library (NVML) へのアクセスが妨げられます。コミュニティの issue #1671 および #48 をご参照ください。

解決策: 設定に応じて、次のいずれかの解決策を適用します。

  • NVIDIA_VISIBLE_DEVICES=all を使用する場合:コンテナの securityContextprivileged: true を追加します。

    apiVersion: v1
    kind: Pod
    metadata:
      name: test-gpu-pod
    spec:
      containers:
        - name: test-gpu-pod
          image: centos:7
          command:
          - sh
          - -c
          - sleep 1d
          securityContext: # コンテナーに特権を付与します。
            privileged: true
  • 共有 GPU スケジューリングを使用している場合: Alibaba Cloud Linux 2 または CentOS 7 に切り替えます。

  • 迅速な回避策: アプリケーション Pod を再作成します。これは一時的な修正であり、問題が再発する可能性があります。実行する前にビジネスへの影響を評価してください。

  • 上記のいずれも該当しない場合: ワークロードを Alibaba Cloud Linux 2 や CentOS 7 などの別のオペレーティングシステムで実行できるかどうかを評価します。

XID 119 または XID 120 エラーにより GPU カードが使用できなくなった場合の対処方法

現象: GPU カードの初期化に失敗します。sh nvidia-bug-report.sh を実行すると、ログに XID 119 または XID 120 エラーが表示されます。XID 119 エラーの例:

123

その他の XID エラーについては、「NVIDIA Common XID Errors」をご参照ください。

原因: GPU System Processor (GSP) コンポーネントの例外です。

解決策: まず、NVIDIA ドライバーを最新バージョンに更新します。問題が解決しない場合は、GSP を無効にします。NVIDIA は、ドライバーバージョン 510 で GSP を導入しました。詳細については、「Chapter 42. GSP firmware」をご参照ください。

シナリオに応じた GSP の無効化:

新規ノードのスケールアウト

ノードプールを作成するか、既存のものを編集します。詳細設定で、ラベル ack.aliyun.com/disable-nvidia-gsp=true を追加します。ACK は、このプールに追加される新しいノードで GSP を自動的に無効にします。

詳細については、「ノードプールの作成と管理」をご参照ください。

image

GSP を無効にすると、ノードのスケールアウト時間が増加する場合があります。

既存ノードの追加

  1. ノードプールを作成するか、既存のノードプールを編集します。ノードプールの高度な設定にラベル ack.aliyun.com/disable-nvidia-gsp=true を追加します。既存のノードが追加されると、ACK は GSP を自動的に無効にします。詳細については、「ノードプールの作成と管理」をご参照ください。

    GSP を無効にすると、ノードの追加時間が増加する場合があります。

    image

  2. 既存のノードをノードプールに追加します。詳細については、「既存ノードの追加」をご参照ください。

クラスター内の既存ノードの管理

オプション 1:ノードプールのラベルを使用

  1. ノードのノードプールにラベル ack.aliyun.com/disable-nvidia-gsp=true を追加します。詳細については、「ノードプールを編集する」をご参照ください。

    image

  2. ECS インスタンスを解放せずに、クラスターからノードを削除します。詳細については、「クラスターまたはノードプールからのノードの削除」をご参照ください。

  3. 既存のノードとしてクラスターにノードを再追加します。詳細については、「既存ノードの追加」をご参照ください。

オプション 2:ノードで GSP を手動で無効にする

ノードを削除して再追加できない場合は、ノードにログインして GSP を手動で無効にします。詳細については、「FAQ」をご参照ください。

ドライバーを 470 から 525 にアップグレードする場合は、バージョン 525 で GSP を無効にしてください。バージョン 470 には GSP がありませんが、525 は GSP のバグを引き起こす可能性があります。アップグレード後、「FAQ」の手順に従って GSP を手動で無効にします。

クラスター内で障害のある GPU を手動で隔離する方法

共有 GPU スケジューリングでは、障害のある GPU が原因でジョブが繰り返し失敗する可能性があります。GPU を異常としてマークし、スケジューリングから除外します。

前提条件:

  • Kubernetes 1.24 以降を実行するクラスター: スケジューラバージョン 1.xx.x-aliyun-6.4.3.xxx 以降。

  • Kubernetes 1.22 を実行しているクラスター:スケジューラバージョン 1.22.15-aliyun-6.2.4.xxx 以降。

  • 共有 GPU スケジューリングが有効になっていること。

次の ConfigMap を送信します。<node-name> を実際のノード名に置き換え、deviceIdnvidia-smi の GPU インデックスに設定します。

apiVersion: v1
kind: ConfigMap
metadata:
  name: <node-name>-device-status   #  を実際のノード名に置き換えます。
  namespace: kube-system
data:
  devices: |
    - deviceId: 0          # nvidia-smi を実行して GPU インデックスを取得します。
      deviceType: gpu
      healthy: false

ConfigMap は、kube-system 名前空間に <node-name>-device-status という名前形式で配置する必要があります。 data フィールドでは、deviceIdnvidia-smi からの GPU インデックス、deviceTypegpuhealthyfalse です。 送信されると、スケジューラはその GPU への作業の割り当てを停止します。

GPU コンテナーでの「Failed to initialize NVML: Unknown Error」メッセージの解決

症状: GPU コンテナで nvidia-smi を実行すると、次の結果が返されます。

sudo nvidia-smi

Failed to initialize NVML: Unknown Error

この問題は、Ubuntu 22.04 または Red Hat Enterprise Linux (RHEL) 9.3 64 ビットを実行しているノードに影響します。

原因: ノードで systemctl daemon-reload または systemctl daemon-reexec を実行すると cgroup 設定が更新され、影響を受けるコンテナの NVML アクセスが切断されます。

影響を受ける Pod:

  • aliyun.com/gpu-memresources.limits に指定するポッド

  • コンテナ環境変数として NVIDIA_VISIBLE_DEVICES を設定するポッド

  • デフォルトで NVIDIA_VISIBLE_DEVICES が設定されているコンテナイメージを使用する Pod

resources.limits 内で nvidia.com/gpu 経由で GPU リソースを要求する Pod は、影響を受けません。
NVIDIA Device Plugin と ack-gpu-exporter はどちらも、デフォルトで NVIDIA_VISIBLE_DEVICES=all を設定します。

解決策:

  • 迅速な回避策: アプリケーション Pod を再作成します。これは一時的な修正であり、問題が再発する可能性があります。実行する前にビジネスへの影響を評価してください。

  • ポッドで次を使用する場合 NVIDIA_VISIBLE_DEVICES=all: コンテナの securityContextprivileged: true を追加します。

    重要

    privileged 権限を付与することは、セキュリティリスクをもたらします。可能な場合は、ポッドを再作成することを推奨します。

    apiVersion: v1
    kind: Pod
    metadata:
      name: test-gpu-pod
    spec:
      containers:
        - name: test-gpu-pod
          image: centos:7
          command:
          - sh
          - -c
          - sleep 1d
          securityContext: # コンテナーに特権を付与します。
            privileged: true

GPU ノードで /run/containerd/io.containerd.runtime.v2.task/k8s.io/<container ID>/log.json ファイルが継続的に増大するのを防ぐ方法

現象: /run/containerd/io.containerd.runtime.v2.task/k8s.io/<container ID>/log.json ファイルが継続的に増加し、ディスク領域を消費します。

影響を受ける環境: nvidia-container-toolkit のバージョンが 1.16.2 未満のノード。

原因: 例えば exec プローブからの呼び出しなど、コンテナに対して exec 呼び出しが頻繁に行われると、NVIDIA コンテナランタイムによって、呼び出しごとに情報ログエントリが書き込まれます。

対処法:ノードにログオンします。 ログレベルを info から error に変更し、既存のログコンテンツをクリアします。

#!/bin/bash
set -e

export CONFIG=/etc/nvidia-container-runtime/config.toml
export CONTAINER_ROOT_PATH="/run/containerd/io.containerd.runtime.v2.task/k8s.io"

if [ -f $CONFIG ];then
    # nvidia-container-runtime の設定でログレベルを「info」から「error」に変更します。
sed -i 's@^log-level = "info"@log-level = "error"@g' $CONFIG
    # コンテナーの log.json ファイルの内容をクリアします。
find $CONTAINER_ROOT_PATH -mindepth 2 -maxdepth 2 -name log.json -type f -exec sh -c 'echo "" > "{}"' \;
fi