TT Lab
ブログ

한국어 English 日本語 中文

はじめる
ブログ

ブログ

GPU ハードウェア・ドライバ障害診断

状態: ドラフト (2026-10-06 更新)。 公式ドキュメントで確認した記述がベースであり、 コンシューマー向け GPU 3 種で読み取り専用として確認した部分(10節末尾の「実測」)のみ 直接確認した値です。データセンター向け GPU と実際の障害イベントは測定できませんでした。 文章末尾の「確認したバージョンと日付」および「確認できなかったこと」を先にお読みください。 作成規則: 実測データが基本であり、測定できなかったものは「未実測」と表示します。

目次

概要

GPU 障害診断は 3 つの系統の信号を読み取る作業です。カーネルログの XID メッセージ、DCGM (Data Center GPU Manager) と nvidia-smi の指標、Kubernetes のノード状態です。

この記事を読み終えると面接で説明できるようになること

  1. XID を「番号、カタログの即座の処置バケット、単独発生かどうか」の順序で読み解き、アプリのエラーとハードウェアのエラーを切り分ける方法
  2. ECC、NVLink、スロットリング、PCIe 降格がどのような指標やコードに現れるか、そして遅い 1 つの GPU を見つける方法
  3. 自動隔離・復旧パイプラインの構成、および何をPagerDutyで通知し何をチケットとして残すかの基準

1. 信号が流れる道

GPU + 드라이버(NVML)
 ├─ 커널 로그 "NVRM: Xid (PCI:0000:ca:00): 79, ..." ─► 로그 수집기(syslog 모니터)
 ├─ NVML 이벤트(XID) ─► 디바이스 플러그인 ─► 장치 unhealthy ─► kubelet allocatable 감소
 └─ DCGM ─┬─ dcgm-exporter :9400/metrics ─► Prometheus ─► 알림
          └─ health watch, dcgmi diag (능동 점검)

dcgm-exporter のデフォルト指標ファイル(default-counters.csv, main)から診断に使用するものです。括弧内はデフォルトの状態です。

領域 指標 読み方
使用率・メモリ GPU_UTIL, FB_USED/FB_FREE/FB_RESERVED(MiB) 使用率が 0 でもメモリが占有されている場合がある
温度・電力・クロック GPU_TEMP, MEMORY_TEMP, POWER_USAGE, SM_CLOCK, MEM_CLOCK クロック低下はスロットリングの疑い
XID XID_ERRORS (有効) 「最後の XID の値」を保持するゲージであり、回数ではない
ECC・リマッピング ECC_*_TOTAL, RETIRED_*(無効)、 *_REMAPPED_ROWS, ROW_REMAP_FAILURE(有効) リマッピング失敗は即座の処置対象
PCIe・NVLink PCIE_REPLAY_COUNTER, NVLINK_BANDWIDTH_TOTAL(有効)、NVLink CRC・REPLAY・RECOVERY(無効) 増加率を確認する。エラー系は CSV で有効にする必要がある
スロットリング時間 POWER_VIOLATION, THERMAL_VIOLATION など(無効、ns カウンター) 理由別の累積時間

DCGM API ドキュメントのフィールド名(例: ..._TEMP_CELSIUS)と exporter の指標名が異なる場合があるため、使用する exporter の CSV を基準とします。

2. コンシューマー向け GPU とデータセンター向け GPU

項目 データセンター向け GPU コンシューマー向け
DCGM 全機能 「制限された機能」(DCGM 公式ドキュメント)
プロファイリング PROF_* Volta 以降のデータセンター サポート対象外(exporter CSV のコメント)
エラー隔離・動的ページオフライニング GA100、GH100、GB10x GA10x・Ada の列にはなし(ドキュメントの表)
行リマッピング サポート GA10x・Ada の列に表示される(製品別のサポートは未確認)

実験環境での実測値です。8GB クラスのノートPC用 GPU(ドライバ 595.91.07)の dcgm-exporter 原文には XID_ERRORS と PROF_* の行がなく、 MEMORY_TEMP およびリマッピング行の指標は 0 でした。0 が「サポートしており正常」なのか「非サポートだから 0」なのか、XID 行がない理由が exporter のバージョンによるものかコンシューマー向け GPU の制約によるものかは確認できませんでした。XID カタログの「適用対象」の列も A100 以降のデータセンター向け製品のみです。

3. XID の読み方

