Gostaria de saber se pytorch
está usando minha GPU. É possível detectar nvidia-smi
se há alguma atividade da GPU durante o processo, mas quero algo escrito em umpython
script.
Tem algum jeito de fazer isso?
Isso vai funcionar:
In [1]: import torch
In [2]: torch.cuda.current_device()
Out[2]: 0
In [3]: torch.cuda.device(0)
Out[3]: <torch.cuda.device at 0x7efce0b03be0>
In [4]: torch.cuda.device_count()
Out[4]: 1
In [5]: torch.cuda.get_device_name(0)
Out[5]: 'GeForce GTX 950M'
In [6]: torch.cuda.is_available()
Out[6]: True
Isso me diz que a GPU GeForce GTX 950M
está sendo usada por PyTorch
.
torch.cuda.current_device()
foi útil para mim. Ele mostrou que meu gpu infelizmente é muito antigo: "Encontrei a GPU0 GeForce GTX 760 que possui capacidade de cuda 3.0. O PyTorch não oferece mais suporte a essa GPU porque é muito antiga".torch.cuda.is_available()
$ watch -n 2 nvidia-smi
faz o trabalho. Para mais detalhes, consulte a minha resposta abaixo .Como não foi proposto aqui, estou adicionando um método usando
torch.device
, pois isso é bastante útil, também ao inicializar os tensores no corretodevice
.Resultado:
Como mencionado acima,
device
é possível usar :Para mover os tensores para os respectivos
device
:Para criar um tensor diretamente no
device
:O que torna a alternância entre CPU e GPU confortável, sem alterar o código real.
Editar:
Como houve algumas perguntas e confusão sobre a memória em cache e alocada , estou adicionando algumas informações adicionais sobre isso:
torch.cuda.max_memory_cached(device=None)
Retorna a memória GPU máxima gerenciada pelo alocador de cache em bytes para um determinado dispositivo.
torch.cuda.memory_allocated(device=None)
Retorna o uso atual da memória da GPU por tensores em bytes para um determinado dispositivo.
Você pode entregar diretamente um
device
conforme especificado mais acima na postagem ou deixá-lo Nenhum e ele usará ocurrent_device()
.fonte
## neural network in pytorch
, em seguida, adiciono seu código no final. Ele ainda mostra Using device: cuda; e 0 GB para Alocado e Armazenado em Cache. Também tentei inseri-lo no final do loop forfor i in range(epoch):
após back-propagação, ainda tudo 0GBmy_tensor_on_gpu * my_tensor_on_cpu
falhará.Found GPU0 GeForce GT 750M which is of cuda capability 3.0. PyTorch no longer supports this GPU because it is too old. The minimum cuda capability that we support is 3.5.
Depois de começar a executar o ciclo de treinamento, se você quiser assistir manualmente a partir do terminal, se o seu programa está utilizando os recursos da GPU e até que ponto, você pode simplesmente usá-lo
watch
como em:Isso atualizará continuamente as estatísticas de uso a cada 2 segundos até você pressionar ctrl+c
Se você precisar de mais controle sobre mais estatísticas da GPU, poderá usar a versão mais sofisticada do
nvidia-smi
with--query-gpu=...
. Abaixo está uma ilustração simples disso:que produziria as estatísticas algo como:
Nota : Não deve haver nenhum espaço entre os nomes de consulta separados por vírgula
--query-gpu=...
. Caso contrário, esses valores serão ignorados e nenhuma estatística será retornada.Além disso, você pode verificar se sua instalação do PyTorch detecta sua instalação CUDA corretamente, fazendo:
True
status significa que o PyTorch está configurado corretamente e está usando a GPU, embora você precise mover / colocar os tensores com as instruções necessárias em seu código.Se você quiser fazer isso dentro do código Python, consulte este módulo:
https://github.com/jonsafari/nvidia-ml-py ou em pypi aqui: https://pypi.python.org/pypi/nvidia-ml-py/
fonte
watch
é útilNo site do escritório e na página inicial, verifique a GPU do PyTorch, conforme abaixo:
Referência: PyTorch | Introdução
fonte
Do ponto de vista prático, apenas uma pequena digressão:
este
dev
agora sabe se cuda ou cpu.E há uma diferença em como você lida com o modelo e com os tensores ao mudar para cuda. É um pouco estranho no começo.
Tudo isso é complicado e compreendê-lo uma vez, ajuda a lidar rapidamente com menos depuração.
fonte
M()
? Onde éM
definido?Para verificar se há uma GPU disponível:
Se a função acima retornar
False
,CUDA_VISIBLE_DEVICES
. Quando o valor deCUDA_VISIBLE_DEVICES
é -1, todos os seus dispositivos estão sendo ocultos. Você pode verificar esse valor no código com esta linha:os.environ['CUDA_VISIBLE_DEVICES']
Se a função acima retornar,
True
isso não significa necessariamente que você está usando a GPU. No Pytorch, você pode alocar tensores para os dispositivos ao criá-los. Por padrão, os tensores são alocados paracpu
. Para verificar onde seu tensor está alocado, faça:Observe que você não pode operar em tensores alocados em dispositivos diferentes. Para ver como alocar um tensor para a GPU, consulte aqui: https://pytorch.org/docs/stable/notes/cuda.html
fonte
Quase todas as respostas aqui referenciam
torch.cuda.is_available()
. No entanto, isso é apenas uma parte da moeda. Indica se a GPU (atualmente CUDA) está disponível, não se está realmente sendo usada. Em uma configuração típica, você configuraria seu dispositivo com algo como isto:mas em ambientes maiores (por exemplo, pesquisa) também é comum oferecer ao usuário mais opções; portanto, com base na entrada, eles podem desativar o CUDA, especificar IDs de CUDA e assim por diante. Nesse caso, o uso ou não da GPU não se baseia apenas em sua disponibilidade ou não. Depois que o dispositivo for definido como um dispositivo de tocha, você poderá obter sua
type
propriedade para verificar se é CUDA ou não.fonte
Simplesmente no prompt de comando ou no ambiente Linux, execute o seguinte comando.
O acima deve ser impresso
True
Este deve imprimir o seguinte:
fonte
Se você está aqui porque seu pytorch sempre dá
False
paratorch.cuda.is_available()
isso é provavelmente porque você instalou a sua versão pytorch sem o apoio GPU. (Por exemplo: você codificou no laptop e depois testou no servidor).A solução é desinstalar e instalar o pytorch novamente com o comando certo na página de downloads do pytorch . Consulte também este problema de pytorch.
fonte
Crie um tensor na GPU da seguinte maneira:
Não saia, abra outro terminal e verifique se o processo python está usando a GPU usando:
fonte
nvidia-smi
a partir da linha de comandonvidia-smi
.