perintah teratas untuk GPU menggunakan CUDA

127

Saya mencoba memantau proses yang menggunakan cuda dan MPI, adakah cara saya bisa melakukan ini, seperti perintah "atas" tetapi itu juga memantau GPU?

natorro
sumber
2
Ada juga nvtop github.com/Syllo/nvtop
konvas
"nvidia-smi pmon -i 0" dapat memantau semua proses yang berjalan pada nvidia GPU 0
changqi.xia

Jawaban:

84

Menurut saya gpustat sangat berguna. In dapat diinstal dengan pip install gpustat, dan mencetak rincian penggunaan oleh proses atau pengguna.

masukkan deskripsi gambar di sini

Alleo
sumber
4
setelah Anda meletakkan watch gpustat -cpAnda dapat melihat statistik terus menerus tetapi warna hilang. Bagaimana Anda memperbaikinya? @Alleo
Abimanyuryan
1
@AbhimanyuAryan digunakan watch -c. @Roman Orac, Terima kasih, ini juga berfungsi untuk saya di redhat 8 ketika saya mendapatkan beberapa kesalahan karena mengimpor _curses di python.
Bobak Hashemi
4
watch -c gpustat -cp --color
Lee Netherton
1
watch -n 0.5 -c gpustat -cp --color
Gabriel Romon
4
gpustat sekarang memiliki --watchopsi:gpustat -cp --watch
jayelm
139

Untuk mendapatkan wawasan waktu nyata tentang sumber daya yang digunakan, lakukan:

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.

masukkan deskripsi gambar di sini

Guillaume Chevalier
sumber
2
Menanyakan kartu setiap 0,1 detik? Apakah itu akan menyebabkan beban pada kartu? Plus, dengan menggunakan jam tangan, Anda memulai proses baru setiap 0,1 detik.
Mick T
@MickT Apakah ini masalah besar? Karena Nvidia-smi memiliki lingkaran bangunan ini! Apakah perintah "watch" sangat berbeda dengan nvidia-smi -l?
Mohammad Javad
Mungkin saja, saya telah melihat kartu kelas bawah memiliki penguncian yang aneh dan saya pikir itu karena terlalu banyak pengguna yang menjalankan nvidia-smi di kartu. Saya pikir menggunakan 'nvidia-smi -l' adalah cara yang lebih baik untuk digunakan karena Anda tidak selalu melakukan proses baru. Juga, memeriksa kartu setiap 0,1 detik berlebihan, saya akan melakukan setiap detik ketika saya mencoba men-debug masalah, jika tidak saya lakukan setiap 5 menit untuk memantau kinerja. Saya harap itu membantu! :)
Mick T
@Gulzar ya, itu dia.
TrostAft
83

Saya tidak mengetahui apa pun yang menggabungkan informasi ini, tetapi Anda dapat menggunakan nvidia-smialat 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 %
Edric
sumber
4
Saya pikir jika Anda menambahkan -l, Anda membuatnya memperbarui secara terus menerus secara efektif memantau penggunaan GPU dan memori.
jmsu
6
Bagaimana jika ketika saya menjalankannya utilizacion GPU hanya mengatakan N / A ??
natorro
3
@natorro Sepertinya nVidia menjatuhkan dukungan untuk beberapa kartu. Periksa tautan ini forums.nvidia.com/index.php?showtopic=205165
jmsu
29
Saya lebih suka watch -n 0.5 nvidia-smi, yang menghindari mengisi terminal Anda dengan output
ali_m
nvidia-smi pmon -i 0
changqi.xia
19

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.

lashgar
sumber
18

Gunakan argumen "--query-compute-apps ="

nvidia-smi --query-compute-apps=pid,process_name,used_memory --format=csv

untuk bantuan lebih lanjut, silakan ikuti

nvidia-smi --help-query-compute-app
Deepak
sumber
17

Cukup gunakan watch nvidia-smi, ini akan menampilkan pesan dengan interval 2s secara default.

Misalnya seperti gambar di bawah ini:

masukkan deskripsi gambar di sini

Anda juga dapat menggunakan watch -n 5 nvidia-smi(interval -n 5 kali 5s).

Jayhello
sumber
16

Pendekatan pemantauan berguna lainnya adalah dengan menggunakan psproses 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 pshasil untuk proses tersebut. ps fmenunjukkan pemformatan yang bagus untuk hubungan / hierarki proses anak / orang tua, dan -omenetapkan 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 sudosebelumlsof .

Terakhir, saya menggabungkannya dengan watchuntuk 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
grisaitis
sumber
2
Anda juga bisa mendapatkan PID dari program komputasi yang menempati GPU dari semua pengguna tanpa sudoseperti ini:nvidia-smi --query-compute-apps=pid --format=csv,noheader
Lenar Hoyt
1
Terkadang nvidia-smitidak 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.
rand
1
@grisaitis Hati-hati, saya tidak berpikir yang pmemdiberikan oleh psmemperhitungkan total memori GPU tetapi dari CPU karena pstidak mengetahui "Nvidia GPU"
SebMa
10

Anda dapat mencoba nvtop, yang mirip dengan alat yang banyak digunakan htoptetapi untuk GPU NVIDIA. Berikut adalah tangkapan layarnya nvtopsaat beraksi.

Tangkapan layar nvtop beraksi

Rodrigo
sumber
3

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.

skyuuka
sumber
12
Atau Anda bisa melakukannya nvidia-smi -l 2. Atau untuk mencegah keluaran konsol berulang,watch -n 2 'nvidia-smi'
grisaitis
3

Jika Anda hanya ingin mencari proses yang berjalan di gpu, Anda cukup menggunakan perintah berikut:

lsof /dev/nvidia*

Bagi saya nvidia-smidan watch -n 1 nvidia-smicukup dalam banyak kasus. Kadang-kadang nvidia-smitidak menunjukkan proses tetapi memori gpu digunakan jadi saya perlu menggunakan perintah di atas untuk menemukan proses.

JasonWayne
sumber
2

Di Linux Mint, dan kemungkinan besar Ubuntu, Anda dapat mencoba "nvidia-smi --loop = 1"

Ebram
sumber
0

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
Abu Shoeb
sumber
0

Anda dapat menggunakan nvidia-smi pmon -i 0untuk memantau setiap proses di GPU 0. termasuk mode komputasi, penggunaan sm, penggunaan memori, penggunaan encoder, penggunaan decoder.

changqi.xia
sumber
0

Anda dapat menggunakan program pemantauan sekilas dengan plug-in pemantauan GPU :

  • open source
  • untuk memasang: sudo apt-get install -y python-pip; sudo pip install glances[gpu]
  • peluncuran: sudo glances

masukkan deskripsi gambar di sini

Itu juga memonitor CPU, disk IO, ruang disk, jaringan, dan beberapa hal lainnya:

masukkan deskripsi gambar di sini

Franck Dernoncourt
sumber
0

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.

Karthik NG
sumber