形式は NVRM: Xid (PCI 주소): 번호, 부가 정보 です。読み取る順序は ① カタログの即座の処置バケット、② 単独 (solo) なのか他の XID と一緒なのか (45 は他のエラーの結果としても記録される)、③ 同じ GPU で繰り返されるか、です。バケットは RESTART_APP(アプリのみ再起動)、 RESET_GPU, RESTART_BM(ノード再起動)、 IGNORE, CONTACT_SUPPORT です。Xid 154 は必要な復旧処置 (None, Drain P2P, Drain and Reset, GPU Reset Required, Node Reboot Required) を通知してくれます。

XID カタログ名 即座の処置 解釈
13 Graphics Engine Exception RESTART_APP 大半はアプリの範囲外アクセスなど。同じ TPC・GPC で繰り返される場合はハードウェア点検
31 GPU memory page fault RESTART_APP MMU フォルト。同じ GPU で繰り返される場合はハードウェア、別の GPU ならアプリ
43 GPU stopped processing IGNORE アプリのソフトウェアエラーにより終了、GPU は正常
45 Preemptive cleanup 単独の場合は RESTART_FM、それ以外は IGNORE 他のエラー・アプリ終了の結果
48 Double Bit ECC Error WORKFLOW_XID_48 訂正不可 ECC。リセットまたは再起動が必要、63・64 を伴う場合は DRAIN_AND_RESET
63 / 64 メモリリマッピングイベント / 失敗 IGNORE / RESET_GPU リマッピング記録成功 / 記録失敗
74 NVLink Error WORKFLOW_NVLINK_ERR 反対側の GPU の故障がこちら側に 74 として見えることがある
79 Fallen off the bus RESTART_BM PCIe 経由で GPU にアクセス不可
94 / 95 含まれる / 含まれないメモリエラー RESTART_APP / RESET_GPU 94 は 1 つのアプリ、95 は複数のアプリに影響

31 はカタログではアプリ側が多いとしつつも、GPU デバッグガイドでは「Suspected Hardware Problems」とされているため、単発はアプリ、繰り返しはハードウェアという分岐を直接設ける必要があります。デバイスプラグインは 13、31、43、45、68、109 を「アプリエラー」としてハードコードして無視し、NVML が critical と通知する残りの XID でデバイスを unhealthy として表示します(ソース)。ソースの FIXME には unhealthy から復帰するパスがないと記載されているため、リセット後にプラグインの再起動が必要であると推論されます(未確認)。

4. ECC、行リマッピング、リタイア

単一ビットエラーはハードウェアが訂正し、二重ビットは検出のみを行います。カウンターはドライバーロード以降の volatile と、生涯累積の aggregate に分かれます。Ampere 以降では行リマッピングがページリタイア(旧型は最大 64)に置き換わり、最大 512 回のリマッピングを行いますが、適用には GPU のリセットが必要です。リマッピング失敗フラグは、すでに 8 行がリマッピングされたバンクに再度試行した場合、すでにリマッピングした行に再度試行した場合、または合計 512 回に達した場合に立ち、RMA 判断の根拠となります。根拠となるドキュメントは A100 以降を基準としています。

nvidia-smi -q -d ECC,ROW_REMAPPER,PAGE_RETIREMENT

Fabric Manager (FM) は NVSwitch システムにおいて GPU 全体を 1 つのメモリファブリックとして結合し、リンクを監視します。HGX A100 は FM の初期化前に CUDA を開始すると cudaErrorSystemNotReady が発生します。Hopper 以降では GPU とスイッチが独自のリンク学習を行い、リセットに FM を必要としません。FM はドライバーと同一のバージョンである必要があります。74 が発生した場合は nvidia-smi nvlink -e で CRC・replay・recovery エラーカウンターを確認します。致命的な SXid は CUDA の処理を中断させ、74 と 45 を同時に残します。Blackwell ファミリーは NVLink 5 用の XID 144 から 150 番台を使用し、SXid は適用されません。Ampere NVSwitch システムは FM が稼働しているときにのみ GPU を 1 つずつリセットでき、そうでなければ NVLink で結ばれた GPU をまとめてリセットします。

6. スロットリングと PCIe 降格

