tutorial started learning guide getting español ejemplos basicos python gpu tensorflow

python - started - tensorflow tutorial español pdf



¿Cómo interpretar la salida de tensorflow? (2)

¿Cómo interpreto la salida de TensorFlow para crear y ejecutar gráficos computacionales en GPGPUs?

Dado el siguiente comando que ejecuta un script de tensorflow arbitrario utilizando la API de python.

python3 tensorflow_test.py> out

La primera parte stream_executor parece ser sus dependencias de carga.

I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcublas.so locally I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcudnn.so locally I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcufft.so locally I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcuda.so.1 locally I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcurand.so locally

¿Qué es un nodo NUMA ?

I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:900] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero

Supongo que esto es cuando encuentra la GPU disponible

I tensorflow/core/common_runtime/gpu/gpu_init.cc:102] Found device 0 with properties: name: Tesla K40c major: 3 minor: 5 memoryClockRate (GHz) 0.745 pciBusID 0000:01:00.0 Total memory: 11.25GiB Free memory: 11.15GiB

¿Alguna inicialización de gpu? ¿Qué es la DMA?

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:755] Creating TensorFlow device (/gpu:0) -> (device: 0, name: Tesla K40c, pci bus id: 0000:01:00.0)

¿Por qué arroja un error E ?

E tensorflow/stream_executor/cuda/cuda_driver.cc:932] failed to allocate 11.15G (11976531968 bytes) from device: CUDA_ERROR_OUT_OF_MEMORY

Gran respuesta a lo que hace el pool_allocator : https://stackoverflow.com/a/35166985/4233809

I tensorflow/core/common_runtime/gpu/pool_allocator.cc:244] PoolAllocator: After 3160 get requests, put_count=2958 evicted_count=1000 eviction_rate=0.338066 and unsatisfied allocation rate=0.412025 I tensorflow/core/common_runtime/gpu/pool_allocator.cc:256] Raising pool_size_limit_ from 100 to 110 I tensorflow/core/common_runtime/gpu/pool_allocator.cc:244] PoolAllocator: After 1743 get requests, put_count=1970 evicted_count=1000 eviction_rate=0.507614 and unsatisfied allocation rate=0.456684 I tensorflow/core/common_runtime/gpu/pool_allocator.cc:256] Raising pool_size_limit_ from 256 to 281 I tensorflow/core/common_runtime/gpu/pool_allocator.cc:244] PoolAllocator: After 1986 get requests, put_count=2519 evicted_count=1000 eviction_rate=0.396983 and unsatisfied allocation rate=0.264854 I tensorflow/core/common_runtime/gpu/pool_allocator.cc:256] Raising pool_size_limit_ from 655 to 720 I tensorflow/core/common_runtime/gpu/pool_allocator.cc:244] PoolAllocator: After 28728 get requests, put_count=28680 evicted_count=1000 eviction_rate=0.0348675 and unsatisfied allocation rate=0.0418407 I tensorflow/core/common_runtime/gpu/pool_allocator.cc:256] Raising pool_size_limit_ from 1694 to 1863


Acerca de NUMA - https://software.intel.com/en-us/articles/optimizing-applications-for-numa

En términos generales, si tiene una CPU de doble zócalo, cada uno tendrá su propia memoria y tendrá que acceder a la memoria del otro procesador a través de un enlace QPI más lento. Así que cada CPU + memoria es un nodo NUMA.

Potencialmente, podría tratar dos nodos NUMA diferentes como dos dispositivos diferentes y estructurar su red para optimizar el ancho de banda diferente entre nodos y nodos entre nodos.

Sin embargo, no creo que haya suficiente cableado en TF en este momento para hacer esto ahora. La detección tampoco funciona. Acabo de probar en una máquina con 2 nodos NUMA, y todavía imprimió el mismo mensaje y se inicializó en 1 nodo NUMA.

DMA = acceso directo a la memoria. Podrías copiar cosas de una GPU a otra GPU sin utilizar CPU (es decir, a través de NVlink). La integración de NVLink no está ahí todavía.

En cuanto al error, TensorFlow intenta asignar cerca de la memoria máxima de GPU, por lo que parece que parte de su memoria de GPU ya se ha asignado a otra cosa y la asignación ha fallado.

Puedes hacer algo como a continuación para evitar asignar tanta memoria.

config = tf.ConfigProto(log_device_placement=True) config.gpu_options.per_process_gpu_memory_fraction=0.3 # don''t hog all vRAM config.operation_timeout_in_ms=15000 # terminate on long hangs sess = tf.InteractiveSession("", config=config)


  • successfully opened CUDA library xxx locally significa que la biblioteca se cargó, pero no significa que se usará.
  • successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero significa que su kernel no es compatible con NUMA. Puedes leer sobre NUMA here y here .
  • Found device 0 with properties: tienes 1 GPU que puedes usar. Enumera las propiedades de esta GPU.
  • DMA es el acceso directo a la memoria. Más información en Wikipedia .
  • failed to allocate 11.15G el error explica claramente por qué sucedió esto, pero es difícil decir por qué necesita tanta memoria sin mirar el código.
  • Los mensajes del asignador de grupo se explican en esta respuesta.