以下の内容はhttps://uepon.hatenadiary.com/entry/2024/10/21/142904より取得しました。


UbuntuでGPUの動きをサクッと確認!topコマンド風モニタリングツール解説(nvtop/nvitop)

仕事関連でOllama関連の作業を少しお休みしていたのですが、そろそろ開始するかということで触り始めていたのですが、GTX1070 mobileではあるもののGPUありPCでのLLMの動作が遅く感じていました。なんでかなと思っていたのですが、わからず進めていました。ようやくその原因がDockerGPUの使用をONにしていなかったということが判明しました。なんと情けない。

とはいうもののGPUを使用しているかどうかをリアルタイムで見る手段を自分のなかで確立していなかったというのが一番の原因かもしれません。Windowsであればタスクマネージャーを使用すればリアルタイムに負荷の確認はできますが、Ubuntuじゃどうするのかということになります。

NVIDIAのデフォルトツール(nvidia-smi

NVIDIA GPUのデフォルトツールであるnvidia-smiを使用するのが一番基本的かと思います。コマンドラインツールなので可視化にはちょっと遠い感じですが、使用状況を確認するだけであればいいかなと思います。ピンポイントの情報を得る形なので、時系列に状態を追うには少し工夫がいります。

nvidia-smi はNVIDIA System Management Interface (nvidia-smi/NVSMI) は NVIDIA GPUバイスの管理・モニタリングを行うコマンドラインユーティリティーです。

オプションスイッチを使用すれば、ログ出力はできます。このログを解析して動作を確認出来ると思います。少しわかりにくい表示かなと思います。

CSV形式で1秒毎にGPU情報を表示する

$ nvidia-smi \
  --query-gpu=timestamp,name,utilization.gpu,utilization.memory,memory.used,memory.free,memory.used\
  --format=csv \
  -l 1

CSV形式で1秒毎にGPU情報を/var/log/gpu.logに出力する

$ sudo nvidia-smi \
  --query-gpu=timestamp,name,utilization.gpu,utilization.memory,memory.used,memory.free \
  --format=csv -l 1 \
  -f /var/log/gpu.log

(h)topコマンドのような形で表示する

nvidia-smiでは時間経過とともに見やすい表示ができない難点がありました。できればtopコマンドhtopコマンドのようにリアルタイムに表示するアプリがないか調べてみました。

(1)NVTOP

1つ目はNVTOPとなります。

ドキュメントには以下のように書かれています。

NVTOPはNeat Videocard TOPの略で、GPUアクセラレータ用の(h)topライクなタスクモニターです。 複数のGPUを扱うことができ、htopでおなじみの方法でGPUに関する情報を表示します。 現在サポートされているベンダは、AMD (Linux amdgpuドライバ)、Apple (限定的なM1 & M2サポート)、Huawei (Ascend)、Intel (Linux i915またはXeドライバ)、NVIDIA (Linuxプロプライエタリダイバ)、Qualcomm Adreno (Linux MSMドライバ)です。

github.com

NVTOPは複数の種類のGPUに対応しています。そのため、CPUに内蔵されたグラフィック機能も計測対象となり表示されます。

NVTOPのインストール

NVTOPGitHubからビルドを行ってもよいのですが、apt installコマンドからもインストールを行うことが出来ます。

$ sudo apt update
$ sudo apt install nvtop

NVTOPの起動

NVTOPnvtopコマンドを実行することで起動出来ます。実行時にサポートが切れているというようなメッセージが表示されていますが、実行にはあまり影響は無いようです。

実行するとtopコマンドなどと同様にGPU関連情報を常に表示してくれます。また、状態のグラフ化もおこなってくれます。

$ nvtop

(2)nvitop

先ほどのコマンドとかなりにていますがnvitopになります(vとtの間にiが含まれています)。ドキュメントには以下のように書かれています。先ほどのアプリとの大きな差は、NVIDIA GPUのみに対応しているというところです。

nvitopは、インタラクティブNVIDIAバイスおよびプロセスモニタリングツールです。 カラフルで有益なインターフェイスを持ち、デバイスとプロセスのステータスを継続的に更新します。 リソースモニターとして、ツリービュー、環境変数表示、プロセスフィルタリング、プロセスメトリックスモニタリングなど、多くの機能とオプションが含まれています。 さらに、本パッケージには、ディープラーニング研究者向けのCUDAデバイス選択ツールnviselも同梱されている。 また、開発者が独自の監視ツールを作成できる便利なAPIも提供されている。 詳細については、More than a Monitorのセクションと、https://nvitop.readthedocs.ioAPIリファレンスを参照してください。

github.com

このアプリはPythonから前述のnvidia-smiの結果情報を引き出して可視化しているようです。そのため、NVIDIAのドライバがインストールされていないと動作しません。

nvitopのインストール

インストールは2つの方法があり、1つはapt installコマンドを使用する方法、もう1つはPythonのアプリなのでpipxを使用した方法になります。後者はもちろんPythonの環境が必要になります。※pipxは隔離された仮想環境にPython製アプリをインストールする仕組みです。

参考

uepon.hatenadiary.com

(1)apt installコマンドを使用してインストール

$ sudo apt update

# nvitopのインストール
$ sudo apt install nvitop

apt installコマンドを使用した場合にはこれで終了です。

(2)pipxを使用したインストール

$ sudo apt update

# pipxのインストールが必要であれば
$ sudo apt install pipx

# nvitop実行(初回のみインストール後に実行)
$ pipx run nvitop

nvitopの実行

(1)apt intallコマンドを使用しての実行

$ nvitop

実行するとこちらもtopコマンドなどと同様にGPU関連情報を常に表示してくれます。また、状態のグラフ化もおこなってくれます。

(2)pipxを使用した場合の実行

pipxを使用している場合にはやや面倒な形で実行することになりますが、bashAlias登録を行うことでこの手間も減らす事ができます。

$ pipx run nvitop

# bash環境へ実行するAliasを追加(推奨)
$ echo 'alias nvitop="pipx run nvitop"' >> ~/.bashrc

# .bashrcにAlias登録を行った場合にはnvitopのみで実行可能
$ nvitop

実行するとこちらもtopコマンドなどと同様にGPU関連情報を常に表示してくれます。また、状態のグラフ化もおこなってくれます。

おわりに

Ubuntu上でGPUCUDAの動作確認する手段が分かっていなかったので調べてみました。 個人的にはnvtopが一番表示的には見やすいこと、NVIDIAだけでなくAMDなどのGPUについても確認ができることからこちらがおすすめかなと思います。とはいえ、現状ではLLMの動作などを考えるとnvitopでも大きく差はなさそうです。




以上の内容はhttps://uepon.hatenadiary.com/entry/2024/10/21/142904より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14