clocks_event_reasons はビットマスクです。値は、GPU アイドル 0x1、アプリケーションクロック 0x2、SW 電力上限 0x4、HW スローダウン 0x8、同期ブースト 0x10、SW サーマル 0x20、HW サーマル 0x40、HW パワーブレーク 0x80、ディスプレイクロック 0x100、ボード制限 0x200、信頼性 0x400 です (go-nvml)。0x8 と 0x40 はコアクロックを半分以下に低下させ、0x80 は外部電源ブレーク信号であるため大きな意味を持ちます。Llama 3 の論文には、日中の気温が原因でスループットが日単位の周期で 1% から 2% 変動したと記載されています。PCIe は pcie.link.gen.current と pcie.link.gen.max, pcie.link.width.current を比較しますが、現在の値はアイドル時に低下する場合があるというマニュアルの説明に従い、負荷をかけている最中に測定する必要があります。再試行は PCIE_REPLAY_COUNTER であり、DCGM health の出力例では分間 8 回超を警告として表示しています。

7. 遅い 1 つの GPU が全体を遅くする

Meta は Llama 3 405B の 54 日間の期間において 466 回の中断 (予期せぬ中断 419 回) があり、予期せぬ中断の約 78% がハードウェア起因 (GPU 58.7%) であると報告しました。論文の原文を開いて確認したところ、この 58.7% は本文にそのように記載されているものの表 5 の印刷された比率を合計した値であり、同じ表の件数で再計算すると GPU 分類は 268 件であるため 419 件中の 64.0% となります (表の「Faulty GPU」の 30.1% は件数 148 件と一致しない印刷ミスとみられ、件数ベースでは 35.3%)。後述の「外部根拠」にまとめています。同記事には、動作はするものの遅いストラグラーは発見が難しく、1 つのストラグラーが数千の GPU を遅くする可能性があり、遅い通信として現れると記載されています。見つけ出す順序は筆者のまとめです。① ランク別のステップ・集合通信時間を比較します (PyTorch flight recorder)。② 遅いランクの GPU のスロットリング理由、温度、電力、PCIe の世代と幅、NVLink エラーを並べて確認します。③ ノードを空けた上で dcgmi diag -r 3(targeted_stress、nvbandwidth、nccl_tests を含む)で確認します。DCGM のドキュメントでは、これが包括的なハードウェア診断や RMA の根拠の代わりにはならないと明記されています。

8. Kubernetes の対応: 隔離と自動復旧

flowchart LR
  D["탐지<br/>XID, DCGM, 플러그인"] --> C["분류<br/>카탈로그 버킷, 반복 여부"]
  C --> Q["cordon·taint"]
  Q --> R["drain<br/>PDB 존중"]
  R --> X["복구<br/>GPU 리셋, 노드 재시작, 교체"]
  X --> V["검증<br/>dcgmi diag -r 1 또는 2"]
  V --> U["uncordon"]
  X -. 반복 실패 .-> H["사람 호출"]

unhealthy になってもすでに割り当てられたポッドはそのデバイスに紐づいたままとなるため (Kubernetes ドキュメント)、ドレインが必要です。1.36 の ResourceHealthStatus(ベータ)はコンテナの状態 allocatedResourcesStatus を通じてデバイスの健康状態を通知します。NVSentinel (v1.25.0、Beta/Stable、Kubernetes 1.34+、スタンドアロン DCGM が必要)は DCGM と syslog の XID を内蔵カタログで分類して cordon、drain、リセット・再起動までつなげ、5 分以内にノードの 50% が cordon された場合に停止するサーキットブレーカーを備えており、デフォルトではモニタリングのみを有効にします。Amazon EKS の node monitoring agent はよく知られている XID をノードの条件 AcceleratedHardwareReady=False に上げて 48 は再起動、74・79 は交換として記録し、分からない XID はイベントとしてのみ残します。ベンダーへ問い合わせる前には nvidia-bug-report.sh の出力、FM ログ、DCGM 診断ログを収集します(GPU デバッグガイド)。

9. アラート設計

Google の SRE 本には「機械的な応答であればページではない」と書かれています。以下はこれを適用した筆者の提案です。

等級 対象 理由
ページ 自動復旧の失敗・繰り返し(同一ノードでの再発)、利用可能な GPU が閾値未満、サーキットブレーカー作動 判断が必要であり、容量が脅かされている
チケット XID 63(次回のリセット時に適用)、リマッピング待ち、ECC 増加傾向、高負荷中の PCIe ダウングレード、HW サーマルスロットリング、不明な XID 緊急ではなく、メンテナンスウィンドウで処理
自動処理と記録のみ XID 79・48+64・74・95 の cordon・drain・リセット 機械的な応答
アプリチームへ転送 13、31、43、45 の単発 ハードウェアではない

10. 実際にやってみる(読み取り専用)

