Prometheus & DCGM ExporterによるプロフェッショナルなNVIDIA GPU監視:手遅れになる前に対策を

Monitoring tutorial - IT technology blog
Monitoring tutorial - IT technology blog

なぜGPU管理にnvidia-smiだけでは不十分なのか?

AIシステムの運用やディープラーニングのトレーニングにおいて、GPUはシステムの心臓部と言えます。H100やA100といった高価なGPUを保護することは最優先事項です。通常、サーバーにSSHで接続し、nvidia-smiを実行して状況を確認しますが、これには致命的な弱点があります。それは「その瞬間のデータ」しか見ることができない点です。

実際、午前2時にGPUが過熱してサーマルスロットリング(性能低下)が発生していないか、24時間体制で見守ることは不可能です。モデルの学習がピークに達した際、電源(PSU)に過負荷がかかっていないでしょうか?ここで、NVIDIA DCGM ExporterPrometheusおよびGrafanaと組み合わせることで、運用の全履歴を自動的に追跡できるようになります。

クイックスタート:5分で監視を開始する

NVIDIAドライバとDockerがインストールされていれば、コマンド1つでGPUの全指標をダッシュボードに表示できます。これは、本格的な導入前に互換性を確認する最も早い方法です。

docker run -d --gpus all \
  --name nvidia-dcgm-exporter \
  -p 9400:9400 \
  nvcr.io/nvidia/k8s-device-plugin:dcgm-exporter:3.3.5-3.4.0-ubuntu22.04

コンテナの起動後、http://<IP-Server>:9400/metricsにアクセスしてください。画面にDCGM_FI_DEV_GPU_TEMPのような指標が並んでいれば、データの送信準備は完了です。

DCGM Exporter:数値の背後にある「頭脳」

NVIDIA Data Center GPU Manager (DCGM) は、大規模データセンターのGPUを管理するための専用ツールスイートです。DCGM Exporterは、いわば「高度な通訳者」の役割を果たします。NVMLライブラリからデータを抽出し、Prometheusが読み取れる形式に変換します。

なぜコミュニティ製のツールではなくこれを使うのでしょうか?DCGM ExporterはNVIDIAの「公式」製品であり、nvidia-smiでは見落とされがちな指標を深くサポートしています。**Tensor Coreの利用率**や**FP64/FP32**スレッドの動作など、モデル学習のパフォーマンス最適化に不可欠なパラメータを詳細に監視できます。

ステップ1:NVIDIA Container Toolkitのインストール

「コンテナがGPUを認識しない」というエラーの9割は、このToolkit의欠如が原因です。これにより、Dockerエンジンがホスト層のNVIDIAドライバと直接通信できるようになります。

# 公式リポジトリの追加
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
  && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
    sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
    sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

# インストールとサービスの再起動
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker

ステップ2:Prometheusのデータ収集設定

次に、Prometheusが定期的にポート9400にアクセスしてデータを取得するように設定します。prometheus.ymlファイルに以下の設定を追加してください。

scrape_configs:
  - job_name: 'nvidia-gpu'
    static_configs:
      - targets: ['<GPUサーバーのIP>:9400']
    scrape_interval: 15s # CPUに負荷をかけすぎず、温度を監視するのに十分な頻度です

実践的な経験:アラート疲れの罠を避ける

監視を始めたばかりの頃の最大の失敗は、アラートの感度を上げすぎたことでした。GPUが81°Cに達するたびに毎晩200件のTelegram通知が届くようでは、本当の異常を見逃してしまいます。A100のようなモデルでは、フルロード時に80°Cに達するのは完全に正常な範囲です。

効果的なアラート設定戦略

  • 温度:GPUが85°Cを5〜10分間連続して超えた場合のみアラートを出す。
  • VRAM:使用率が95%に達した際に通知し、PyTorchコードのメモリリークをクラッシュ(Out of Memory)前に検知する。
  • クロック周波数:温度が低いのにクロックが大幅に低下している場合は、すぐに電源を確認してください。PSUがカードのピーク電力に耐えられていない可能性があります。

Grafanaダッシュボードによる可視化

自分でグラフを作成するのに時間を費やす代わりに、Grafana LabsのダッシュボードID 12239 を活用しましょう。これはNVIDIAによって最適化された標準的なダッシュボードテンプレートです。

このダッシュボードでは、以下の項目を俯瞰できます:

  • GPU Utilization:実際の計算負荷の割合。
  • Power Usage:消費電力(正確な運用コストの計算に役立ちます)。
  • XID Errors:NVIDIAドライバからの重大なハードウェアエラー(故障時の保証対応に非常に重要)。

大規模システム運用者向けのヒント

Kubernetesクラスタを管理している場合は、手動でインストールするのではなく、Helm Chart経由で NVIDIA GPU Operator を使用してください。ドライバからコンテナランタイム、Exporterまで、クラスタ全体の管理を自動化し、メンテナンスの手間を90%削減できます。

また、XID 31XID 43 といったエラーコードに注意してください。Grafanaでこれらのエラーが表示された場合、ハードウェアの不具合や電源ケーブルの緩みの可能性が高いため、直ちに物理的な確認が必要です。

まとめ

GPUの監視は、単に色鮮やかなグラフを眺めるためのものではありません. 大切な資産を保護し、AIプロジェクトの安定性を維持するための不可欠なツールです。今日15分かけて設定を行うだけで、将来ハードウェアトラブルが発生した際に、何週間ものダウンタイムを回避できるかもしれません。

Share: