0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

#0255(2025/10/11)Grafana×Prometheus×dcgm-exporterでGPUを可視化する最短手順

Posted at

Grafana×Prometheus×dcgm-exporterでGPUを可視化する最短手順

GPUメトリクスの可視化は、dcgm-exporterで数値化し、Prometheusで保存し、Grafanaで見る、が最短経路である。

この記事のゴール

中級エンジニアが、最小構成の Grafana+Prometheus+dcgm-exporterNVIDIA GPU のメトリクス(使用率、メモリ、温度、電力、クロックなど)をダッシュボード化できるようにする。


役者と関係性(まずは全体像)

  • NVML: NVIDIAが提供する管理用ライブラリ。nvidia-smiの裏側。GPUの利用率や温度などの生データを返す。
  • DCGM: Data Center GPU Manager。NVMLを利用して健全性チェックやメトリクス収集を行う基盤。
  • dcgm-exporter: DCGMのデータを Prometheus形式の/metrics に変換して公開する小さなHTTPサーバ。履歴は持たない。
  • Prometheus: /metricsを定期収集して時系列DBに保存する。
  • Grafana: Prometheusにたまった時系列を可視化する。

事前準備(共通)

  1. NVIDIAドライバが正常(nvidia-smiが通る)。
  2. Dockerでやる場合のみ NVIDIA Container Toolkit を導入(--gpus allが使える状態)。
  3. ポート衝突がないか確認:Grafana 3000、Prometheus 9090、dcgm-exporter 9400。

最小のdocker-compose構成

いちばん手軽な構成。GrafanaとPrometheusはコンテナ、dcgm-exporterはホストで動かすか、コンテナにするかを選べる。

1) dcgm-exporter をホストで起動する(簡単)

  • Ubuntuなら snap 版が手軽。
# DCGMとexporterをまとめて導入
sudo snap install dcgm
# exporterを起動して自動起動化
sudo snap start --enable dcgm.dcgm-exporter
# 動作確認
curl -s http://localhost:9400/metrics | head

2) PrometheusとGrafanaをcomposeで立てる

docker-compose.yml(抜粋)

services:
  prometheus:
    image: prom/prometheus:latest
    container_name: prometheus
    restart: unless-stopped
    volumes:
      - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro
    ports:
      - "9090:9090"
    extra_hosts:
      - host.docker.internal:host-gateway

  grafana:
    image: grafana/grafana-oss:latest
    container_name: grafana
    restart: unless-stopped
    environment:
      - GF_SECURITY_ADMIN_USER=admin
      - GF_SECURITY_ADMIN_PASSWORD=admin
    ports:
      - "3000:3000"
    volumes:
      - grafana_data:/var/lib/grafana

volumes:
  grafana_data: {}

prometheus/prometheus.yml

global:
  scrape_interval: 15s

scrape_configs:
  - job_name: prometheus
    static_configs:
      - targets: ["localhost:9090"]

  # ホストで動く dcgm-exporter を収集
  - job_name: nvidia-gpu
    static_configs:
      - targets: ["host.docker.internal:9400"]

起動と確認

docker compose up -d
xdg-open http://localhost:9090/targets  # nvidia-gpu が UP になればOK

3) dcgm-exporter もコンテナにしたい場合

docker-compose.yml に追記(NVIDIA Container Toolkit必須)

  dcgm-exporter:
    image: nvidia/dcgm-exporter:latest
    container_name: dcgm-exporter
    restart: unless-stopped
    gpus: all
    ports:
      - "9400:9400"

この場合、Prometheusのターゲットは dcgm-exporter:9400 に変更する。


Grafana設定の最小手順

  1. ブラウザで http://localhost:3000 にアクセス(admin/admin)。
  2. Data sourcePrometheus を追加(URL: http://prometheus:9090 もしくは http://localhost:9090)。
  3. ダッシュボードを作成し、以下のPromQLを貼るだけで主要な可視化は完成。
  • GPU使用率(%)
avg by (Hostname, gpu) (DCGM_FI_DEV_GPU_UTIL)
  • メモリ使用率(%)
100 * sum by (Hostname, gpu) (DCGM_FI_DEV_FB_USED)
  / sum by (Hostname, gpu) (DCGM_FI_DEV_FB_TOTAL)
  • 消費電力(W)
avg by (Hostname, gpu) (DCGM_FI_DEV_POWER_USAGE)
  • 温度(℃)
avg by (Hostname, gpu) (DCGM_FI_DEV_GPU_TEMP)

補足: ラベル HostnamemodelName は dcgm-exporter が付与する。ダッシュボード変数を作るなら label_values(DCGM_FI_DEV_GPU_UTIL, Hostname) などを使う。


よくあるハマりどころと対処

No data の典型原因と対策:

  • Prometheusがdcgm-exporterに到達できていない

    • http://localhost:9090/targetsnvidia-gpuUP か確認
    • コンテナ→ホスト参照は extra_hosts: host.docker.internal:host-gateway
  • 変数のAll値が正規表現でない

    • Grafana変数の All value.* にする(node=~"$node" などが空マッチしないように)
  • ラベル名の不一致

    • 例: クエリが node を使っているのに実データは Hostname しかない
    • どちらかに合わせる(Prometheus側でrelabelするか、Grafanaクエリを直す)

コンテナ運用とローカル運用の比較(どちらを選ぶ?)

比較軸 dcgm-exporterをコンテナ dcgm-exporterをローカル(ホスト)
導入の容易さ NVIDIA Container Toolkitの設定が必要 snapやdebで手早い
権限まわり gpus: all で安定。ときどきprivileged切り分けが必要 ドライバ直上で素直に動く
ポータビリティ Composeだけで完結。移設が楽 ホスト依存が増える
障害切り分け コンテナ単位でログが追える systemdやsnapで管理しやすい
Prometheus設定 dcgm-exporter:9400 をターゲット host.docker.internal:9400 をターゲット

監視設計のヒント(運用で効く小ネタ)

  • 保持期間: Prometheusの既定は約15日。長く保持したいなら --storage.tsdb.retention.time=45d 等で延長。
  • ダッシュボードの粒度: ノード別×GPU別で集約し、アプリ別はcAdvisorなどと合わせて相関パネルに。
  • アラート例: 温度がしきい値超過、メモリ使用率が90%超過、電力が定格近傍で一定時間継続、など。

まとめ

  • dcgm-exporter は DCGM(NVML)の数値を Prometheus形式 に変換して公開する“翻訳係”。
  • Prometheus がそれを収集・保存し、Grafana が見やすく表示する。
  • 最小構成は、dcgm-exporter(9400) → Prometheus(9090) → Grafana(3000)。
  • 運用要件に合わせて、dcgm-exporterを コンテナローカル のどちらで動かすかを選べばよい。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?