2016-04-25 3 views
18

Как интерпретировать вывод TensorFlow для построения и выполнения вычислительных графов на GPGPU?Как интерпретировать выход TensorFlow?

С учетом следующей команды, которая выполняет произвольный скрипт tensorflow с использованием API-интерфейса python.

python3 tensorflow_test.py> из

Первая часть stream_executor кажется, его зависимости нагрузки.

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 

Что такое 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 

Я полагаю, это когда он находит доступные GPU

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 

Некоторые инициализации графического процессора? что такое 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) 

Почему это ошибка E?

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

Великий ответ на то, что делает 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 

ответ

18

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

Грубо говоря, если у вас есть двойной сокет процессора, каждый из них будет иметь свою собственную память и им приходится обращаться к памяти другого процессора через более медленную QPI-связь. Таким образом, каждый процессор + память является узлом NUMA.

Потенциально можно рассматривать две различные узлы NUMA в двух различных устройств и структуры сети с целью оптимизации для различных внутри-узла/между узлами пропускной способности

Однако, я не думаю, что есть достаточно проводки в ТФ прямо сейчас сделать это прямо сейчас. Обнаружение тоже не работает - я просто попробовал на машине с двумя узлами NUMA, и он все еще печатал одно и то же сообщение и инициализировался до 1 узла NUMA.

DMA = Прямой доступ к памяти. Вы могли бы скопировать вещи с одного GPU на другой графический процессор без использования процессора (т. Е. Через NVlink). Интеграция с NVLink еще не существует.

Что касается ошибки, TensorFlow пытается выделить максимальную память GPU, поэтому кажется, что некоторые из ваших GPU-памяти уже выделены на что-то еще, а выделение не удалось.

Вы можете сделать что-то, как показано ниже, чтобы избежать выделения так много памяти

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) 
2
  • successfully opened CUDA library xxx locally означает, что была загружена библиотека, но это не означает, что она будет использоваться.
  • successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero означает, что ваше ядро ​​не поддерживает NUMA.Вы можете прочитать о NUMA here и here.
  • Found device 0 with properties: у вас есть 1 графический процессор, который вы можете использовать. В нем перечислены свойства этого графического процессора.
  • DMA - прямой доступ к памяти. Дополнительная информация о Wikipedia.
  • failed to allocate 11.15G ошибка ясно объясняет, почему это произошло, но трудно сказать, почему вам нужно столько памяти, не глядя на код.
  • сообщения распределителя распределительных устройств объясняются в this answer