comando superior para GPUs usando CUDA

127

Estou tentando monitorar um processo que usa cuda e MPI, há alguma maneira de fazer isso, algo como o comando "top", mas que monitora a GPU também?

natorro
fonte
2
Também há nvtop github.com/Syllo/nvtop
konvas
"nvidia-smi pmon -i 0" pode monitorar todos os processos em execução na GPU 0 da nvidia
changqi.xia

Respostas:

84

Acho o gpustat muito útil. O In pode ser instalado com pip install gpustate imprime detalhamento de uso por processos ou usuários.

insira a descrição da imagem aqui

Alleo
fonte
4
depois de colocar, watch gpustat -cpvocê pode ver as estatísticas continuamente, mas as cores sumiram. como você conserta aquilo? @Alleo
AbhimanyuAryan
1
@AbhimanyuAryan use watch -c. @Roman Orac, Obrigado, isso também funcionou para mim no redhat 8, quando estava recebendo alguns erros devido à importação de _curses em python.
Bobak Hashemi
4
watch -c gpustat -cp --color
Lee Netherton,
1
watch -n 0.5 -c gpustat -cp --color
Gabriel Romon
4
O gpustat agora tem uma --watchopção:gpustat -cp --watch
jayelm
139

Para obter informações em tempo real sobre os recursos usados, faça:

nvidia-smi -l 1

Isso fará um loop e chamará a visualização a cada segundo.

Se você não quiser manter os rastros anteriores da chamada em loop no histórico do console, também pode fazer:

watch -n0.1 nvidia-smi

Onde 0,1 é o intervalo de tempo, em segundos.

insira a descrição da imagem aqui

Guillaume Chevalier
fonte
2
Consultando o cartão a cada 0,1 segundos? Isso vai causar carga no cartão? Além disso, usando o relógio, você inicia um novo processo a cada 0,1 segundos.
Mick T
@MickT É um grande negócio? Como a Nvidia-smi tem esse loop de construção! O comando "watch" é muito diferente do nvidia-smi -l?
Mohammad Javad
Pode ser, eu vi placas de baixo custo com travamentos estranhos e acho que é porque muitos usuários estavam executando nvidia-smi nas placas. Acho que usar 'nvidia-smi -l' é a melhor maneira de fazer isso, já que você não cria um novo processo toda vez. Além disso, verificar a placa a cada 0,1 segundo é um exagero, eu faria a cada segundo quando estou tentando depurar um problema, caso contrário, faço a cada 5 minutos para monitorar o desempenho. Espero que ajude! :)
Mick T
@Gulzar sim, é.
TrostAft
83

