Saya mencoba memantau proses yang menggunakan cuda dan MPI, adakah cara saya bisa melakukan ini, seperti perintah "atas" tetapi itu juga memantau GPU?
Saya mencoba memantau proses yang menggunakan cuda dan MPI, adakah cara saya bisa melakukan ini, seperti perintah "atas" tetapi itu juga memantau GPU?
Jawaban:
Menurut saya gpustat sangat berguna. In dapat diinstal dengan pip install gpustat
, dan mencetak rincian penggunaan oleh proses atau pengguna.
watch gpustat -cp
Anda dapat melihat statistik terus menerus tetapi warna hilang. Bagaimana Anda memperbaikinya? @Alleo
watch -c
. @Roman Orac, Terima kasih, ini juga berfungsi untuk saya di redhat 8 ketika saya mendapatkan beberapa kesalahan karena mengimpor _curses di python.
watch -c gpustat -cp --color
watch -n 0.5 -c gpustat -cp --color
--watch
opsi:gpustat -cp --watch
nvidia-smi -l 1
Ini akan memutar dan memanggil tampilan setiap detik.
Jika Anda tidak ingin menyimpan jejak panggilan berulang di riwayat konsol, Anda juga dapat melakukan:
watch -n0.1 nvidia-smi
Di mana 0,1 adalah interval waktu, dalam detik.
Saya tidak mengetahui apa pun yang menggabungkan informasi ini, tetapi Anda dapat menggunakan nvidia-smi
alat tersebut untuk mendapatkan data mentah, seperti itu (terima kasih kepada @jmsu untuk tip tentang -l):
$ nvidia-smi -q -g 0 -d UTILIZATION -l
==============NVSMI LOG==============
Timestamp : Tue Nov 22 11:50:05 2011
Driver Version : 275.19
Attached GPUs : 2
GPU 0:1:0
Utilization
Gpu : 0 %
Memory : 0 %
watch -n 0.5 nvidia-smi
, yang menghindari mengisi terminal Anda dengan output
Unduh dan instal driver CUDA stabil terbaru (4.2) dari sini . Di linux, nVidia-smi 295.41 memberikan apa yang Anda inginkan. gunakan nvidia-smi
:
[root@localhost release]# nvidia-smi
Wed Sep 26 23:16:16 2012
+------------------------------------------------------+
| NVIDIA-SMI 3.295.41 Driver Version: 295.41 |
|-------------------------------+----------------------+----------------------+
| Nb. Name | Bus Id Disp. | Volatile ECC SB / DB |
| Fan Temp Power Usage /Cap | Memory Usage | GPU Util. Compute M. |
|===============================+======================+======================|
| 0. Tesla C2050 | 0000:05:00.0 On | 0 0 |
| 30% 62 C P0 N/A / N/A | 3% 70MB / 2687MB | 44% Default |
|-------------------------------+----------------------+----------------------|
| Compute processes: GPU Memory |
| GPU PID Process name Usage |
|=============================================================================|
| 0. 7336 ./align 61MB |
+-----------------------------------------------------------------------------+
EDIT: Di driver NVIDIA terbaru, dukungan ini terbatas pada Tesla Cards.
Pendekatan pemantauan berguna lainnya adalah dengan menggunakan ps
proses yang difilter yang menggunakan GPU Anda. Saya sering menggunakan yang ini:
ps f -o user,pgrp,pid,pcpu,pmem,start,time,command -p `lsof -n -w -t /dev/nvidia*`
Itu akan menunjukkan semua proses yang menggunakan GPU nvidia dan beberapa statistik tentangnya. lsof ...
mengambil daftar semua proses menggunakan nvidia GPU yang dimiliki oleh pengguna saat ini, dan ps -p ...
menampilkan ps
hasil untuk proses tersebut. ps f
menunjukkan pemformatan yang bagus untuk hubungan / hierarki proses anak / orang tua, dan -o
menetapkan pemformatan kustom. Yang itu mirip dengan hanya melakukanps u
tetapi menambahkan ID grup proses dan menghapus beberapa bidang lainnya.
Satu keuntungan dari ini nvidia-smi
adalah bahwa itu akan menampilkan garpu proses serta proses utama yang menggunakan GPU.
Namun, satu kelemahannya adalah terbatas pada proses yang dimiliki oleh pengguna yang menjalankan perintah. Untuk membukanya ke semua proses yang dimiliki oleh setiap pengguna, saya menambahkan sudo
sebelumlsof
.
Terakhir, saya menggabungkannya dengan watch
untuk mendapatkan pembaruan berkelanjutan. Jadi, pada akhirnya, ini terlihat seperti:
watch -n 0.1 'ps f -o user,pgrp,pid,pcpu,pmem,start,time,command -p `sudo lsof -n -w -t /dev/nvidia*`'
Yang memiliki keluaran seperti:
Every 0.1s: ps f -o user,pgrp,pid,pcpu,pmem,start,time,command -p `sudo lsof -n -w -t /dev/nvi... Mon Jun 6 14:03:20 2016
USER PGRP PID %CPU %MEM STARTED TIME COMMAND
grisait+ 27294 50934 0.0 0.1 Jun 02 00:01:40 /opt/google/chrome/chrome --type=gpu-process --channel=50877.0.2015482623
grisait+ 27294 50941 0.0 0.0 Jun 02 00:00:00 \_ /opt/google/chrome/chrome --type=gpu-broker
grisait+ 53596 53596 36.6 1.1 13:47:06 00:05:57 python -u process_examples.py
grisait+ 53596 33428 6.9 0.5 14:02:09 00:00:04 \_ python -u process_examples.py
grisait+ 53596 33773 7.5 0.5 14:02:19 00:00:04 \_ python -u process_examples.py
grisait+ 53596 34174 5.0 0.5 14:02:30 00:00:02 \_ python -u process_examples.py
grisait+ 28205 28205 905 1.5 13:30:39 04:56:09 python -u train.py
grisait+ 28205 28387 5.8 0.4 13:30:49 00:01:53 \_ python -u train.py
grisait+ 28205 28388 5.3 0.4 13:30:49 00:01:45 \_ python -u train.py
grisait+ 28205 28389 4.5 0.4 13:30:49 00:01:29 \_ python -u train.py
grisait+ 28205 28390 4.5 0.4 13:30:49 00:01:28 \_ python -u train.py
grisait+ 28205 28391 4.8 0.4 13:30:49 00:01:34 \_ python -u train.py
sudo
seperti ini:nvidia-smi --query-compute-apps=pid --format=csv,noheader
nvidia-smi
tidak mencantumkan semua proses, jadi Anda berakhir dengan memori yang digunakan oleh proses yang tidak terdaftar di sana. Ini adalah cara utama saya dapat melacak dan menghentikan proses tersebut.
pmem
diberikan oleh ps
memperhitungkan total memori GPU tetapi dari CPU karena ps
tidak mengetahui "Nvidia GPU"
Ini mungkin tidak elegan, tetapi Anda bisa mencobanya
while true; do sleep 2; nvidia-smi; done
Saya juga mencoba metode oleh @Edric, yang berfungsi, tetapi saya lebih suka tata letak asli nvidia-smi
.
nvidia-smi -l 2
. Atau untuk mencegah keluaran konsol berulang,watch -n 2 'nvidia-smi'
Jika Anda hanya ingin mencari proses yang berjalan di gpu, Anda cukup menggunakan perintah berikut:
lsof /dev/nvidia*
Bagi saya nvidia-smi
dan watch -n 1 nvidia-smi
cukup dalam banyak kasus. Kadang-kadang nvidia-smi
tidak menunjukkan proses tetapi memori gpu digunakan jadi saya perlu menggunakan perintah di atas untuk menemukan proses.
Ada Prometheus GPU Metrics Exporter (PGME) yang memanfaatkan biner nvidai-smi. Anda dapat mencobanya. Setelah Anda menjalankan pengekspor, Anda dapat mengaksesnya melalui http: // localhost: 9101 / metrics . Untuk dua GPU, hasil sampel terlihat seperti ini:
temperature_gpu{gpu="TITAN X (Pascal)[0]"} 41
utilization_gpu{gpu="TITAN X (Pascal)[0]"} 0
utilization_memory{gpu="TITAN X (Pascal)[0]"} 0
memory_total{gpu="TITAN X (Pascal)[0]"} 12189
memory_free{gpu="TITAN X (Pascal)[0]"} 12189
memory_used{gpu="TITAN X (Pascal)[0]"} 0
temperature_gpu{gpu="TITAN X (Pascal)[1]"} 78
utilization_gpu{gpu="TITAN X (Pascal)[1]"} 95
utilization_memory{gpu="TITAN X (Pascal)[1]"} 59
memory_total{gpu="TITAN X (Pascal)[1]"} 12189
memory_free{gpu="TITAN X (Pascal)[1]"} 1738
memory_used{gpu="TITAN X (Pascal)[1]"} 10451
Anda dapat menggunakan nvidia-smi pmon -i 0
untuk memantau setiap proses di GPU 0. termasuk mode komputasi, penggunaan sm, penggunaan memori, penggunaan encoder, penggunaan decoder.
Anda dapat menggunakan program pemantauan sekilas dengan plug-in pemantauan GPU :
sudo apt-get install -y python-pip; sudo pip install glances[gpu]
sudo glances
Itu juga memonitor CPU, disk IO, ruang disk, jaringan, dan beberapa hal lainnya:
Saya membuat file batch dengan kode berikut di mesin windows untuk memantau setiap detik. Ini berhasil untuk saya.
:loop
cls
"C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi"
timeout /T 1
goto loop
nvidia-smi exe biasanya terletak di "C: \ Program Files \ NVIDIA Corporation" jika Anda ingin menjalankan perintah hanya sekali.