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 モードの設定:
-
現在の 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 が無効であることを示します。 -
必要に応じて ECC を有効または無効にします。
-
ノード上のすべての GPU で ECC を有効にする:
nvidia-smi -e 1 -
ノード上のすべての GPU で ECC を無効にする:
nvidia-smi -e 0
-
-
変更を有効にするために、オペレーティングシステムを再起動します。
重要ノードを再起動する前に、必要なすべてのデータを保存してください。
-
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.vgn5i、ecs.vgn6i、ecs.vgn7i、および ecs.sgn7i が含まれます。これらのインスタンスを使用するには、NVIDIA から GRID ライセンスを購入し、独自のライセンスサーバーを構築する必要があります。構築には Elastic Compute Service (ECS) インスタンスを使用し、NVIDIA の公式チュートリアルに従ってください。NVIDIA をご参照ください。
GPU 仮想化インスタンスの NVIDIA ドライバーライセンスを更新するには、ライセンスサーバーが必要です。
ECS インスタンスを購入し、NVIDIA の公式チュートリアルに従ってライセンスサーバーを構築してください。
ライセンスサーバーをお持ちの場合は、次の手順に従って GPU 仮想化インスタンスを ACK クラスターに追加します。
ACK クラスターへの GPU 仮想化インスタンスの追加:
-
Privilege Quota に移動し、カスタム OS イメージ機能をリクエストします。
-
NVIDIA GRID ドライバーと GRID ライセンスが設定された CentOS 7.x または Alibaba Cloud Linux 2 に基づいてカスタム OS イメージを作成します。詳細については、「インスタンスからのカスタムイメージの作成」および「GPU仮想化インスタンスへのGRIDドライバーのインストール (Linux)」をご参照ください。
-
ノードプールを作成します。詳細については、「ノードプールの作成と管理」をご参照ください。
-
GPU 仮想化インスタンスをノードプールに追加します。詳細については、「既存ノードの追加」をご参照ください。
次のステップ: 詳細については、「ACKクラスター内のGPU仮想化 (vGPU) インスタンスのNVIDIAドライバーライセンスの更新」をご参照ください。
既存クラスター内の GPU ノードでカーネルを手動でアップグレードする方法
カーネルをアップグレードした後、NVIDIA ドライバーを再インストールして GPU 機能を復元します。
カーネルのバージョンが 3.10.0-957.21.3 より前の場合にのみ、カーネルをアップグレードします。
この手順では、カーネルのアップグレード自体については説明しません。カーネルがアップグレードされた後に必要な NVIDIA ドライバーの再インストールについてのみ説明します。
-
GPU ノードを cordon して、スケジュール不可としてマークします。この例では、ノード
cn-beijing.i-2ze19qyi8votgjz12345を使用します。kubectl cordon cn-beijing.i-2ze19qyi8votgjz12345 node/cn-beijing.i-2ze19qyi8votgjz12345 already cordoned -
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 -
現在の NVIDIA ドライバーをアンインストールします。
説明この例では、ドライバーバージョン 384.111 を使用します。異なるバージョンの場合は、NVIDIA から対応するパッケージをダウンロードし、バージョン番号を置き換えてください。
-
GPU ノードにログオンし、
nvidia-smiでドライバーバージョンを確認します。sudo nvidia-smi -a | grep 'Driver Version' Driver Version : 384.111 -
NVIDIA ドライバーのインストールパッケージをダウンロードします。
cd /tmp/ && sudo curl -O https://cn.download.nvidia.cn/tesla/384.111/NVIDIA-Linux-x86_64-384.111.run説明NVIDIA ドライバーをアンインストールするには、インストールパッケージを使用する必要があります。
-
ドライバーをアンインストールします。
sudo chmod u+x NVIDIA-Linux-x86_64-384.111.run sudo sh ./NVIDIA-Linux-x86_64-384.111.run --uninstall -a -s -q
-
-
カーネルをアップグレードします。
-
GPU インスタンスを再起動します。
sudo reboot -
再度 GPU ノードにログインし、kernel-devel パッケージをインストールします。
sudo yum install -y kernel-devel-$(uname -r) -
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 -
/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 -
kubelet と Docker を再起動します。
sudo service kubelet stop sudo service docker restart sudo service kubelet start -
GPU ノードをスケジュール可能に戻します。
kubectl uncordon cn-beijing.i-2ze19qyi8votgjz12345 node/cn-beijing.i-2ze19qyi8votgjz12345 already uncordoned -
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 である場合は、以下の手順に従ってください。
-
/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 -
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 -
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を使用する場合:コンテナのsecurityContextにprivileged: 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 エラーの例:

その他の 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 を自動的に無効にします。
詳細については、「ノードプールの作成と管理」をご参照ください。

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

-
既存のノードをノードプールに追加します。詳細については、「既存ノードの追加」をご参照ください。
クラスター内の既存ノードの管理
オプション 1:ノードプールのラベルを使用
-
ノードのノードプールにラベル
ack.aliyun.com/disable-nvidia-gsp=trueを追加します。詳細については、「ノードプールを編集する」をご参照ください。
-
ECS インスタンスを解放せずに、クラスターからノードを削除します。詳細については、「クラスターまたはノードプールからのノードの削除」をご参照ください。
-
既存のノードとしてクラスターにノードを再追加します。詳細については、「既存ノードの追加」をご参照ください。
オプション 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> を実際のノード名に置き換え、deviceId を nvidia-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 フィールドでは、deviceId は nvidia-smi からの GPU インデックス、deviceType は gpu、healthy は false です。 送信されると、スケジューラはその 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-memをresources.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: コンテナのsecurityContextにprivileged: 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