Я намагаюсь відстежувати процес, який використовує cuda та MPI, чи можна це зробити, щось на зразок команди "top", але це також контролює GPU?
Я намагаюсь відстежувати процес, який використовує cuda та MPI, чи можна це зробити, щось на зразок команди "top", але це також контролює GPU?
Відповіді:
Я вважаю gpustat дуже корисним. In може бути встановлений за допомогою pip install gpustatта друкує розбиття використання процесами чи користувачами.
watch gpustat -cpви можете постійно бачити статистику, але кольорів більше немає. Як це виправити? @Alleo
watch -c. @ Роман Орач, Дякую, це також працювало для мене на redhat 8, коли я отримував помилку через імпорт _curses у python.
watch -c gpustat -cp --color
watch -n 0.5 -c gpustat -cp --color
--watchможливість:gpustat -cp --watch
nvidia-smi -l 1
Це буде циклічно і викликати перегляд щосекунди.
Якщо ви не хочете зберігати минулі сліди циклічного виклику в історії консолі, ви також можете зробити:
watch -n0.1 nvidia-smi
Де 0,1 - інтервал часу, в секундах.
Мені нічого не відомо, що поєднує цю інформацію, але ви можете скористатися nvidia-smiінструментом, щоб отримати необроблені дані, як-от так (спасибі @jmsu за підказку на -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, що уникає заповнення вашого терміналу результатом
Завантажте та встановіть останній стабільний драйвер CUDA (4.2) звідси . У Linux Linux nVidia-smi 295.41 дає вам лише те, що ви хочете. використання 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: В останніх драйверах NVIDIA ця підтримка обмежена картами Tesla.
Іншим корисним підходом до моніторингу є використання psвідфільтрованих процесів, які споживають ваші графічні процесори. Я цим дуже користуюся:
ps f -o user,pgrp,pid,pcpu,pmem,start,time,command -p `lsof -n -w -t /dev/nvidia*`
Це покаже всі процеси, що використовують GPU nvidia, та деякі статистичні дані про них. lsof ...отримує список усіх процесів за допомогою GPU nvidia, що належить поточному користувачеві, та ps -p ...показує psрезультати для цих процесів. ps fпоказує приємне форматування стосунків / ієрархій процесу батько / батько та -oвизначає спеціальне форматування. Це схоже на те, що робити, ps uале додає ідентифікатор групи процесів і видаляє деякі інші поля.
Однією з переваг цього nvidia-smiє те, що він покаже вилки процесів, а також основні процеси, які використовують графічний процесор.
Однак один недолік - це обмеження процесів, що належать користувачеві, який виконує команду. Щоб відкрити його для всіх процесів, що належать будь-якому користувачеві, я додаю sudoдо lsof.
Нарешті, я комбіную його з тим, watchщоб отримувати постійне оновлення. Отже, зрештою, це виглядає так:
watch -n 0.1 'ps f -o user,pgrp,pid,pcpu,pmem,start,time,command -p `sudo lsof -n -w -t /dev/nvidia*`'
Що має вихід:
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не перераховано всі процеси, тому ви закінчуєте свою пам'ять, яку використовують процеси, які не перераховані там. Це головний спосіб я відстежувати і вбивати ці процеси.
pmemдані psвраховують загальну пам’ять GPU, але пам'ять процесора, тому що psне відомо про «Nvidia GPU»
Це може бути не елегантно, але ви можете спробувати
while true; do sleep 2; nvidia-smi; done
Я також спробував метод @Edric, який працює, але я вважаю за краще оригінальний макет nvidia-smi.
nvidia-smi -l 2. Або для запобігання повторного виходу консолі,watch -n 2 'nvidia-smi'
Якщо ви просто хочете знайти процес, який працює на gpu, ви можете просто скористатися такою командою:
lsof /dev/nvidia*
Для мене nvidia-smiі watch -n 1 nvidia-smiцього в більшості випадків вистачає. Іноді nvidia-smiне показує жодного процесу, але пам'ять gpu використовується, тому мені потрібно скористатися вищевказаною командою, щоб знайти процеси.
Є Prometheus GPU Metrics Exporter (PGME), який використовує бінарний файл nvidai-smi. Ви можете спробувати це. Після запуску експортера ви можете отримати доступ до нього за допомогою http: // localhost: 9101 / metrics . Для двох графічних процесорів зразок результату виглядає приблизно так:
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для моніторингу кожного процесу в GPU 0. включаючи обчислювальний режим, використання sm, використання пам'яті, використання кодера, використання декодера.
Ви можете використовувати погляди програми моніторингу з його плагіном моніторингу GPU :
sudo apt-get install -y python-pip; sudo pip install glances[gpu]sudo glancesВін також контролює процесор, IO диска, дисковий простір, мережу та деякі інші речі:
Я створив пакетний файл із наступним кодом у машині Windows, щоб контролювати кожну секунду. Це працює для мене.
:loop
cls
"C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi"
timeout /T 1
goto loop
nvidia-smi exe зазвичай знаходиться в "C: \ Program Files \ NVIDIA Corporation", якщо ви хочете виконати команду лише один раз.