Я пытаюсь контролировать процесс, который использует cuda и MPI, есть ли способ сделать это, что-то вроде команды «top», но которая также контролирует графический процессор?
Я пытаюсь контролировать процесс, который использует cuda и MPI, есть ли способ сделать это, что-то вроде команды «top», но которая также контролирует графический процессор?
Ответы:
Я считаю гпустат очень полезным. Он может быть установлен с pip install gpustat
и печатает разбивку использования процессами или пользователями.
watch gpustat -cp
вы можете видеть статистику постоянно, но цвета исчезнут. Как это исправить? @Alleo
watch -c
. @Roman Orac, Спасибо, у меня тоже сработало на redhat 8, когда я получал ошибку из-за импорта _curses в python.
watch -c gpustat -cp --color
watch -n 0.5 -c gpustat -cp --color
--watch
опция:gpustat -cp --watch
nvidia-smi -l 1
Это будет зацикливаться и вызывать представление каждую секунду.
Если вы не хотите сохранять прошлые следы зацикленного вызова в истории консоли, вы также можете сделать:
watch -n0.1 nvidia-smi
Где 0,1 - временной интервал в секундах.
Я не знаю ничего, что объединяет эту информацию, но вы можете использовать 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 %
watch -n 0.5 nvidia-smi
, что позволяет избежать заполнения вашего терминала выводом
Загрузите и установите последний стабильный драйвер 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.
Еще один полезный подход к мониторингу - использовать 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
sudo
этого:nvidia-smi --query-compute-apps=pid --format=csv,noheader
nvidia-smi
не перечисляются все процессы, поэтому ваша память используется процессами, не указанными здесь. Это основной способ отслеживать и уничтожать эти процессы.
pmem
данный by ps
учитывает общую память графического процессора, но память центрального процессора, потому что ps
"Nvidia GPU" не знает
Это может быть не элегантно, но вы можете попробовать
while true; do sleep 2; nvidia-smi; done
Я также попробовал метод @Edric, который работает, но я предпочитаю исходный макет nvidia-smi
.
nvidia-smi -l 2
. Или для предотвращения повторного вывода на консоль,watch -n 2 'nvidia-smi'
Если вы просто хотите найти процесс, запущенный на графическом процессоре, вы можете просто использовать следующую команду:
lsof /dev/nvidia*
Мне nvidia-smi
и watch -n 1 nvidia-smi
хватает в большинстве случаев. Иногда не nvidia-smi
показывает процесс, но память графического процессора израсходована, поэтому мне нужно использовать указанную выше команду, чтобы найти процессы.
Существует программа 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
вы можете использовать его nvidia-smi pmon -i 0
для мониторинга каждого процесса в GPU 0. включая режим вычислений, использование sm, использование памяти, использование кодировщика, использование декодера.
Вы можете использовать программу мониторинга взглядов с ее подключаемым модулем мониторинга графического процессора :
sudo apt-get install -y python-pip; sudo pip install glances[gpu]
sudo glances
Он также контролирует процессор, дисковый ввод-вывод, дисковое пространство, сеть и некоторые другие вещи:
Я создал командный файл со следующим кодом на машине с Windows, чтобы отслеживать каждую секунду. Меня устраивает.
:loop
cls
"C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi"
timeout /T 1
goto loop
nvidia-smi exe обычно находится в папке «C: \ Program Files \ NVIDIA Corporation», если вы хотите запустить команду только один раз.