топ команда для використання графічного процесора 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.