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

127

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

natorro
источник
2
Также есть nvtop github.com/Syllo/nvtop
konvas 08
«nvidia-smi pmon -i 0» может отслеживать все процессы, запущенные на nvidia GPU 0
changqi.xia

Ответы:

84

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

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

Alleo
источник
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 %
Edric
источник
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.

lashgar
источник
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 с).

Jayhello
источник
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
grisaitis
источник
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.

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

JasonWayne
источник
2

В Linux Mint и, скорее всего, в Ubuntu вы можете попробовать "nvidia-smi --loop = 1"

Ebram
источник
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, использование памяти, использование кодировщика, использование декодера.

changqi.xia
источник
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», если вы хотите запустить команду только один раз.

Картик Н.Г.
источник