Tengo un plan para usar TensorFlow distribuido, y vi que TensorFlow puede usar GPU para capacitación y pruebas. En un entorno de clúster, cada máquina podría tener 0 o 1 o más GPU, y quiero ejecutar mi gráfico TensorFlow en GPU en tantas máquinas como sea posible.
Descubrí que cuando se ejecuta tf.Session()
TensorFlow se brinda información sobre la GPU en los mensajes de registro como se muestra a continuación:
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)
Mi pregunta es ¿cómo obtengo información sobre la GPU actual disponible de TensorFlow? Puedo obtener información de GPU cargada del registro, pero quiero hacerlo de una manera más sofisticada y programática. También podría restringir las GPU intencionalmente usando la variable de entorno CUDA_VISIBLE_DEVICES, por lo que no quiero conocer una forma de obtener información de GPU del núcleo del sistema operativo.
En resumen, quiero que una función como tf.get_available_gpus()
esa regrese ['/gpu:0', '/gpu:1']
si hay dos GPU disponibles en la máquina. ¿Cómo puedo implementar esto?
fuente
Free memory
para mí, usandotensorflow1.1
. En python:,from tensorflow.python.client import device_lib
entoncesdevice_lib.list_local_devices()
Puede consultar la lista de todos los dispositivos con el siguiente código:
fuente
python3 -c "from tensorflow.python.client import device_lib; print(device_lib.list_local_devices())"
cannot import name 'format_exc' from 'traceback'
También hay un método en la utilidad de prueba . Entonces, todo lo que hay que hacer es:
y / o
Busque los documentos de Tensorflow para ver argumentos.
fuente
tf.test.is_gpu_available()
que volveremosTrue
En TensorFlow 2.0, puede usar
tf.config.experimental.list_physical_devices('GPU')
:Si tiene dos GPU instaladas, genera esto:
Desde 2.1, puede soltar
experimental
:Ver:
fuente
'GPU'
a'XLA_GPU'
.La respuesta aceptada le da la cantidad de GPU, pero también asigna toda la memoria en esas GPU. Puede evitar esto creando una sesión con memoria inferior fija antes de llamar a device_lib.list_local_devices () que puede ser no deseado para algunas aplicaciones.
Terminé usando nvidia-smi para obtener la cantidad de GPU sin asignarles memoria.
fuente
Además de la excelente explicación de Mrry, donde sugirió usarla
device_lib.list_local_devices()
, puedo mostrarle cómo puede verificar la información relacionada con la GPU desde la línea de comandos.Debido a que actualmente solo los gpus de Nvidia funcionan para los marcos de NN, la respuesta solo los cubre. Nvidia tiene una página donde documentan cómo puede usar la interfaz del sistema de archivos / proc para obtener información de tiempo de ejecución sobre el controlador, las tarjetas gráficas NVIDIA instaladas y el estado de AGP.
Entonces puede ejecutar esto desde la línea de comandos
cat /proc/driver/nvidia/gpus/0/information
y ver información sobre su primera GPU. Es fácil ejecutar esto desde python y también puede verificar la segunda, tercera y cuarta GPU hasta que falle.Definitivamente, la respuesta de Mrry es más sólida y no estoy seguro de si mi respuesta funcionará en una máquina que no sea Linux, pero esa página de Nvidia proporciona otra información interesante, que no mucha gente conoce.
fuente
Lo siguiente funciona en tensorflow 2:
Desde 2.1, puede soltar
experimental
:https://www.tensorflow.org/api_docs/python/tf/config/list_physical_devices
fuente
Tengo una GPU llamada
NVIDIA GTX GeForce 1650 Ti
en mi máquina contensorflow-gpu==2.2.0
Ejecute las siguientes dos líneas de código:
Salida:
fuente
Use esta forma y verifique todas las partes:
fuente
Asegúrese de tener instalada la última GPU TensorFlow 2.x en su máquina compatible con GPU, ejecute el siguiente código en python,
Obtendrá una salida como,
fuente