Edited at

【Linux】GPU逆引きコマンド


nvidiaGPU便利コマンド関連

GPUでやりたい時、GPUの動作がおかしい時にやるコマンド。

ディープラーニングの学習用、仮想通貨のマイニングなどのGPU使用などを念頭にしてます。

コマンドは基本的にLinuxで使える。


GPUタスクをモニタしたい


nivida-smi -l

でメモリ使用率、温度、プロセスなどが出ます。

-l オプションをなくすと一度だけ表示させます。

+-----------------------------------------------------------------------------+

| NVIDIA-SMI 410.48 Driver Version: 410.48 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Tesla P100-PCIE... Off | 00000000:04:00.0 Off | 0 |
| N/A 52C P0 76W / 250W | 7023MiB / 12198MiB | 21% Default |
+-------------------------------+----------------------+----------------------+
| 1 Tesla P100-PCIE... Off | 00000000:82:00.0 Off | 0 |
| N/A 39C P0 75W / 250W | 1333MiB / 12198MiB | 67% Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 0 9964 C python 431MiB |
| 1 22430 C python 1323MiB |
+-----------------------------------------------------------------------------+


学習に使用するGPUを指定したい

マルチGPUを利用し学習するときはコマンドライン上で使用するGPUを指定する。

指定を行わないと自動的に全てのGPUを掴んでしまい、迷惑をかけることも。

ちゃんと使うGPUは明示的にした方がベター。


bash shellの場合


# GPU0,1両方を利用
export CUDA_VISIBLE_DEVICES=0,1
# 学習開始
python train.py
# GPU0,1を利用し学習が行われる

#GPU0のみ利用
export CUDA_VISIBLE_DEVICES=0
# 学習開始
python train.py
# GPU0のみで学習が行われる


csh系の場合


# GPU0,1両方を利用
setenv CUDA_VISIBLE_DEVICES 0,1
# 学習開始
python train.py
# GPU0,1を利用し学習が行われる

#GPU0のみ利用
setenv CUDA_VISIBLE_DEVICES 0
# 学習開始
python train.py
# GPU0のみで学習が行われる


GPU、OSがよく落ちてしまう場合

冷却性能不足などでサーバが落ちてしまうことがある場合、GPUに電力リミットをつけると良い。


>nvidia-smi
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 410.48 Driver Version: 410.48 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Tesla P100-PCIE... Off | 00000000:04:00.0 Off | 0 |
| N/A 52C P0 76W / 250W | 7023MiB / 12198MiB | 21% Default |
+-------------------------------+----------------------+----------------------+
| 1 Tesla P100-PCIE... Off | 00000000:82:00.0 Off | 0 |
| N/A 39C P0 75W / 250W | 1333MiB / 12198MiB | 67% Default |
+-------------------------------+----------------------+----------------------+

200Wに電力制限してみる。


# permuteモード。再起動するまで設定を保持する
>sudo nvidia-smi -pm 1
>sudo nvidia-smi -pl 200
>nvidia-smi
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 410.48 Driver Version: 410.48 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Tesla P100-PCIE... Off | 00000000:04:00.0 Off | 0 |
| N/A 52C P0 76W / 200W | 7023MiB / 12198MiB | 21% Default |
+-------------------------------+----------------------+----------------------+
| 1 Tesla P100-PCIE... Off | 00000000:82:00.0 Off | 0 |
| N/A 39C P0 75W / 200W | 1333MiB / 12198MiB | 67% Default |
+-------------------------------+----------------------+----------------------+

無事に電力リミットが200Wになったことを確認。

50W下げた程度ではパフォーマンスはあまり変わらないのでサーバが不安定なときにおすすめ。

これをやることで動作が安定になる場合も多い(本当は冷却機能や電源を拡充したほうがいいが。。)


GPUをリセットしたいリセット


# GPU0をリセット
sudo nvidia-smi --gpu-reset -i 0


どのユーザがGPUを利用しているか調べたい


sudo fuser -v /dev/nvidia*