# GPU 가 있는 노드에서 실행
journalctl -k --no-pager | grep -E "NVRM: Xid" | tail   # dmesg 가 막힌 계정에서도 읽힘, 아래 「실측」 참고
nvidia-smi --query-gpu=index,name,pcie.link.gen.current,pcie.link.gen.max,pcie.link.width.current,temperature.gpu,power.draw,clocks_event_reasons.active --format=csv
nvidia-smi -q -d PERFORMANCE,ECC,ROW_REMAPPER | head -80

# 쿠버네티스에서 dcgm-exporter 지표 확인
kubectl -n gpu-operator get po -l app=nvidia-dcgm-exporter -o wide
curl -s http://<파드IP>:9400/metrics | grep -E "XID|REMAP|PCIE_REPLAY|VIOLATION"

使用率、電力、温度、VRAM、クロックしか見ないダッシュボードでは、GPU 固有のアラート規則が抜け落ちがちです。筆者は 8GB カードでサーバープロセスのロケータキャッシュが 6 分で 6.4 GB から 7.8 GB に増加するのを観察しており、こうした VRAM の傾向はアラートの練習に適した資料です。

外部的根拠:論文と公式資料で確認した内容

データセンター GPU や大規模クラスターがないため、実際の障害インシデントを測定することはできませんでした。その代わりに大規模運用レポートと NVIDIA の公式ドキュメントを開き、11 件の記述を突き合わせました。外部の数値は、機器や条件が異なるため、方向性と一致しているかどうかの判定のみ行いました。

主題 資料と確認した箇所 確認した内容と条件 本記事との関係
Llama 3 の中断統計 Llama Team (Meta), 「The Llama 3 Herd of Models」, arXiv:2407.21783, セクション 3.3.4 および表 5 最大 16K H100、事前学習 54 日間:中断 466 回(計画的 47 回、予期せぬ中断 419 回)、人間の介入 3 回。予期せぬ中断の約 78% がハードウェア。GPU 分類 268 件(64.0%):不良 GPU 148、HBM3 メモリ 72、SRAM 19、システムプロセッサ 17、サイレントデータ破損 6、サーマルインターフェース・センサー 6。気温低下によりスループットが日周期で 1〜2% 変動 支持。 ただし本文の「GPU 58.7%」は表の印刷比率の合計であり、件数ベースでは 64.0%(表 5 の印刷ミス)
研究クラスター Kokolis ら (Meta), 「Revisiting Reliability in Large-Scale ML Research Clusters」, HPCA 2025, arXiv:2410.21680 A100 約 24k、11 ヶ月。8 GPU ジョブの平均故障間隔 47.7 日、1,024 GPU ジョブ 7.9 時間。同じ症状が複数の原因から発生するため、NCCL タイムアウトをネットワークのせいだと断定しないよう勧告。PCIe エラーと XID 79 が同時に発生した割合 43%、63% 支持。 セクション 7 の「症状から原因を断定しない」と同方向
実際の XID 分布 Cui ら, 「Story of Two GPUs」, SC 2025, arXiv:2503.11901 (NCSA Delta, A100 448基 895 日間, H100 608基 146 日間) XID 31 (MMU) が A100 で 8,863 件、XID 79 は A100 でわずか 10 件。H100 の訂正不能 ECC は GPU あたりの平均間隔が A100 の約 3 分の 1。システム全体の平均エラー間隔 1.4 時間(A100)、1.9 時間(H100)。ノード稼働率約 99.4%、99.3% 支持。 当社環境において XID 79 や行リマッピングの失敗に遭遇しなかったことが不自然ではない根拠
大規模学習の診断 Jiang ら (ByteDance), MegaScale, NSDI 2024. Hu ら, NSDI 2024 (arXiv:2403.07648). Dong ら (Alibaba), C4, HPCA 2025 MegaScale:エラー検出と診断チェックに平均 10 分未満、最後のチェックポイントから 15 分以内に復旧、特定ホストが同じ順伝播で約 10% 低速なため除外して MFU を約 0.7% 改善。インフラ障害は件数の約 11% であるが GPU 時間の 82% 以上を占める(Shanghai AI Lab による分析)。C4:診断ツールがなければ時間の約 30% が検出・診断・切り分け・再起動に費やされる 支持。 セクション 7 の「低速な GPU 1 枚が全体を遅らせる」という記述
XID と行リマッピング NVIDIA XID カタログ(2026-09-09 更新)、GPU Memory Error Management ドキュメント 11 本の論文における 12 個の XID(13、31、43、45、48、63、64、74、79、94、95、154 など)の対処法の分類と、行リマッピング最大 512 回、バンクあたり 8 行失敗の条件がドキュメントと一致。カタログの適用対象列は A100、H100、B100、GB200 支持。 エラー切り分けと動的ページオフライニングは GA100、GH100、GB10x のみにあり、行リマッピングは GA10x や Ada にも表示されるが、ドキュメント製品単位での保証はない
コンシューマー向け GPU の指標 DCGM ドキュメントのサポート表、dcgm-exporter のデフォルト収集ファイルとソース コンシューマー向け製品群ではポリシーアラートは Tesla のみ、診断はレベル 1 のみ。プロファイリング指標はデータセンター向け Volta 以降でのみサポート 支持。 17 本の論文の記述と一致

