how python gpu tensorflow

python - how - ¿Cómo obtener las GPU actuales disponibles en Tensorflow?



tensor flow cuda (6)

Además de la excelente explicación de Mrry, donde sugirió usar 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 marcos 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, cualquier tarjeta gráfica NVIDIA instalada y el estado de AGP.

/proc/driver/nvidia/gpus/0..N/information

Proporcione información sobre cada uno de los adaptadores gráficos NVIDIA instalados (nombre del modelo, IRQ, versión del BIOS, tipo de bus). Tenga en cuenta que la versión del BIOS solo está disponible mientras X se está ejecutando.

Entonces puede ejecutar esto desde la línea de comando 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.

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 al ejecutar tf.Session() TensorFlow proporciona 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 una función como tf.get_available_gpus() que devolverá [''/gpu:0'', ''/gpu:1''] si hay dos GPU disponibles en la máquina. ¿Cómo puedo implementar esto?


En TensorFlow 2.0, puede usar tf.config.experimental.list_physical_devices(''GPU'') :

import tensorflow as tf gpus = tf.config.experimental.list_physical_devices(''GPU'') for gpu in gpus: print("Name:", gpu.name, " Type:", gpu.device_type)

Si tiene dos GPU instaladas, genera esto:

Name: /physical_device:GPU:0 Type: GPU Name: /physical_device:GPU:1 Type: GPU

Puede obtener más información en esta página de documentación .


Existe un método no documentado llamado device_lib.list_local_devices() que le permite enumerar los dispositivos disponibles en el proceso local. ( Nota: como método no documentado, está sujeto a cambios incompatibles con versiones anteriores). La función devuelve una lista de objetos de búfer de protocolo DeviceAttributes . Puede extraer una lista de nombres de dispositivos de cadena para los dispositivos GPU de la siguiente manera:

from tensorflow.python.client import device_lib def get_available_gpus(): local_device_protos = device_lib.list_local_devices() return [x.name for x in local_device_protos if x.device_type == ''GPU'']

Tenga en cuenta que (al menos hasta TensorFlow 1.4), al llamar a device_lib.list_local_devices() se ejecutará un código de inicialización que, de forma predeterminada, asignará toda la memoria de la GPU en todos los dispositivos ( problema de GitHub ). Para evitar esto, primero cree una sesión con una per_process_gpu_fraction explícitamente pequeña, o allow_growth=True , para evitar que se asigne toda la memoria. Vea esta pregunta para más detalles.


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.

import subprocess n = str(subprocess.check_output(["nvidia-smi", "-L"])).count(''UUID'')


Puede consultar la lista de todos los dispositivos con el siguiente código:

from tensorflow.python.client import device_lib device_lib.list_local_devices()


También hay un método en la utilidad de prueba . Entonces todo lo que hay que hacer es:

tf.test.is_gpu_available()

y / o

tf.test.gpu_device_name()

Busque los documentos de Tensorflow para ver los argumentos.