1
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?

GPU Observability を Instana で検証する

Posted at

はじめに

GPU を使うアプリケーションの性能監視は、ML/DL/LLM/AI/並列処理において非常に重要です。Instana が最近公開している GPU Observability (Public Preview) 機能を、NVIDIA DCGM Exporter + OpenTelemetry Collector を用いて検証しました。この記事では、Windows11 上の WSL2 に Ubuntu22.04 と Docker を入れた環境で、RTX 4090 GPU のメトリクスを収集し、Instana SaaS/Agent に送信するまでの手順と設定例、注意点をまとめます。

参考

  • IBM の公式ドキュメント「GPU Public Preview」機能 (IBM)
  • Community Blog: “GPU Observability With Instana” (IBM TechXchange)
  • GitHub の dcgm-exporter リポジトリ (GitHub)

環境構成

項目 内容
OS Windows 11
仮想環境 WSL2 上 Ubuntu 22.04
GPU NVIDIA RTX 4090
Docker 27.1.2
dcgm-exporter バージョン nvidia/dcgm-exporter:4.4.0-4.5.0-ubuntu22.04
OpenTelemetry Collector otel/opentelemetry-collector-contrib:最新

手順

以下のステップで検証を行います。


ステップ 1:環境準備

  1. Windows にて NVIDIA ドライバを最新にし、「WSL2 + GPU サポート」が有効であることを確認。

  2. Windows 上で WSL2 を起動し、Ubuntu 22.04 をセットアップ済み。

  3. WSL2 の中で nvidia-smi を実行し、GPU(RTX 4090)が見えることを確認。

nvidia-smi

4.Docker が Ubuntu (WSL2) 上で動いており、docker run --gpus all ... が可能であること。

ステップ 2:dcgm-exporter を起動する

2.1 最新の dcgm-exporter イメージを取得・起動。

docker pull nvidia/dcgm-exporter:4.4.0-4.5.0-ubuntu22.04

2.2 dcgm-exporter docker instanceを起動コマンド例:

ホストネットワークを使う場合

docker run -d --rm \
  --gpus all \
  --net host \
  --cap-add SYS_ADMIN \
  --name dcgm-exporter \
  nvidia/dcgm-exporter:4.4.0-4.5.0-ubuntu22.04 \
  -f /etc/dcgm-exporter/default-counters.csv

ポートを明示的にマッピングする場合

docker run -d --rm \
  --gpus all \
  --cap-add SYS_ADMIN \
  -p 9400:9400 \
  nvidia/dcgm-exporter:4.4.0-4.5.0-ubuntu22.04 \
  -f /etc/dcgm-exporter/default-counters.csv

ポイント解説

  • --gpus all : Docker コンテナから GPU にアクセスできるようにするオプション
  • --cap-add SYS_ADMIN : 一部のメトリクス収集や hostengine 動作に必要な管理権限を付与
  • -f default-counters.csv : 収集するメトリクスの定義ファイルを指定。デフォルトのカウンターで十分な場合はそのままでよいが、Instana 側で追加のメトリクスが必要な場合は CSV をカスタマイズして利用可能。

2.3 確認

curl localhost:9400/metrics | head

===============
# HELP DCGM_FI_DEV_SM_CLOCK SM clock frequency (in MHz).
# TYPE DCGM_FI_DEV_SM_CLOCK gauge
DCGM_FI_DEV_SM_CLOCK{gpu="0",UUID="GPU-2385660b-22f4-a478-0eaa-745e32b5c526",pci_bus_id="00000000:01:00.0",device="nvidia0",modelName="NVIDIA GeForce RTX 4090 Laptop GPU",Hostname="f5b8eb52ca91",DCGM_FI_DRIVER_VERSION="571.96"} 210
# HELP DCGM_FI_DEV_MEM_CLOCK Memory clock frequency (in MHz).
# TYPE DCGM_FI_DEV_MEM_CLOCK gauge
......

DCGM_FI_DEV_... 系のメトリクスが見えれば OK。 (GitHub)

ステップ 3:OpenTelemetry Collector のセットアップ

Collector をコンテナで動かします。以下は設定ファイル例 (otel-dcgm.yaml)。

receivers:
  prometheus/nvidia-dcgm:
    config:
      scrape_configs:
        - job_name: 'nvidia-dcgm'
          scrape_interval: 10s
          static_configs:
            - targets: ["172.17.0.1:9400"]  # Docker ブリッジのゲートウェイ

  otlp:
    protocols:
      grpc:

processors:
  batch:
  resource:
    attributes:
      - key: service.name
        value: nvidia-dcgm
        action: insert
      - key: INSTANA_PLUGIN
        value: dcgm
        action: insert

exporters:
  otlp:
    endpoint: "172.17.0.1:4317"  # Host の Instana Agent / OTLP エンドポイント
    tls:
      insecure: true

service:
  pipelines:
    metrics:
      receivers: [prometheus/nvidia-dcgm]
      processors: [batch, resource]
      exporters: [otlp]
  • 172.17.0.1 は Docker ブリッジネットワークでのホストゲートウェイ。先の検証でこのアドレスが ip route で得られた。
  • 4317 ポートは Agent または Instana OTLP 受信設定に応じて変える必要あり。

起動コマンド例:

docker run -d --name otelcol \
  -v /home/XXXX/dcgm/otel-dcgm.yaml:/etc/otel/config.yaml \
  otel/opentelemetry-collector-contrib:latest \
  --config /etc/otel/config.yaml
  • 上記の"/home/XXXX/dcgm/otel-dcgm.yaml"は実際のパスに応じて変更してください。

"docker logs otelcol"コマンドでOTELの動作確認:

~/dcgm$ docker logs otelcol
2025-09-18T10:35:36.505Z        info    service@v0.135.0/service.go:211 Starting otelcol-contrib...     {"resource": {"service.instance.id": "16afe6da-9724-425e-8a15-31caeb436165", "service.name": "otelcol-contrib", "service.version": "0.135.0"}, "Version": "0.135.0", "NumCPU": 32}
2025-09-18T10:35:36.506Z        info    extensions/extensions.go:41     Starting extensions...  {"resource": {"service.instance.id": "16afe6da-9724-425e-8a15-31caeb436165", "service.name": "otelcol-contrib", "service.version": "0.135.0"}}
2025-09-18T10:35:36.506Z        info    prometheusreceiver@v0.135.0/metrics_receiver.go:157     Starting discovery manager      {"resource": {"service.instance.id": "16afe6da-9724-425e-8a15-31caeb436165", "service.name": "otelcol-contrib", "service.version": "0.135.0"}, "otelcol.component.id": "prometheus/nvidia-dcgm", "otelcol.component.kind": "receiver", "otelcol.signal": "metrics"}
2025-09-18T10:35:36.506Z        info    targetallocator/manager.go:210  Scrape job added        {"resource": {"service.instance.id": "16afe6da-9724-425e-8a15-31caeb436165", "service.name": "otelcol-contrib", "service.version": "0.135.0"}, "otelcol.component.id": "prometheus/nvidia-dcgm", "otelcol.component.kind": "receiver", "otelcol.signal": "metrics", "jobName": "nvidia-dcgm"}
......

ステップ 4:Instana 側の設定

Instana Agentの設定で以下を確認・設定:

  • Instana Agent(もしローカル Agent を使うなら)が OTLP/gRPC を受け入れるよう設定されていること。Instana の設定ファイルで
com.instana.plugin.opentelemetry:
  grpc:
    enabled: true
  http:
    enabled: true

Instana SaaS の場合は、SaaS 側の OTLP エンドポイント、TLS 証明書/トークン 認証が必要ならそれも設定。

ステップ 5:検証 & モニタリング

1. GPU に負荷をかける(例えば CUDA プログラムや ML トレーニング、あるいは GPU を使うベンチマーク)
2. nvidia-smi で GPU 使用率やメモリ使用率が上昇することを確認。
3. curl172.17.0.1:9400/metrics を Collector コンテナから取得できるか確認。
4. Collector ログを docker logs otelcol -f で追い、Prometheus レシーバーがスクレイプ成功していることを確認。
5. Instana SaaS UI で GPU メトリクスが届いている/グラフ化できていることを確認。

5.1 Instana SaaS UI でメトリクスを確認する手順

  • Instana SaaS UI を開き、分析 をクリック
  • 続いて インフラストラクチャー を選択
  • エンティティのタイプ一覧から OTEL Dcgm を選択
  • OTEL Dcgm エンティティのインスタンスをクリックすると、対応するダッシュボードが開きます
    Screenshot 2025-09-18 at 23.35.31.png

Screenshot 2025-09-18 at 23.37.16.png

Screenshot 2025-09-18 at 23.37.27.png

Screenshot 2025-09-18 at 23.37.38.png

Screenshot 2025-09-18 at 23.37.48.png

Screenshot 2025-09-18 at 23.38.03.png

  • Hostのダッシュボードでも同様に上記のOTEL DCGM画面を開けます。
    Screenshot 2025-09-18 at 23.39.04.png

  • OTEL DCGMでの情報収集を実施ない場合に、Instana AgentのHost Sensorで収集したGPU情報:
    Screenshot 2025-09-18 at 23.39.18.png

確認できる GPU メトリクス例

Instana UI では以下のような GPU 関連メトリクスを可視化できます。

  • GPU 使用率 (Utilization)
  • メモリ使用量 / 空き容量
  • GPU クロック (SM / メモリ)
  • 温度
  • 消費電力
  • その他 DCGM Exporter が提供するカウンタ群

注意点/ハマりやすいところ

  • targets を YAML のリスト形式(["IP:ポート"])にしないと設定読み込みエラーになる。
  • localhost を使うと、Collector コンテナの中からは自分自身を指してしまい、Host のサービスには届かない。必ず Docker やホストとの通信経路を明示する IP(例:Docker ブリッジの gateway)を使うこと。
  • Instana エンドポイントが TLS/認証ありなら、それぞれ証明書/ヘッダーを設定する必要あり。
  • デフォルトのメトリクス収集設定(CSV)に含まれていないカウンターが欲しければ、dcgm-exporter の -f <csv> オプションで追加。 (GitHub)
  • メトリクスのラベルにホスト名などの情報が含まれているかを確認。例えばどの GPU がどのマシンか識別できるようラベルが必要。
  • ネットワーク設定(ポート開放、Firewall、Docker ネットワーク設定など)が正しいかを確認。

結果と展望

検証の結果、以下が確認できた:

  • dcgm-exporter 4.4/4.5 を使い、RTX 4090 の GPU メトリクスが DCGM_FI_DEV_* 系で正しく出力されること。
  • OpenTelemetry Collector Contrib を使い、Prometheus レシーバーでスクレイプ可能であること。
  • 正しいゲートウェイ IP を使うことで、Collector から Host の dcgm-exporter・Instana Agent に通信できること。
  • Instana にメトリクスが届き、GPU 利用率・温度・メモリ利用などを可視化できた。

将来的に、下記を試すとより良くなる可能性あり:

  • dcgm-exporter のプロファイル機能(profiling metrics)が使えるか確認
  • 高頻度のスクレイプ設定(例 5s や 1s)での Overhead/精度比較
  • Instana のダッシュボードを使ってアラート設定(GPU 温度高・利用率過大など)
  • 複数 GPU/分散環境でのメトリクス集約
1
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
1
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?