Não estou ciente de nada que combine essas informações, mas você pode usar a nvidia-smiferramenta para obter os dados brutos, assim (obrigado a @jmsu pela dica sobre -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
fonte
4
Acho que se você adicionar um -l a isso, ele será atualizado de forma contínua e eficaz, monitorando a GPU e a utilização da memória.
jmsu de
6
E se quando eu executar a utilização da GPU apenas disser N / A ??
natorro
3
@natorro Parece que a nVidia abandonou o suporte para algumas placas. Verifique este link forums.nvidia.com/index.php?showtopic=205165
jmsu
29
Eu prefiro watch -n 0.5 nvidia-smi, o que evita encher seu terminal com saída
ali_m
nvidia-smi pmon -i 0
changqi.xia
19

Baixe e instale o driver CUDA estável mais recente (4.2) aqui . No Linux, o nVidia-smi 295.41 oferece exatamente o que você deseja. usar 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  |
+-----------------------------------------------------------------------------+

EDITAR: Nos drivers NVIDIA mais recentes, esse suporte é limitado às placas Tesla.

Lashgar
fonte
18

Use o argumento "--query-compute-apps ="

nvidia-smi --query-compute-apps=pid,process_name,used_memory --format=csv

para mais ajuda, por favor siga

nvidia-smi --help-query-compute-app
Deepak
fonte
17

Basta usar watch nvidia-smi, ele emitirá a mensagem por intervalo de 2s no padrão.

Por exemplo, conforme a imagem abaixo:

insira a descrição da imagem aqui

Você também pode usar watch -n 5 nvidia-smi(-n intervalo de 5 por 5s).

Jayhello
fonte
16

Outra abordagem de monitoramento útil é usar os psprocessos filtrados que consomem suas GPUs. Eu uso muito este:

ps f -o user,pgrp,pid,pcpu,pmem,start,time,command -p `lsof -n -w -t /dev/nvidia*`

Isso mostrará todos os processos que utilizam GPU da nvidia e algumas estatísticas sobre eles. lsof ...recupera uma lista de todos os processos usando uma GPU nvidia de propriedade do usuário atual e ps -p ...mostra os psresultados desses processos. ps fmostra uma boa formatação para relacionamentos / hierarquias de processo pai / filho e -oespecifica uma formatação personalizada. Isso é semelhante a apenas fazer, ps umas adiciona o ID do grupo de processo e remove alguns outros campos.

Uma vantagem disso nvidia-smié que ele mostrará bifurcações de processo, bem como processos principais que usam a GPU.

Uma desvantagem, porém, é que ele está limitado aos processos pertencentes ao usuário que executa o comando. Para abri-lo para todos os processos pertencentes a qualquer usuário, adiciono um sudoantes de lsof.

Por último, eu o combino com watchpara obter uma atualização contínua. Então, no final, parece:

watch -n 0.1 'ps f -o user,pgrp,pid,pcpu,pmem,start,time,command -p `sudo lsof -n -w -t /dev/nvidia*`'

Que tem saída como:

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
fonte
2
Você também pode obter os PIDs de programas de computação que ocupam a GPU de todos os usuários sem o sudoseguinte:nvidia-smi --query-compute-apps=pid --format=csv,noheader
Lenar Hoyt
1
Às vezes nvidia-smi, não lista todos os processos, então você acaba com sua memória usada por processos não listados lá. Esta é a principal maneira de rastrear e eliminar esses processos.
rand
1
@grisaitis Cuidado, não acho que o pmemdado por psleve em consideração a memória total da GPU, mas a da CPU porque psnão é "Nvidia GPU" ciente
SebMa
10

Você pode tentar nvtop, que é semelhante à htopferramenta amplamente usada , mas para GPUs NVIDIA. Aqui está uma captura de tela denvtop dele em ação.

Captura de tela do nvtop em ação

Rodrigo
fonte
3

Isso pode não ser elegante, mas você pode tentar

while true; do sleep 2; nvidia-smi; done

Também tentei o método de @Edric, que funciona, mas prefiro o layout original do nvidia-smi.

skyuuka
fonte
12
Ou você pode apenas fazer nvidia-smi -l 2. Ou para evitar saídas repetidas do console,watch -n 2 'nvidia-smi'
grisaitis
3

Se você deseja apenas encontrar o processo que está sendo executado no gpu, pode simplesmente usar o seguinte comando:

lsof /dev/nvidia*

Para mim nvidia-smie watch -n 1 nvidia-smisão suficientes na maioria dos casos. Às vezes nvidia-sminão mostra nenhum processo, mas a memória gpu é usada, então eu preciso usar o comando acima para encontrar os processos.

JasonWayne
fonte
2

No Linux Mint, e provavelmente no Ubuntu, você pode tentar "nvidia-smi --loop = 1"

Ebram
fonte
0

Existe o Prometheus GPU Metrics Exporter (PGME) que utiliza o binário nvidai-smi. Você pode tentar isso. Depois de ter o exportador em execução, você pode acessá-lo via http: // localhost: 9101 / metrics . Para duas GPUs, o resultado da amostra é assim:

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
Abu Shoeb
fonte
0

você pode usar nvidia-smi pmon -i 0para monitorar todos os processos na GPU 0. incluindo modo de computação, uso de sm, uso de memória, uso do codificador, uso do decodificador.

changqi.xia
fonte
0

Você pode usar os olhares do programa de monitoramento com seu plug-in de monitoramento de GPU :

  • Código aberto
  • para instalar: sudo apt-get install -y python-pip; sudo pip install glances[gpu]
  • lançar: sudo glances

insira a descrição da imagem aqui

Ele também monitora a CPU, E / S do disco, espaço em disco, rede e algumas outras coisas:

insira a descrição da imagem aqui

Franck Dernoncourt
fonte
0

Criei um arquivo em lote com o seguinte código em uma máquina Windows para monitorar a cada segundo. Funciona para mim.

:loop
cls
"C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi"
timeout /T 1
goto loop

O exe nvidia-smi geralmente está localizado em "C: \ Arquivos de programas \ NVIDIA Corporation" se você deseja executar o comando apenas uma vez.

Karthik NG
fonte