верхняя команда для графических процессоров с использованием CUDA


127

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


2
Также есть nvtop github.com/Syllo/nvtop
— konvas 08

«nvidia-smi pmon -i 0» может отслеживать все процессы, запущенные на nvidia GPU 0
— changqi.xia

Ответы:


84

Я считаю гпустат очень полезным. Он может быть установлен с pip install gpustatи печатает разбивку использования процессами или пользователями.

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


4
после того, как вы положите, watch gpustat -cpвы можете видеть статистику постоянно, но цвета исчезнут. Как это исправить? @Alleo
— CodingOnSteroid

1
@ AbhimanyuАрийское использование watch -c. @Roman Orac, Спасибо, у меня тоже сработало на redhat 8, когда я получал ошибку из-за импорта _curses в python.
— Bobak Hashemi

4
watch -c gpustat -cp --color
— Ли Нетертон

1
watch -n 0.5 -c gpustat -cp --color
— Габриэль Ромон

4
У gpustat теперь есть --watchопция:gpustat -cp --watch
— jayelm

141

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

nvidia-smi -l 1

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

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

watch -n0.1 nvidia-smi

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

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


2
Запрос карты каждые 0,1 секунды? Это вызовет нагрузку на карту? Кроме того, с помощью часов вы запускаете новый процесс каждые 0,1 секунды.
— Mick T

@MickT Это большое дело? Как у Nvidia-smi есть этот строительный шлейф! Команда "смотреть" сильно отличается от nvidia-smi -l?
— Мохаммад Джавад

Возможно, я видел, как у младших карт были странные блокировки, и я думаю, это потому, что слишком много пользователей использовали nvidia-smi на этих картах. Я думаю, что использование nvidia-smi -l - лучший способ, поскольку вы не будете каждый раз разветвлять новый процесс. Кроме того, проверка карты каждые 0,1 секунды является излишним, я бы сделал каждую секунду, когда пытаюсь отладить проблему, в противном случае я проверяю производительность каждые 5 минут. Надеюсь, это поможет! :)
— Mick T

@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 к этому, вы получите его для непрерывного обновления, эффективно отслеживая использование графического процессора и памяти.
— jmsu

6
Что, если при запуске GPU utilizacion просто скажет N / A ??
— natorro

3
@natorro Похоже, nVidia отказалась от поддержки некоторых карт. Проверьте эту ссылку forum.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 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.


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, по умолчанию он будет выводить сообщение с интервалом в 2 секунды.

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

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

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


16

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

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

Это покажет все процессы nvidia, использующие GPU, и некоторую статистику о них. 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

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

1
Иногда nvidia-smiне перечисляются все процессы, поэтому ваша память используется процессами, не указанными здесь. Это основной способ отслеживать и уничтожать эти процессы.
— rand

1
@grisaitis Осторожно, я не думаю, что pmemданный by psучитывает общую память графического процессора, но память центрального процессора, потому что 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'
— grisaitis 06

3

Если вы просто хотите найти процесс, запущенный на графическом процессоре, вы можете просто использовать следующую команду:

lsof /dev/nvidia*

Мне nvidia-smiи watch -n 1 nvidia-smiхватает в большинстве случаев. Иногда не nvidia-smiпоказывает процесс, но память графического процессора израсходована, поэтому мне нужно использовать указанную выше команду, чтобы найти процессы.


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

Вы можете использовать программу мониторинга взглядов с ее подключаемым модулем мониторинга графического процессора :

  • открытый источник
  • установить: sudo apt-get install -y python-pip; sudo pip install glances[gpu]
  • запустить: sudo glances

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

Он также контролирует процессор, дисковый ввод-вывод, дисковое пространство, сеть и некоторые другие вещи:

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


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.