ACK は、ack-node-problem-detector (NPD) コンポーネントを使用して GPU リソースの健全性を監視します。GPU ノードが XID または SXID エラーなどの異常に遭遇すると、NPD は影響を受ける GPU カードを自動的に検出して隔離します。これにより、健全な GPU がワークロードを引き続き処理し、ビジネスへの影響を最小限に抑えながら、クラスターの信頼性と運用効率を向上させます。
前提条件
ack-node-problem-detector (NPD) コンポーネントがインストールされており、そのバージョンは 1.2.24 以降です。
ack-nvidia-device-plugin バージョン 0.17.0 以降と NPD バージョン 1.2.24 以降を併用すると、NPD は異常を検出した際に異常な GPU カードを自動的にフェンスし、GPU が回復するとそのフェンスを自動的に解除します。
ack-nvidia-device-plugin のバージョンを表示またはアップグレードするには、「NVIDIA Device Plugin のバージョンを表示」をご参照ください。
ack-node-problem-detector (NPD) は、オープンソースプロジェクトである node-problem-detector をベースに ACK によって強化された、クラスターノードの異常監視コンポーネントです。GPU アクセラレーション環境での異常検出を改善するために、GPU 固有の包括的なチェック項目セットが含まれています。異常が検出されると、NPD は異常タイプに応じて、対応する Kubernetes イベントまたは Kubernetes ノード条件を生成します。
注意事項
GPU の異常が検出されると、ack-node-problem-detector コンポーネントはデフォルトの隔離ポリシーに従って NVIDIA GPU 隔離ファイルを作成します。その後、ack-nvidia-device-plugin コンポーネントは、このファイルに基づいて影響を受ける GPU カードを隔離します。これにより、新しいワークロードが障害のある GPU にスケジュールされるのを防ぎ、タスクの失敗を回避します。健全な GPU は引き続きスケジュール可能です。ただし、隔離によってノード上の GPU が不足する場合 (たとえば、8 GPU タスクに対して 7 枚のカードしか残らない場合)、タスクをスケジュールできず、GPU リソースがアイドル状態になる可能性があります。自動隔離は自動修復ではありません。GPU が隔離された後も、ノードインスタンスには料金が発生し続けます。ノードは手動で修復する必要があります。迅速な対応を可能にするために、GPU 異常アラートを設定してください。
必要に応じて、GPU カードの自動隔離を無効にできます。手順については、「NPD の GPU カード自動隔離機能を無効にするにはどうすればよいですか?」をご参照ください。NVIDIA Device Plugin の特定のバージョンは GPU の自動隔離をサポートしていますが、無効にする方法は異なります。詳細については、「NVIDIA Device Plugin のネイティブ GPU 隔離機能を無効にするにはどうすればよいですか?」をご参照ください。
NVIDIA GPU ドライバーは、NVRM イベントメカニズムを使用して XID および SXID エラーを
/var/log/messagesまたは/var/log/syslogに書き込みます。NPD は、各 XID および SXID が処理されたかどうかを追跡します。XID または SXID が発生した後にノードを再起動すると、GPU デバイスを交換する必要があることを示す XID 79 のような根本的な問題が解決しない場合でも、NPD はそのエラーに対してイベントまたはノード条件を生成しません。NPD は、再起動後に XID が解決されたと見なします。NPD は、ノード上の
/var/log/messagesまたは/var/log/syslogファイルをスキャンすることで、NVIDIA XID および SXID エラーを検出します。dmesg ログが別のファイルにリダイレクトされている場合、NPD はこれらのエラーを検出できません。NPD バージョン 1.2.29 以降、GPU 異常検出プラグインは、ack-accel-health-monitor という名前の DaemonSet として別々にデプロイされます。
場合によっては、ノード上の GPU 異常により GPU コンテナーの起動が妨げられることがあります。これにより、GPU 異常検出コンテナーの起動もブロックされ、検出プロセスが停止する可能性があります。
NPD GPU 検出プラグイン Pod は、GPU デバイスとコンポーネントを検査するために、
privileged=trueのような高い権限を必要とします。詳細については、次の表をご参照ください。クラスター RBAC 権限
コンテナー権限
Node: get
Node/Status: update
Events: create
privileged: trueホスト
/dev/kmsgの読み取り専用マウントホスト
/usr/libの読み取り専用マウントホスト
/etcの読み取り専用マウントホスト
/usr/lib64の読み取り専用マウントホスト
/procの読み取り専用マウント
チェック項目と修復の提案
GPU の異常を特定した後、修復ガイダンスについては、「NVIDIA XID エラー」をご参照ください。また、インスタンスタイプに基づいて、対応するクラウドプロダクト (ECS や Lingjun など) のコンソールでノードインスタンスの O&M イベントを確認することもできます。あるいは、自己診断ツールを使用してノード上のハードウェア異常を特定することも可能です。
修復の提案がなしの場合、ハードウェア介入は不要です。代わりに、アプリケーション構成を確認してください。
チェック項目名 | ノード条件を生成しますか? | イベントは生成されますか? | 説明 | GPU カードはデフォルトで隔離されますか? | 修復の提案 |
NvidiaXID13Error | いいえ | はい
|
| いいえ | なし |
NvidiaXID31Error | いいえ | はい
|
| いいえ | なし |
NvidiaXID43Error | いいえ | はい
|
| いいえ | なし |
NvidiaXID44Error | はい
| はい
|
| はい (NPD <= 1.2.28) | ノードを再起動します。 |
NvidiaXID45Error | いいえ | はい
|
| いいえ | なし |
NvidiaXID48Error | はい
| はい
|
| はい | ノードを再起動します。 |
NvidiaXID61Error | はい
| はい
|
| はい (NPD <= 1.2.28) | ノードを再起動します。 |
NvidiaXID62Error | はい
| はい
|
| はい | ノードを再起動します。 |
NvidiaXID63Error | いいえ | はい
|
| いいえ | なし |
NvidiaXID64Error | いいえ | はい
|
| いいえ | なし |
NvidiaXID69Error | はい
| はい
|
| はい (NPD <= 1.2.28) | ノードを再起動します。 |
NvidiaXID74Error | はい
| はい
|
| はい | ハードウェア修復。 |
NvidiaXID79Error | はい
| はい
|
| はい | ハードウェア修復。 |
NvidiaXID94Error | いいえ | はい
|
| いいえ | なし |
NvidiaXID95Error | はい
| はい
|
| はい | ノードを再起動します。 |
NvidiaXID109Error | はい
| はい
|
| はい (NPD <= 1.2.28) | なし |
NvidiaXID119Error | はい
| はい
|
| はい | ノードを再起動します。 |
NvidiaXID120Error | はい
| はい
|
| はい | ノードを再起動します。 |
NvidiaXID140Error | はい
| はい
|
| はい | ノードを再起動します。 |
NvidiaXID[code]Error | いいえ | はい (3 つのイベントのみを生成)
| この表に記載されていないその他の XID。 | いいえ | |
NvidiaSXID[code]Error | いいえ | はい (3 つのイベントのみを生成)
|
| いいえ | なし |
NvidiaEccModeNotEnabled | はい
| はい (問題が解決されるまでイベントを継続的に生成)
| ノードで ECC モードが有効になっていません。 | いいえ | ECC モードを有効にしてノードを再起動します。 |
NvidiaPendingRetiredPages | はい
| はい (問題が解決されるまでイベントを継続的に生成)
|
| はい | ノードを再起動します。 |
NvidiaRemappingRowsFailed | はい
| はい (問題が解決されるまでイベントを継続的に生成)
| GPU で行マッピングのエラーが発生しました。 | はい | ハードウェア修復。 |
NvidiaRemappingRowsRequireReset | はい
| はい (問題が解決されるまでイベントを継続的に生成)
| GPU で、回復のために GPU リセットが必要な訂正不能で封じ込められていないエラーが発生しました。可能な限り早く GPU をリセットして操作を復元してください。 | はい (NPD <= 1.2.28) | ノードを再起動します。 |
NvidiaDeviceLost | はい
| はい (問題が解決されるまでイベントを継続的に生成)
|
| はい | ハードウェア修復。 |
NvidiaInfoRomCorrupted | はい
| はい (問題が解決されるまでイベントを継続的に生成)
|
| はい | ハードウェア修復。 |
NvidiaPowerCableErr | はい
| はい (問題が解決されるまでイベントを継続的に生成)
|
| はい | ハードウェア修復。 |
NvidiaPersistencedOffline | はい
| はい
| Nvidia Persistenced サービスが実行されていません。 | いいえ | nvidia-persistenced サービスを再起動します。 |
NvidiaFabricManagerOffline | はい
| はい
| Nvidia Fabric Manager サービスが実行されていません。 | いいえ | Fabric Manager サービスを再起動します。 |
NvidiaTemperatureHigh | はい
| はい
| GPU 温度が 100 度を超えています。 | いいえ | なし |
NvidiaNVLinkStateErr | はい
| はい
| Nvidia NVLink の状態がダウンしています。 | いいえ | マシンを再起動します。 |
その他の関連イベント
排他的 GPU シナリオでは、NPD は異常チェック項目に基づいて GPU カードを自動的に隔離します。隔離後、新しい GPU アプリケーション Pod は影響を受けたカードに割り当てられません。隔離の効果を検証するには、Kubernetes ノードで報告される nvidia.com/gpu リソースの数を確認します。GPU カードが回復すると、ACK は自動的に隔離を解除します。
原因 | イベント内容 | 説明 |
GPU 隔離 | はい
| 検出された異常により GPU カードが隔離されました。 |
GPU カード隔離の非アクティブ化 | はい
| GPU カードが異常から回復し、隔離が非アクティブ化されました。 |
よくある質問
NPD の GPU カード自動隔離機能を無効にするにはどうすればよいですか?
背景情報
ノード上の GPU が異常になると、ACK は NPD を介して自動的に隔離し、タスクがそれにスケジュールされるのを防ぎます。ただし、自動隔離は自動修復を実行しません。GPU が隔離された後も、ノードインスタンスには料金が発生し続けます。ノードは手動で再起動または修復する必要があります。迅速な処理を可能にするために、GPU 異常アラートを設定してください。
隔離後、ノード上の残りの GPU がタスクに不十分な場合 (たとえば、8 GPU タスクに対して 7 枚のカードしか残らない場合)、タスクをスケジュールできません。これにより、GPU リソースがアイドル状態になる可能性があります。
GPU ステータスが正常に戻ると、隔離は自動的に解除されます。
異常な GPU がリソースを報告し続け、スケジュール可能な状態を維持するように自動隔離を無効にするには、以下のソリューションに従ってください。
ソリューション
ack-node-problem-detector バージョン 1.2.30 以降では、コンポーネント管理の generateNvidiaGpuIsolationFile 設定項目を使用して、自動 GPU 隔離を制御できます。
NPD の自動 GPU 隔離機能を無効にします。
(推奨) 方法 1: コンポーネント管理でコンポーネント構成を変更します。
ログとモニタリング タブで、[ack-node-problem-detector] コンポーネントを探し、そのバージョンに基づいて適切な操作を実行します。
バージョン 1.2.24 から 1.2.29: 利用可能なアップグレードを確認します。バージョン 1.2.30 以降が利用可能な場合は、アップグレード をクリックします。
バージョン 1.2.30 はグレースケールリリースです。バージョン 1.2.30 以降が表示されない場合は、アクセスをリクエストするためにチケットを送信してください。
バージョン 1.2.30 以降: 設定 をクリックします。
コンポーネントのアップグレードまたは構成ページで、
generateNvidiaGpuIsolationFile(NVIDIA GPU の隔離ファイルを生成)をfalseに設定し、次に OK をクリックします。説明以前に方法 2 を使用して自動 GPU 隔離を一時的に無効にした場合、この設定は NPD のアップグレード中に保持されます。GPU カードの自動隔離を再度有効にするには、
generateNvidiaGpuIsolationFileをtrueに設定します。
方法 2: YAML を使用して構成を手動で変更します。
説明以下の方法は一時的な回避策です。NPD をバージョン 1.2.30 より前のバージョンにアップグレードすると、構成は失われます。アップグレード後に再構成する必要があります。この構成を永続化させるには、バージョン 1.2.30 以降へのアップグレードを推奨します。
NPD コンポーネントの YAML を編集します。
kubectl edit ds -n kube-system ack-node-problem-detector-daemonsetEnabledIsolateGPU構成をfalseに設定します。変更前:
--EnabledIsolateGPU=true変更後:
--EnabledIsolateGPU=false
既存の GPU カード自動隔離を非アクティブ化します。
GPU カード上の既存の隔離を非アクティブ化するには、XID エラーが発生したノードにログインし、
/etc/nvidia-device-plugin/unhealthyDevices.jsonファイルを削除します。カードが再度隔離されるのを防ぐには、前のステップで説明したように自動隔離機能を無効にしてください。