Я пытаюсь контролировать процесс, который использует cuda и MPI, есть ли способ сделать это, что-то вроде команды "top", но которая также контролирует GPU?
Верхняя команда для GPU с использованием CUDA
Ответ 1
Я нахожу gpustat очень полезным. Может быть установлен с помощью pip install gpustat
и распечатывает данные об использовании процессами или пользователями.
Ответ 2
Чтобы получить представление о используемых ресурсах в режиме реального времени, выполните следующие действия:
nvidia-smi -l 1
Это будет циклическим и вызовом просмотра в каждую секунду.
Если вы не хотите сохранять прошлые следы зацикленного вызова в истории консоли, вы также можете:
watch -n0.1 nvidia-smi
Где 0,1 - временной интервал, в секундах.
Ответ 3
Я не знаю ничего, что объединяет эту информацию, но вы можете использовать инструмент 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
Загрузите и установите последний стабильный драйвер CUDA (4.2) из здесь. На linux nVidia-smi 295.41 дает вам именно то, что вы хотите. используйте nvidia-smi
:
[[email protected] 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.
Ответ 5
Используйте аргумент "--query-compute-apps ="
nvidia-smi --query-compute-apps=pid,process_name,used_memory --format=csv
для получения дополнительной помощи, пожалуйста, следуйте
nvidia-smi --help-query-compute-app
Ответ 6
Еще один полезный подход к мониторингу - использовать 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
Ответ 7
Просто используйте watch nvidia-smi
, он выведет сообщение с интервалом 2 с по умолчанию.
Например, как изображение ниже:
Вы также можете использовать watch -n 5 nvidia-smi
smi (-n 5 с интервалом 5 с).
Ответ 8
Это может быть не изящно, но вы можете попробовать
while true; do sleep 2; nvidia-smi; done
Я также пробовал метод by @Edric, который работает, но я предпочитаю оригинальный макет nvidia-smi
.
Ответ 9
Вы можете попробовать nvtop
, который похож на широко используемый инструмент htop
, но для графических процессоров NVIDIA. Вот скриншот nvtop
этого в действии.
Ответ 10
Существует 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
Ответ 11
вы можете использовать nvidia-smi pmon -i 0
для мониторинга каждого процесса в GPU 0. включая режим вычислений, использование sm, использование памяти, использование кодировщика, использование декодера.
Ответ 12
Вы можете использовать программу мониторинга взглядов с помощью плагина для мониторинга GPU:
- Открытый исходный код
- установить:
sudo apt-get install -y python-pip; sudo pip install glances[gpu]
sudo apt-get install -y python-pip; sudo pip install glances[gpu]
- запустить:
sudo glances
Он также контролирует процессор, дисковый ввод-вывод, дисковое пространство, сеть и некоторые другие вещи:
Ответ 13
Я создал пакетный файл со следующим кодом на машине Windows, чтобы отслеживать каждую секунду. Меня устраивает.
:loop
cls
"C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi"
timeout /T 1
goto loop
nvidia-smi exe обычно находится в "C:\Program Files\NVIDIA Corporation", если вы хотите выполнить команду только один раз.