верхняя команда для GPU с использованием CUDA
Я пытаюсь контролировать процесс, который использует cuda и MPI, есть ли способ сделать это, что-то вроде команды "top", но которая также контролирует GPU?
9 ответов
найти gpustat очень полезно. В может быть установлен с pip install gpustat
, и печатает разбивку использования процессами или пользователями.
Я не знаю ничего, что объединяет эту информацию, но вы можете использовать nvidia-smi
инструмент для получения необработанных данных, например (Спасибо @jmsu за подсказку on-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 GPU и некоторые статистические данные о них. lsof ...
получает список всех процессов, использующих графический процессор nvidia, принадлежащий текущему пользователю, и ps -p ...
показывает ps
результаты для этих процессов. ps f
показывает хорошее форматирование для отношений/иерархий дочернего / родительского процесса и -o
указывает a пользовательское форматирование. Это похоже на just doing ps u
но добавляет идентификатор группы процессов и удаляет некоторые другие поля.
одно преимущество этого над nvidia-smi
это то, что он будет показывать вилки процессов, а также основные процессы, которые используют GPU.
одним из недостатков, однако, является то, что он ограничен процессами, принадлежащими пользователю, который выполняет команду. Чтобы открыть его для всех процессов, принадлежащих любому пользователю, я добавляю sudo
до lsof
.
Наконец, I объедините его с 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
.
просто использовать watch nvidia-smi
, Он выведет сообщение интервалом 2s по умолчанию.
например, как показано ниже:
вы также можете использовать watch -n 5 nvidia-smi
(- N 5 на 5s интервал).
здесь экспортер метрик GPU Prometheus (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