команда top для графических процессоров, использующих CUDA - PullRequest
81 голосов
/ 22 ноября 2011

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

Ответы [ 13 ]

92 голосов
/ 03 марта 2016

Чтобы получить представление об используемых ресурсах в режиме реального времени, выполните:

nvidia-smi -l 1

Это зациклится и вызовет представление каждую секунду.

Если вы не хотите сохранять прошлые следы зацикленного вызова в истории консоли, вы также можете сделать:

watch -n0.1 nvidia-smi

Где 0,1 - временной интервал в секундах.

enter image description here

77 голосов
/ 22 ноября 2011

Мне не известно ничего, что объединяет эту информацию, но вы можете использовать инструмент 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 %
39 голосов
/ 18 июля 2018

Я считаю gpustat очень полезным. Может быть установлен с pip install gpustat и распечатывает данные об использовании процессов или пользователей.

enter image description here

19 голосов
/ 26 сентября 2012

Загрузите и установите последнюю стабильную версию драйвера CUDA (4.2) из ​​ здесь . В 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  |
+-----------------------------------------------------------------------------+

РЕДАКТИРОВАТЬ: В последних драйверах NVIDIA эта поддержка ограничена картами Tesla.

14 голосов
/ 25 апреля 2017

Использовать аргумент "--query-compute-apps ="

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

для получения дополнительной помощи, пожалуйста, следуйте

nvidia-smi --help-query-compute-app
13 голосов
/ 06 июня 2016

Другим полезным подходом к мониторингу является использование ps, отфильтрованного по процессам, которые используют ваши графические процессоры. Я часто этим пользуюсь:

ps f -o user,pgrp,pid,pcpu,pmem,start,time,command -p `lsof -n -w -t /dev/nvidia*`

Здесь будут показаны все процессы, использующие графические процессоры NVIDIA, и некоторые статистические данные о них. lsof ... возвращает список всех процессов, используя графический процессор 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
9 голосов
/ 29 июня 2018

Просто используйте watch nvidia-smi, оно будет выводить сообщение с интервалом 2 с по умолчанию.

Например, как показано на рисунке ниже:

enter image description here

Вы также можете использовать watch -n 5 nvidia-smi (-n 5 на 5с интервал).

2 голосов
/ 09 марта 2019

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

Screenshot of nvtop in action

2 голосов
/ 10 ноября 2015

Это может быть не элегантно, но вы можете попробовать

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

Я также попробовал метод @Edric, который работает, но я предпочитаю оригинальный макет nvidia-smi.

0 голосов
/ 14 июня 2019

Я создал пакетный файл со следующим кодом в машине Windows, чтобы отслеживать каждую секунду. У меня это работает.

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

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

...