топ-команды для GPU с использованием технологии CUDA
Я пытаюсь контролировать процесс, который использует cuda и MPI, есть ли способ сделать это, что-то вроде команды "top", но это тоже контролирует GPU?
9 ответов:
найти gpustat очень полезно. В может быть установлен с
pip install gpustat
, и печатает разбивку использования процессами или пользователями.
Я не знаю ничего, что объединяет эту информацию, но вы можете использовать
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 %
чтобы получить представление в режиме реального времени об используемых ресурсах, выполните:
nvidia-smi -l 1
это будет цикл и вызвать в каждую секунду.
если вы не хотите сохранять прошлые следы циклического вызова в истории консоли, вы также можете сделать:
watch -n0.1 nvidia-smi
где 0.1-интервал времени, в секундах.
Загрузите и установите последний стабильный драйвер 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 | +-----------------------------------------------------------------------------+
EDIT:в последних драйверах NVIDIA эта поддержка ограничена картами Tesla.
еще один полезный подход к мониторингу заключается в использовании
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
указывает a пользовательское форматирование. Это похоже на просто делатьps u
но добавляет идентификатор группы процессов и удаляет некоторые другие поля.одно преимущество этого над
nvidia-smi
это то, что он покажет процесс вилки, а также основные процессы, которые используют GPU.одним из недостатков, однако, является то, что он ограничен процессами, принадлежащими пользователю, который выполняет команду. Чтобы открыть его для всех процессов, принадлежащих любому пользователю, я добавляю
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
использовать аргумент " --query-compute-apps="
nvidia-smi --query-compute-apps=pid,process_name,used_memory --format=csv
для получения дополнительной помощи, пожалуйста, следуйте
nvidia-smi --help-query-compute-app
это может быть не элегантно, но вы можете попробовать
while true; do sleep 2; nvidia-smi; done
Я также попробовал метод @Edric, который работает, но я предпочитаю оригинальный макет
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