топ команда для використання графічного процесора CUDA


127

Я намагаюсь відстежувати процес, який використовує cuda та MPI, чи можна це зробити, щось на зразок команди "top", але це також контролює GPU?


2
Є також nvtop github.com/Syllo/nvtop
konvas

"nvidia-smi pmon -i 0" може контролювати весь процес, що працює на nvidia GPU 0
changqi.xia

Відповіді:


84

Я вважаю gpustat дуже корисним. In може бути встановлений за допомогою pip install gpustatта друкує розбиття використання процесами чи користувачами.

введіть тут опис зображення


4
після того, як ви поставите, watch gpustat -cpви можете постійно бачити статистику, але кольорів більше немає. Як це виправити? @Alleo
AbhimanyuAryan

1
@AbhimanyuAryan використання watch -c. @ Роман Орач, Дякую, це також працювало для мене на redhat 8, коли я отримував помилку через імпорт _curses у python.
Бобак Хашемі

4
watch -c gpustat -cp --color
Лі

1
watch -n 0.5 -c gpustat -cp --color
Габріель Ромон

4
gpustat тепер має --watchможливість:gpustat -cp --watch
jayelm

139

Щоб отримати реальну інформацію про використані ресурси, виконайте:

nvidia-smi -l 1

Це буде циклічно і викликати перегляд щосекунди.

Якщо ви не хочете зберігати минулі сліди циклічного виклику в історії консолі, ви також можете зробити:

watch -n0.1 nvidia-smi

Де 0,1 - інтервал часу, в секундах.

введіть тут опис зображення


2
Запит на картку кожні 0,1 секунди? Це спричинить навантаження на карту? Крім того, використовуючи годинник, ви починаєте новий процес кожні 0,1 секунди.
Мік Т

@MickT Це велика справа? Як у Nvidia-smi є ця будівельна петля! Чи відрізняється команда "watch" від nvidia-smi -l?
Мохаммед Джавад

Можливо, я бачив, що на картах нижнього класу є дивні блокування, і я думаю, що це тому, що надто багато користувачів працювали на nvidia-smi на картках. Я думаю, що використовувати 'nvidia-smi -l' - це кращий спосіб, тому що не кожен раз переробляти новий процес. Крім того, перевірка картки кожні 0,1 секунди є надмірною, я б робив щосекунди, коли намагаюся налагоджувати проблему, інакше я роблю кожні 5 хвилин для моніторингу продуктивності. Я сподіваюся, що це допомагає! :)
Мік Т

@Gulzar так, так і є.
TrostAft

83

Мені нічого не відомо, що поєднує цю інформацію, але ви можете скористатися 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 %

4
Я думаю, якщо додати до цього -l, ви отримаєте його для постійного оновлення та ефективного моніторингу використання GPU та використання пам'яті.
jmsu

6
Що робити, якщо я запускаю це, у використанні GPU просто сказано N / A ??
natorro

3
@natorro Схоже, nVidia відмовилася від підтримки деяких карток. Перевірте це посилання forums.nvidia.com/index.php?showtopic=205165
jmsu

29
Я вважаю за краще watch -n 0.5 nvidia-smi, що уникає заповнення вашого терміналу результатом
ali_m

nvidia-smi pmon -i 0
changqi.xia

19

Завантажте та встановіть останній стабільний драйвер 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.


18

Використовуйте аргумент "--query-compute-apps ="

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

для подальшої допомоги, будь ласка, дотримуйтесь

nvidia-smi --help-query-compute-app

17

Просто використовуйте watch nvidia-smi, воно виведе повідомлення за 2s інтервалом за замовчуванням.

Наприклад, як зображено нижче:

введіть тут опис зображення

Ви також можете використовувати watch -n 5 nvidia-smi(-n інтервал 5 на 5s).


16

Іншим корисним підходом до моніторингу є використання 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

2
Ви також можете отримати PID обчислювальних програм, які займають GPU всіх користувачів, не sudoтак:nvidia-smi --query-compute-apps=pid --format=csv,noheader
Lenar Hoyt

1
Іноді nvidia-smiне перераховано всі процеси, тому ви закінчуєте свою пам'ять, яку використовують процеси, які не перераховані там. Це головний спосіб я відстежувати і вбивати ці процеси.
rand

1
@grisaitis Обережно, я не думаю, що pmemдані psвраховують загальну пам’ять GPU, але пам'ять процесора, тому що psне відомо про «Nvidia GPU»
SebMa,

10

Ви можете спробувати nvtop, що схоже на широко використовуваний htopінструмент, але для графічних процесорів NVIDIA. Ось знімок nvtopйого в дії.

Скріншот nvtop в дії


3

Це може бути не елегантно, але ви можете спробувати

while true; do sleep 2; nvidia-smi; done

Я також спробував метод @Edric, який працює, але я вважаю за краще оригінальний макет nvidia-smi.


12
Або ви просто можете зробити nvidia-smi -l 2. Або для запобігання повторного виходу консолі,watch -n 2 'nvidia-smi'
грисаїт

3

Якщо ви просто хочете знайти процес, який працює на gpu, ви можете просто скористатися такою командою:

lsof /dev/nvidia*

Для мене nvidia-smiі watch -n 1 nvidia-smiцього в більшості випадків вистачає. Іноді nvidia-smiне показує жодного процесу, але пам'ять gpu використовується, тому мені потрібно скористатися вищевказаною командою, щоб знайти процеси.


2

У Linux Mint та, швидше за все, Ubuntu, ви можете спробувати "nvidia-smi --loop = 1"


0

Є 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

0

ви можете використовувати nvidia-smi pmon -i 0для моніторингу кожного процесу в GPU 0. включаючи обчислювальний режим, використання sm, використання пам'яті, використання кодера, використання декодера.


0

Ви можете використовувати погляди програми моніторингу з його плагіном моніторингу GPU :

  • відкрите джерело
  • встановити: sudo apt-get install -y python-pip; sudo pip install glances[gpu]
  • Для запуску: sudo glances

введіть тут опис зображення

Він також контролює процесор, IO диска, дисковий простір, мережу та деякі інші речі:

введіть тут опис зображення


0

Я створив пакетний файл із наступним кодом у машині Windows, щоб контролювати кожну секунду. Це працює для мене.

:loop
cls
"C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi"
timeout /T 1
goto loop

nvidia-smi exe зазвичай знаходиться в "C: \ Program Files \ NVIDIA Corporation", якщо ви хочете виконати команду лише один раз.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.