このトピックでは、ACK GPU 異常検出コンポーネントのインストール、設定、および使用方法について説明します。このコンポーネントは、ACK 環境における GPU リソースの健全性を監視し、クラスターの信頼性と効率を向上させるのに役立ちます。
前提条件
ack-node-problem-detector (NPD) バージョン 1.2.24 以降がインストールされていること。
ack-nvidia-device-plugin 0.17.0 以降を NPD 1.2.24 以降と併用する場合、NPD は異常を検出すると自動的に GPU カードを隔離します。NPD が GPU の回復を検出すると、自動的に隔離を解除します。
ack-nvidia-device-plugin コンポーネントの表示とアップグレードについては、「NVIDIA Device Plugin のバージョン表示」をご参照ください。
ack-node-problem-detector (NPD) は、クラスターノード上の異常イベントを監視するコンポーネントです。ACK によって作成された NPD は、オープンソースの node-problem-detector プロジェクトを強化したものです。GPU シナリオにおける異常検出を向上させるための幅広いチェック項目が含まれています。異常が検出されると、コンポーネントは異常の種類に基づいて Kubernetes イベントまたは Kubernetes Node Condition を生成します。
注意事項
NVIDIA XID と SXID は、GPU ドライバーによって、NVRM イベントメカニズムを介して
/var/log/messagesまたは/var/log/syslogに書き込まれます。NPD は、各 XID と SXID が処理されたかどうかを記録します。XID または SXID が検出された後にノードを再起動すると、NPD はその XID または SXID に対して Event または Node Condition を生成しません。これは、根本的な問題が解決されていない場合でも発生します (たとえば、XID 79 は GPU デバイスを交換する必要があることを示します)。NPD は、再起動後に XID が解決されたと見なします。NPD は、ノード上の
/var/log/messagesファイルまたは/var/log/syslogファイルをチェックして NVIDIA XID と SXID を検出します。dmesg ログが別のファイルにリダイレクトされた場合、NPD は NVIDIA XID と SXID を検出できません。ノード上の GPU に異常が発生すると、ACK は障害のある GPU を自動的に隔離します。これにより、新しいジョブが障害のあるデバイスにスケジュールされるのを防ぎます。自動隔離は GPU を正常な状態に復元するものではありません。特定の異常の種類に基づいて、手動でノードを再起動するか、ハードウェアメンテナンスを実行する必要があります。自動隔離を有効にすると、予期しない動作が発生する可能性があります。例えば、1 つのカードに障害が発生した場合、8 カード構成のジョブのスケジュールに失敗する可能性があります。以下の方法で GPU の自動隔離を無効にできます:
NPD コンポーネントのアップグレード:NPD 1.2.29 以降、NPD GPU 検出プラグインでは、障害のある GPU デバイスの自動隔離機能はデフォルトで無効になっています。
自動隔離の手動無効化:詳細な手順については、「NPD で障害のある GPU カードの自動隔離を無効にする方法」をご参照ください。
NVIDIA Device Plugin コンポーネントは、特定のバージョンで障害のある GPU カードの自動隔離をサポートしていますが、この機能を無効にする方法は異なります。詳細については、「NVIDIA Device Plugin のネイティブ GPU 隔離機能を無効にする方法」をご参照ください。
NPD 1.2.29 以降、NPD の 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の読み取り専用マウント
チェック項目と修復の推奨事項
修復の推奨事項がなしの場合、ハードウェアの操作は不要です。代わりに、アプリケーションの設定を確認してください。
チェック項目名 | Node Condition の生成 | イベントの生成 | 説明 | デフォルトで GPU カードを隔離 | 修復の推奨事項 |
NvidiaXID13Error | いいえ | はい
|
| いいえ | なし |
NvidiaXID31Error | いいえ | はい
|
| いいえ | なし |
NvidiaXID43Error | いいえ | はい
|
| いいえ | なし |
NvidiaXID45Error | いいえ | はい
|
| いいえ | なし |
NvidiaXID48Error | はい
| はい
|
| はい | ノードを再起動します。 |
NvidiaXID63Error | いいえ | はい
|
| いいえ | なし |
NvidiaXID64Error | いいえ | はい
|
| いいえ | なし |
NvidiaXID74Error | はい
| はい
|
| はい | ハードウェアメンテナンス。 |
NvidiaXID79Error | はい
| はい
|
| はい | ハードウェアメンテナンス。 |
NvidiaXID94Error | いいえ | はい
|
| いいえ | なし |
NvidiaXID95Error | はい
| はい
|
| はい | ノードを再起動します。 |
NvidiaXID119Error | はい
| はい
|
| はい | ノードを再起動します。 |
NvidiaXID120Error | はい
| はい
|
| はい | ノードを再起動します。 |
NvidiaXID140Error | はい
| はい
|
| はい | ノードを再起動します。 |
NvidiaEccModeNotEnabled | はい
| はい (問題が解決されるまで継続的にイベントを生成します)
| ノードで ECC モードが有効になっていません。 | いいえ | ECC モードを有効にしてノードを再起動します。 |
NvidiaPendingRetiredPages | はい
| はい (問題が解決されるまで継続的にイベントを生成します)
|
| はい | ノードを再起動します。 |
NvidiaRemappingRowsFailed | はい
| はい (問題が解決されるまで継続的にイベントを生成します)
| GPU に行のリマッピング失敗があります。 | はい | ハードウェアメンテナンス。 |
NvidiaRemappingRowsRequireReset | はい
| はい (問題が解決されるまで継続的にイベントを生成します)
| GPU は、回復するために GPU リセットが必要な、修正不可能で封じ込められていないエラーに遭遇しました。操作を復元するために、できるだけ早く GPU をリセットする必要があります。 | はい | ノードを再起動します。 |
NvidiaDeviceLost | はい
| はい (問題が解決されるまで継続的にイベントを生成します)
|
| はい | ハードウェアメンテナンス。 |
NvidiaInfoRomCorrupted | はい
| はい (問題が解決されるまで継続的にイベントを生成します)
|
| はい | ハードウェアメンテナンス。 |
NvidiaPowerCableErr | はい
| はい (問題が解決されるまで継続的にイベントを生成します)
|
| はい | ハードウェアメンテナンス。 |
NvidiaXID44Error | はい
| はい
|
| はい | ノードを再起動します。 |
NvidiaXID61Error | はい
| はい
|
| はい | ノードを再起動します。 |
NvidiaXID62Error | はい
| はい
|
| はい | ノードを再起動します。 |
NvidiaXID69Error | はい
| はい
|
| はい | ノードを再起動します。 |
NvidiaXID[code]Error | いいえ | はい (3 つのイベントのみ生成)
| この表に記載されていないその他の XID。 | いいえ | |
NvidiaSXID[code]Error | いいえ | はい (3 つのイベントのみ生成)
|
| いいえ | なし |
その他の関連イベント
専用 GPU シナリオでは、NPD は異常チェック項目に基づいて、デフォルトで GPU カードを自動的に隔離します。 GPU が隔離されると、新しい GPU アプリケーション Pod は割り当てられません。 Kubernetes ノードで報告される nvidia.com/gpu リソースの数を確認することで、隔離の効果をチェックできます。 GPU カードが回復すると、ACK は自動的に隔離を解除します。
トリガー | イベント内容 | 説明 |
GPU カードの隔離 | はい
| 検出された異常により、GPU カードが隔離されました。 |
GPU カードの隔離解除 | はい
| GPU カードは異常から回復し、隔離が解除されました。 |
よくある質問
NPD で異常な GPU カードの自動隔離を無効にする方法
NPD で GPU 隔離機能を無効にする以下の方法は一時的な解決策です。この設定は NPD をアップグレードすると失われます。アップグレード後は、これらの手順に従って設定を再適用する必要があります。
背景情報
ノード上の GPU に異常が発生すると、ACK は NPD を通じて障害のある GPU を自動的に隔離します。これにより、ジョブが障害のある GPU にスケジュールされるのを防ぎます。ただし、自動隔離は自動修復を実行しません。手動でノードを再起動または修復する必要があります。迅速な対応を確実にするために、GPU 異常アラートを設定することを推奨します。
GPU が隔離された後、ノード上の残りの GPU がジョブの要件に満たない場合 (例えば、7 カードしか利用できないのに 8 カードのジョブが必要な場合)、ジョブのスケジュールは失敗します。これにより、GPU リソースがアイドル状態になる可能性があります。
GPU ステータスが正常に戻ると、GPU デバイスの隔離は自動的に解除されます。
障害のある GPU がリソースを報告し続け、隔離されないように自動隔離を無効にするには、以下のソリューションをご参照ください。
ソリューション
NPD の自動 GPU 隔離機能を無効にします。
コンポーネントバージョン 1.2.24 以降、1.2.28 未満の場合
NPD コンポーネントの YAML ファイルを編集します。
kubectl edit ds -n kube-system ack-node-problem-detector-daemonsetEnabledIsolateGPU構成をfalseに変更します。変更前:
--EnabledIsolateGPU=true変更後:
--EnabledIsolateGPU=false
コンポーネントバージョン 1.2.28 以降の場合
NPD コンポーネントの YAML ファイルを編集します。
kubectl edit ds ack-accel-health-monitor -n kube-systemGenerateNvidiaGpuIsolationFile構成をfalseに変更します。変更前:
--GenerateNvidiaGpuIsolationFile=true変更後:
--GenerateNvidiaGpuIsolationFile=false
既存の GPU 隔離を解除します。
既存の GPU 隔離を削除するには、XID エラーが発生したノードにログインし、
/etc/nvidia-device-plugin/unhealthyDevices.jsonファイルを削除します。これにより、ノードの GPU 隔離が無効化されます。GPU が再度隔離されるのを防ぐには、前のセクションの手順に従って自動隔離機能を無効にしてください。