Tenho um plano para usar o TensorFlow distribuído e vi que o TensorFlow pode usar GPUs para treinamento e teste. Em um ambiente de cluster, cada máquina pode ter 0 ou 1 ou mais GPUs, e eu quero executar meu gráfico do TensorFlow nas GPUs em tantas máquinas quanto possível.
Descobri que, ao executar o tf.Session()
TensorFlow, fornece informações sobre a GPU nas mensagens de log, como abaixo:
I tensorflow/core/common_runtime/gpu/gpu_init.cc:126] DMA: 0
I tensorflow/core/common_runtime/gpu/gpu_init.cc:136] 0: Y
I tensorflow/core/common_runtime/gpu/gpu_device.cc:838] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX 1080, pci bus id: 0000:01:00.0)
Minha pergunta é como obtenho informações sobre a GPU atual disponível no TensorFlow? Posso obter informações de GPU carregadas do log, mas quero fazê-lo de uma maneira mais sofisticada e programática. Também pude restringir as GPUs intencionalmente usando a variável de ambiente CUDA_VISIBLE_DEVICES, por isso não quero saber como obter informações da GPU no kernel do SO.
Em resumo, quero uma função como tf.get_available_gpus()
essa que retornará ['/gpu:0', '/gpu:1']
se houver duas GPUs disponíveis na máquina. Como posso implementar isso?
fonte
Free memory
para mim, usandotensorflow1.1
. Em pythonfrom tensorflow.python.client import device_lib
device_lib.list_local_devices()
Você pode verificar toda a lista de dispositivos usando o seguinte código:
fonte
python3 -c "from tensorflow.python.client import device_lib; print(device_lib.list_local_devices())"
cannot import name 'format_exc' from 'traceback'
Há também um método no utilitário de teste . Então, tudo o que precisa ser feito é:
e / ou
Consulte os documentos do Tensorflow para argumentos.
fonte
tf.test.is_gpu_available()
, retornaráTrue
No TensorFlow 2.0, você pode usar
tf.config.experimental.list_physical_devices('GPU')
:Se você tiver duas GPUs instaladas, ela gera o seguinte:
A partir do 2.1, você pode soltar
experimental
:Vejo:
fonte
'GPU'
para'XLA_GPU'
.A resposta aceita fornece o número de GPUs, mas também aloca toda a memória nessas GPUs. Você pode evitar isso criando uma sessão com memória inferior fixa antes de chamar device_lib.list_local_devices (), que pode ser indesejável para alguns aplicativos.
Acabei usando a nvidia-smi para obter o número de GPUs sem alocar nenhuma memória nelas.
fonte
Além da excelente explicação de Mrry, onde ele sugeriu o uso
device_lib.list_local_devices()
, posso mostrar como você pode procurar informações relacionadas à GPU na linha de comando.Como atualmente apenas os gpus da Nvidia funcionam para estruturas NN, a resposta os cobre apenas. A Nvidia possui uma página na qual documentam como você pode usar a interface do sistema de arquivos / proc para obter informações em tempo de execução sobre o driver, qualquer placa gráfica NVIDIA instalada e o status do AGP.
Assim, você pode executar isso na linha de comando
cat /proc/driver/nvidia/gpus/0/information
e ver informações sobre sua primeira GPU. É fácil executar isso a partir de python e você também pode verificar a segunda, terceira e quarta GPU até que ela falhe.Definitivamente, a resposta de Mrry é mais robusta e não tenho certeza se minha resposta funcionará em máquinas não-Linux, mas a página da Nvidia fornece outras informações interessantes, das quais poucas pessoas conhecem.
fonte
O seguinte funciona no tensorflow 2:
A partir do 2.1, você pode soltar
experimental
:https://www.tensorflow.org/api_docs/python/tf/config/list_physical_devices
fonte
Eu recebi uma GPU chamada
NVIDIA GTX GeForce 1650 Ti
na minha máquina comtensorflow-gpu==2.2.0
Execute as duas linhas de código a seguir:
Resultado:
fonte
Use desta maneira e verifique todas as peças:
fonte
Verifique se você possui a mais recente GPU TensorFlow 2.x instalada em sua máquina de suporte a GPU, Execute o seguinte código em python,
Obterá uma saída semelhante a,
fonte