
AMDのGPUを用いて行列演算・機械学習を行えることを以前の記事(AMDのGPUでディープラーニングのフレームワークの動作を検証、 AMDのGPUでCuPyを動かすにて紹介し、ROCmという環境の上で、TensorFlow, PyTorch, CuPyなどさまざまなライブラリが動くことを確認しました。
GPU演算を行うプログラムを実行する際は、本当にGPUを認識しているのか、あるいはGPU使用率が低い状態ではないのかなど、GPUの状態を確認することが多いと思います。NVIDIA社のGPUを扱うときは、おなじみのnvidia-smiコマンドを用いることでGPUの状態を確認できます。
しかし、AMD社のGPUではnvidia-smiはもちろん使うことができません。そこで本記事では、AMD社のGPUを扱う際、GPUの状態を確認するためのコマンドrocm-smiについて紹介します。
前提
ROCm 4.0.1 が Ubuntu18.04にインストール済みであることを前提に解説をします。Vega 10系のGPUが4枚搭載されたマシンを使用します。
バージョンやOS・GPUの差異により実行結果に違いがある可能性があることにご注意ください。
rocm-smiの使い方
詳細な公式ドキュメントはこちらにあります。今回は、この中から開発者としてよく使用する使い方をピックアップして紹介します。
前準備
ROCmがインストールされているマシンでは、rocm-smiを実行することが可能です。rocm-smiの実態は/opt/rocm/bin/rocm-smiにあるため、もしパスを通していない方は/opt/rocm/binにパスを通しておくと便利です。
基本的な使い方
特にオプションなしで実行するのが基本的な使用方法です。実行してみると以下のように表示されます。
$ rocm-smi
======================= ROCm System Management Interface =======================
================================= Concise Info =================================
GPU Temp AvgPwr SCLK MCLK Fan Perf PwrCap VRAM% GPU%
0 36.0c 3.0W 852Mhz 167Mhz 1.96% auto 165.0W 0% 0%
1 39.0c 3.0W 852Mhz 167Mhz 0.78% auto 165.0W 0% 0%
2 38.0c 3.0W 852Mhz 167Mhz 0.78% auto 165.0W 0% 0%
3 45.0c 17.0W 1269Mhz 167Mhz 0.78% auto 165.0W 0% 0%
================================================================================
============================= End of ROCm SMI Log ==============================
GPUが0〜3まで認識できていることから、4枚のGPUをROCmが認識できていることがわかります。
そして、それらのGPUに関する状態が記載されています。一番右のGPU%でGPU使用率を確認できるため、今動かしているスクリプトが上手くGPUを使えているかどうかを確認するのに使うことができます。
GPUカードの種類を確認する
–showproductnameオプションを使うと、どのGPU番号にどのカードがささっているのかを確認できます。特に、ヘテロな環境ではこのコマンドが役立つかもしれません。
$ rocm-smi –showproductname
======================= ROCm System Management Interface =======================
================================= Product Info =================================
GPU[0] : Card series: Vega 10 XT [Radeon RX Vega 64]
GPU[0] : Card model: 0x3681
GPU[0] : Card vendor: Advanced Micro Devices, Inc. [AMD/ATI]
GPU[0] : Card SKU: xxx
GPU[1] : Card series: Vega 10 XT [Radeon RX Vega 64]
GPU[1] : Card model: 0x3681
GPU[1] : Card vendor: Advanced Micro Devices, Inc. [AMD/ATI]
GPU[1] : Card SKU: xxx
GPU[2] : Card series: Vega 10 XT [Radeon RX Vega 64]
GPU[2] : Card model: 0x3681
GPU[2] : Card vendor: Advanced Micro Devices, Inc. [AMD/ATI]
GPU[2] : Card SKU: xxx
GPU[3] : Card series: Vega 10 XT [Radeon RX Vega 64]
GPU[3] : Card model: 0x3681
GPU[3] : Card vendor: Advanced Micro Devices, Inc. [AMD/ATI]
GPU[3] : Card SKU: xxx
================================================================================
============================= End of ROCm SMI Log ==============================
VBIOSのバージョンを確認する
-vオプションを使うとVBIOSのバージョンを確認できます。
$ rocm-smi -v
======================= ROCm System Management Interface =======================
==================================== VBIOS =====================================
GPU[0] : VBIOS version: xxx-xxx-xxx
GPU[1] : VBIOS version: xxx-xxx-xxx
GPU[2] : VBIOS version: xxx-xxx-xxx
GPU[3] : VBIOS version: xxx-xxx-xxx
================================================================================
============================= End of ROCm SMI Log ==============================
GPUを実行しているプロセスを確認する
rocm-smi –showpidsおよびrocm-smi –showpidgpusコマンドを活用すると、どのプロセスがどのGPUを使用しているのかを確認することができます。
–showpidsオプションを使用すると、PID / プロセス名 / 使用しているGPU数などを確認できます。
$ rocm-smi –showpids
======================= ROCm System Management Interface =======================
================================ KFD Processes =================================
KFD process information:
PID PROCESS NAME GPU(s) VRAM USED SDMA USED CU OCCUPANCY
2733 python 1 127934464 0 0
================================================================================
============================= End of ROCm SMI Log ==============================
–showpidgpusオプションを使用すると、使用しているGPUのIDを確認できます。
$ rocm-smi –showpidgpus
======================= ROCm System Management Interface =======================
============================= GPUs Indexed by PID ==============================
PID 2733 is using 1 DRM device(s):
3
================================================================================
============================= End of ROCm SMI Log ==============================
複数プロセスを同時に動かしているときのデバッグに、これらの情報をご活用頂けるかと思います。
まとめ
rocm-smiを活用することにより、ROCmがGPUをどのように認識しているのかを確認し、よりパフォーマンスの高いプログラムを作成できることと思います。
ROCm環境でGPUを扱うプログラミングをする際は、ぜひ活用してみてください。