プログラムを中心とした個人的なメモ用のブログです。 タイトルは迷走中。
内容の保証はできませんのであしからずご了承ください。

2021/12/26

Telegraf で GPU の情報を取得し、Grafana で可視化する

event_note2021/12/26 12:35

Telegraf, InfluxDB, Grafana を使って GPU の情報を閲覧できるようにしました。

以前、Telegraf, InfluxDB, Grafana を使ってサーバーリソースの情報を閲覧できるようにしました。

これを前提としたうえで、今回 GPU の情報も見れるようにしました。

試したグラフィックボードは NVIDIA GeForce RTX 3080 です。
グラフィックドライバーのインストールなどは完了している前提です。

概要

Telegraf の nvidia_smi プラグインを使えば GPU の情報を取得できるようです。
nvidia_smi のプラグインについては以下に説明があります。

上記の記事に書いてありますが、Docker で動作させている Telegraf で GPU の情報を取得するには、以下の2つの方法があるようです。

  • nvidia/cuda の Docker イメージをベースに Telegraf をインストールしたカスタムイメージを作成する
  • Volume のマウントバインディングを使用して nvidia-smi のバイナリを Docker コンテナに注入する

今回は後者でいきます。

Telegraf の設定

telegraf.conf に以下を追加しました。

[[inputs.nvidia_smi]]
  #bin_path = "/usr/bin/nvidia-smi"

inputs.nvidia_smi を追加するだけでプラグインが有効になるようです。
bin_pathnvidia-smi のある場所です。
以下のコマンドで調べられます。

$ which nvidia-smi
/usr/bin/nvidia-smi

Linux では通常 /usr/bin/nvidia-smi にあるそうで、その場合は指定しなくてもよいそうです。

docker-compose の設定

Telegraf を動作させている Docker コンテナから nvidia-smi と GPU にアクセスできるように設定します。
例えば、以下のような感じです。

version: '3.5'
services:
  telegraf:
    container_name: telegraf
    image: telegraf
    environment:
      - NVIDIA_VISIBLE_DEVICES=all
      - NVIDIA_DRIVER_CAPABILITIES=all
    deploy:
      resources:
        reservations:
          devices:
            - capabilities: [gpu]
    volumes:
      - ./telegraf.conf:/etc/telegraf/telegraf.conf:ro
      - /usr/bin/nvidia-smi:/usr/bin/nvidia-smi:ro

ホストの /usr/bin/nvidia-smi をコンテナにマウントします。
Docker コンテナでの GPU の使用については以下の記事にも書いているので、参照してください。

Grafana の設定

Docker コンテナを起動したら、Grafana で以下のダッシュボードのテンプレートをインストールします。

これで閲覧できるようになると思ったのですが、HostnameNone しか表示されず、グラフに何も表示されない状態でした。
どうもこのテンプレートが Windows を前提としているようですので、ダッシュボードの設定をちょっと修正しました。

ダッシュボードの設定画面を開き Variables を選択します。
hostname の定義を以下のように変更します。

変更前

SHOW TAG VALUES FROM "win_system" WITH KEY = "host"

変更後

SHOW TAG VALUES FROM system WITH KEY=host

これで以下のようにグラフが表示されるようになりました。

他に CPU UsageMemory Free のメーター表示も Windows 前提となっているようなので、必要なら修正してください。
私は CPU やメモリなどは他のダッシュボードで閲覧しており、ここでは GPU の情報だけで十分だったので、そこまで修正しませんでした。