ベンダーの数値は本文に記載されている条件のもののみを転載し、論文の本文を開けなかった資料は使用していません。

11. 面接で聞かれる可能性のある質問

  1. XID 79 を確認しました。どう対応しますか? PCIe 経由で GPU にアクセスできないという意味であり、カタログのバケットとしてはノードの再起動となります。cordon と drain を行った後に再起動し、繰り返される場合はリンク、電源、システムイベントログを確認して交換します。
  2. XID 13 と 48 はどのように扱いますか? 13 は大半がアプリのエラーなので Compute Sanitizer で確認し、同じ TPC・GPC で繰り返される場合はハードウェアを疑います。48 は訂正不能 ECC であるためリセットまたは再起動が必要であり、63・64 が伴う場合は drain してからリセットします。
  3. 低速な GPU 1 枚をどのように見つけますか? ランクごとの通信時間から疑わしいランクを絞り込み、その GPU のスロットリング理由、温度、PCIe、NVLink エラーを比較します。ノードを空にした後、 dcgmi diag -r 3 で確認します。
  4. 自動復旧において何を注意すべきですか? 同時実行数の上限とサーキットブレーカーにより一度に切り離されないようにし、繰り返し失敗する場合は人間に引き継ぎます。リセット時は GPU を使用しているプロセスがない状態にする必要があります。
  5. どのような場合にページ(アラート)を鳴らしますか? 機械的に処理されるものは自動化し、記録のみを残します。自動復旧に失敗したときや繰り返されるとき、利用可能な GPU が閾値を下回ったときにページを鳴らします。

12. よくある誤解

13. 参考資料と確認したバージョン

すべて 2026-10-05 にアクセスしました。

実測:コンシューマー向け GPU 3 種から読み取った値(読み取り専用)

デスクトップ向け 24GB 級(Ampere 世代、ドライバー 570.195.03)、ノートPC 向け 8GB 級(Ada 世代、595.91.07)、ノートPC 向け 6GB 級(Ampere 世代、595.91.07)において、 nvidia-smi -q -d ECC,ROW_REMAPPER,PAGE_RETIREMENT, --query-gpu フィールド、カーネルログを読み取りました。3 つともアイドル状態であり、何も変更していません。

項目 24GB 級デスクトップ 8GB 級ノートPC 6GB 級ノートPC
ECC モードとエラーカウンター N/A N/A N/A
ページリタイア N/A N/A N/A
行リマッピング N/A 値あり:訂正可能 0、訂正不可 0、保留 No、失敗 No N/A
バンク可用性ヒストグラム なし Max 64 バンク、残り区間 0 なし
remapped_rows.* クエリ [N/A] 0, 0, No, No [N/A]
NVRM: Xid 行(起動以降) 0 件 0 件 0 件

制限事項:コンシューマー向けモデル3機種のみであり、データセンター向け GPU の ECC、ロウリマップの失敗、XID 79 などの実際の障害には遭遇していません。DCGM の XID_ERRORS 指標がコンシューマー向け GPU で出力されない理由(エクスポーターのバージョン起因か、GPU の制約か)についても、今回のテストでは判別できませんでした(未確認)。

確認したバージョン:GPU Operator 26.7.1 バンドルの DCGM 4.6.1-1、DCGM Exporter 4.6.1-4.8.4、Kubernetes 安定板 v1.37.1。

確認できなかったこと:コンシューマー向け GPU の ECC・ロウリマップ・XID 指標の実際の出力、実験環境のエクスポーターのバージョン、クエリのフィールド名(第三者が公開した --help-query-gpu の出力に基づく)がドライバー 595 で有効かどうか、カタログのコンシューマー向け GPU への適用有無。アラート等級表と調査手順は公式の規定ではなく筆者の判断です。

ログインするといいねできます

コメント

まだコメントはありません。

ログインするとコメントできます