2015-12-29 37 views
11

Ho provato diversi esempi di Tensorflow, che funzionano bene sulla CPU ma generano lo stesso errore quando sto provando a eseguirli sulla GPU. Un piccolo esempio è questo:Errore nell'uso di Tensorflow con GPU

import tensorflow as tf 

# Creates a graph. 
a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a') 
b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b') 
c = tf.matmul(a, b) 
# Creates a session with log_device_placement set to True. 
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True)) 
# Runs the op. 
print sess.run(c) 

L'errore è sempre lo stesso, CUDA_ERROR_OUT_OF_MEMORY:

I tensorflow/stream_executor/dso_loader.cc:101] successfully opened CUDA library libcublas.so.7.0 locally 
I tensorflow/stream_executor/dso_loader.cc:101] successfully opened CUDA library libcudnn.so.6.5 locally 
I tensorflow/stream_executor/dso_loader.cc:101] successfully opened CUDA library libcufft.so.7.0 locally 
I tensorflow/stream_executor/dso_loader.cc:101] successfully opened CUDA library libcuda.so locally 
I tensorflow/stream_executor/dso_loader.cc:101] successfully opened CUDA library libcurand.so.7.0 locally 
I tensorflow/core/common_runtime/local_device.cc:40] Local device intra op parallelism threads: 24 
I tensorflow/core/common_runtime/gpu/gpu_init.cc:103] Found device 0 with properties: 
name: Tesla K80 
major: 3 minor: 7 memoryClockRate (GHz) 0.8235 
pciBusID 0000:0a:00.0 
Total memory: 11.25GiB 
Free memory: 105.73MiB 
I tensorflow/core/common_runtime/gpu/gpu_init.cc:103] Found device 1 with properties: 
name: Tesla K80 
major: 3 minor: 7 memoryClockRate (GHz) 0.8235 
pciBusID 0000:0b:00.0 
Total memory: 11.25GiB 
Free memory: 133.48MiB 
I tensorflow/core/common_runtime/gpu/gpu_init.cc:127] DMA: 0 1 
I tensorflow/core/common_runtime/gpu/gpu_init.cc:137] 0: Y Y 
I tensorflow/core/common_runtime/gpu/gpu_init.cc:137] 1: Y Y 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:702] Creating TensorFlow device (/gpu:0) -> (device: 0, name: Tesla K80, pci bus id: 0000:0a:00.0) 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:702] Creating TensorFlow device (/gpu:1) -> (device: 1, name: Tesla K80, pci bus id: 0000:0b:00.0) 
I tensorflow/core/common_runtime/gpu/gpu_bfc_allocator.cc:42] Allocating 105.48MiB bytes. 
E tensorflow/stream_executor/cuda/cuda_driver.cc:932] failed to allocate 105.48M (110608384 bytes) from device: CUDA_ERROR_OUT_OF_MEMORY 
F tensorflow/core/common_runtime/gpu/gpu_bfc_allocator.cc:47] Check failed: gpu_mem != nullptr Could not allocate GPU device memory for device 0. Tried to allocate 105.48MiB 
Aborted (core dumped) 

Credo che il problema ha a che fare con la mia configurazione, piuttosto che l'utilizzo della memoria di questo piccolo esempio. Qualcuno ha qualche idea?

Edit:

ho scoperto che il problema potrebbe essere semplice come qualcun altro l'esecuzione di un lavoro sulla stessa GPU, il che spiegherebbe la piccola quantità di memoria libera. In tal caso: dispiace per occupare il vostro tempo ...

+0

ho incontrato un problema simile e la causa principale è stato un notebook jupyter correva sullo sfondo. La chiusura del notebook ha risolto il mio problema. –

risposta

21

Sembra che ci siano due questioni qui:

  1. Per impostazione predefinita, tensorflow alloca una grande frazione (95%) della memoria disponibile GPU (su ciascun dispositivo GPU) quando si crea un tf.Session. Utilizza uno heuristic che riserva 200 MB di memoria GPU per gli usi "di sistema", ma non lo mette da parte se la quantità di memoria disponibile è smaller than that.

  2. Sembra che tu abbia poca memoria GPU gratuita su uno dei tuoi dispositivi GPU (105.73 MiB e 133.48 MiB). Ciò significa che TensorFlow tenterà di allocare memoria che probabilmente dovrebbe essere riservata al sistema e quindi l'allocazione fallisce.

E 'possibile che si dispone di un altro processo tensorflow (o qualche altro codice GPU-fame) in esecuzione mentre si tenta di eseguire questo programma? Ad esempio, un interprete Python con una sessione aperta — anche se non sta utilizzando la GPU — tenterà di allocare quasi l'intera memoria della GPU.

Attualmente, l'unico modo per limitare la quantità di memoria della GPU che tensorflow usa è la seguente opzione di configurazione (da this question):

# Assume that you have 12GB of GPU memory and want to allocate ~4GB: 
gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.333) 

sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options)) 
Problemi correlati