Cuda ve MPI kullanan bir süreci izlemeye çalışıyorum, bunu yapmamın herhangi bir yolu var mı, "top" komutu gibi bir şey ama bu da GPU'yu izliyor mu?
Cuda ve MPI kullanan bir süreci izlemeye çalışıyorum, bunu yapmamın herhangi bir yolu var mı, "top" komutu gibi bir şey ama bu da GPU'yu izliyor mu?
Yanıtlar:
Gpustat'ı çok faydalı buluyorum . İle birlikte yüklenebilir pip install gpustat
ve işlemler veya kullanıcılar tarafından kullanım dökümünü yazdırır.
watch gpustat -cp
istatistikleri sürekli olarak görebilirsiniz ama renkler kayboldu. Bunu nasıl düzeltirsin? @Alleo
watch -c
. @Roman Orac, Teşekkürler, bu benim için de _curses'i python'a aktarırken bir hata aldığımda redhat 8'de çalıştı.
watch -c gpustat -cp --color
watch -n 0.5 -c gpustat -cp --color
--watch
seçeneği var:gpustat -cp --watch
nvidia-smi -l 1
Bu, her saniye döngüye girecek ve görünümü çağıracaktır.
Konsol geçmişinde döngülü aramanın geçmiş izlerini tutmak istemiyorsanız, şunları da yapabilirsiniz:
watch -n0.1 nvidia-smi
0.1 saniye cinsinden zaman aralığıdır.
Bu bilgileri birleştiren herhangi bir şey bilmiyorum, ancak nvidia-smi
aracı ham verileri elde etmek için kullanabilirsiniz , örneğin (-l'deki ipucu için @jmsu'ya teşekkürler):
$ 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
Terminalinizi çıktı ile doldurmaktan kaçınan tercih ederim
En son kararlı CUDA sürücüsünü (4.2) buradan indirin ve yükleyin . Linux'ta, nVidia-smi 295.41 size tam istediğinizi verir. kullanım 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 |
+-----------------------------------------------------------------------------+
DÜZENLEME: En son NVIDIA sürücülerinde bu destek Tesla Kartlarla sınırlıdır.
Diğer bir yararlı izleme yaklaşımı, ps
GPU'larınızı tüketen işlemlerde filtrelenmiş kullanmaktır . Bunu çok kullanıyorum:
ps f -o user,pgrp,pid,pcpu,pmem,start,time,command -p `lsof -n -w -t /dev/nvidia*`
Bu, tüm nvidia GPU kullanan işlemlerini ve bunlarla ilgili bazı istatistikleri gösterecektir. lsof ...
mevcut kullanıcıya ait bir nvidia GPU kullanarak tüm işlemlerin bir listesini alır ve bu işlemlerin sonuçlarını ps -p ...
gösterir ps
. ps f
alt / üst süreç ilişkileri / hiyerarşileri için güzel bir biçimlendirme gösterir ve -o
özel bir biçimlendirme belirtir. Bu sadece yapmaya benzer, ps u
ancak işlem grubu kimliğini ekler ve diğer bazı alanları kaldırır.
Bunun bir avantajı, nvidia-smi
işlem çatallarının yanı sıra GPU'yu kullanan ana işlemleri göstermesidir.
Bununla birlikte, bir dezavantajı, komutu yürüten kullanıcının sahip olduğu işlemlerle sınırlı olmasıdır. Herhangi bir kullanıcının sahip olduğu tüm süreçleri açmak sudo
için lsof
,.
Son olarak, watch
sürekli bir güncelleme almak için onu birleştiriyorum . Yani sonunda şöyle görünüyor:
watch -n 0.1 'ps f -o user,pgrp,pid,pcpu,pmem,start,time,command -p `sudo lsof -n -w -t /dev/nvidia*`'
Hangi çıktıya sahip:
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
:nvidia-smi --query-compute-apps=pid --format=csv,noheader
nvidia-smi
tüm işlemleri listelemez, bu nedenle belleğiniz burada listelenmeyen işlemler tarafından kullanılır. Bu süreçleri izleyip sonlandırabilmemin ana yolu budur.
pmem
tarafından verilenin ps
GPU'nun toplam belleğini hesaba kattığını düşünmüyorum, ancak CPU'nunkini çünkü ps
"Nvidia GPU" farkında değil
Bu zarif olmayabilir ama deneyebilirsin
while true; do sleep 2; nvidia-smi; done
Yöntemi @Edric tarafından da denedim, işe yarıyor, ancak orijinal düzenini tercih ediyorum nvidia-smi
.
nvidia-smi -l 2
. Veya tekrarlanan konsol çıkışını önlemek içinwatch -n 2 'nvidia-smi'
Sadece gpu'da çalışan işlemi bulmak istiyorsanız, aşağıdaki komutu kullanabilirsiniz:
lsof /dev/nvidia*
Benim için nvidia-smi
ve watch -n 1 nvidia-smi
çoğu durumda yeterli. Bazen nvidia-smi
hiçbir işlem gösterilmez, ancak gpu belleği tükenir, bu yüzden işlemleri bulmak için yukarıdaki komutu kullanmam gerekiyor.
Orada Prometheus GPU Ölçümleri İhracatçı (PGME) nvidai-smi ikili yararlanır. Bunu deneyebilirsin. Dışa aktarıcıyı çalıştırdıktan sonra, http: // localhost: 9101 / metrics aracılığıyla ona erişebilirsiniz . İki GPU için örnek sonuç şuna benzer:
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
nvidia-smi pmon -i 0
Hesaplama modu, sm kullanımı, bellek kullanımı, kodlayıcı kullanımı, kod çözücü kullanımı dahil olmak üzere GPU 0'daki her işlemi izlemek için kullanabilirsiniz .
Sen izleme programı kullanabilirsiniz bakışlar onun ile izleme GPU eklentisini:
sudo apt-get install -y python-pip; sudo pip install glances[gpu]
sudo glances
Ayrıca CPU, disk IO, disk alanı, ağ ve diğer birkaç şeyi de izler:
Her saniyeyi izlemek için bir Windows makinesinde aşağıdaki kodla bir toplu iş dosyası oluşturdum. Benim için çalışıyor.
:loop
cls
"C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi"
timeout /T 1
goto loop
Komutu yalnızca bir kez çalıştırmak istiyorsanız, nvidia-smi exe genellikle "C: \ Program Files \ NVIDIA Corporation" konumunda bulunur.