Theano: Falló la inicialización del dispositivo gpu! Razón = CNMEM_STATUS_OUT_OF_MEMORY

Estoy ejecutando el ejemplo kaggle_otto_nn.py de Keras con el backend de theano . Cuando configuro cnmem=1 , aparece el siguiente error:

 cliu@cliu-ubuntu:keras-examples$ THEANO_FLAGS=mode=FAST_RUN,device=gpu,floatX=float32,lib.cnmem=1 python kaggle_otto_nn.py Using Theano backend. ERROR (theano.sandbox.cuda): ERROR: Not using GPU. Initialisation of device gpu failed: initCnmem: cnmemInit call failed! Reason=CNMEM_STATUS_OUT_OF_MEMORY. numdev=1 /usr/local/lib/python2.7/dist-packages/Theano-0.8.0rc1-py2.7.egg/theano/tensor/signal/downsample.py:6: UserWarning: downsample module has been moved to the theano.tensor.signal.pool module. "downsample module has been moved to the theano.tensor.signal.pool module.") Traceback (most recent call last): File "kaggle_otto_nn.py", line 28, in  from keras.models import Sequential File "build/bdist.linux-x86_64/egg/keras/models.py", line 15, in  File "build/bdist.linux-x86_64/egg/keras/backend/__init__.py", line 46, in  File "build/bdist.linux-x86_64/egg/keras/backend/theano_backend.py", line 1, in  File "/usr/local/lib/python2.7/dist-packages/Theano-0.8.0rc1-py2.7.egg/theano/__init__.py", line 111, in  theano.sandbox.cuda.tests.test_driver.test_nvidia_driver1() File "/usr/local/lib/python2.7/dist-packages/Theano-0.8.0rc1-py2.7.egg/theano/sandbox/cuda/tests/test_driver.py", line 38, in test_nvidia_driver1 if not numpy.allclose(f(), a.sum()): File "/usr/local/lib/python2.7/dist-packages/Theano-0.8.0rc1-py2.7.egg/theano/compile/function_module.py", line 871, in __call__ storage_map=getattr(self.fn, 'storage_map', None)) File "/usr/local/lib/python2.7/dist-packages/Theano-0.8.0rc1-py2.7.egg/theano/gof/link.py", line 314, in raise_with_op reraise(exc_type, exc_value, exc_trace) File "/usr/local/lib/python2.7/dist-packages/Theano-0.8.0rc1-py2.7.egg/theano/compile/function_module.py", line 859, in __call__ outputs = self.fn() RuntimeError: Cuda error: kernel_reduce_ccontig_node_97496c4d3cf9a06dc4082cc141f918d2_0: out of memory. (grid: 1 x 1; block: 256 x 1 x 1) Apply node that caused the error: GpuCAReduce{add}{1}() Toposort index: 0 Inputs types: [CudaNdarrayType(float32, vector)] Inputs shapes: [(10000,)] Inputs strides: [(1,)] Inputs values: ['not shown'] Outputs clients: [[HostFromGpu(GpuCAReduce{add}{1}.0)]] HINT: Re-running with most Theano optimization disabled could give you a back-trace of when this node was created. This can be done with by setting the Theano flag 'optimizer=fast_compile'. If that does not work, Theano optimizations can be disabled with 'optimizer=None'. HINT: Use the Theano flag 'exception_verbosity=high' for a debugprint and storage map footprint of this apply node. 

Parece que no puedo establecer el cnmem en un valor muy grande (alrededor de> 0,9) ya que puede causar el desbordamiento de memoria de la GPU. Y cuando configuro cnmem=0.9 , está funcionando correctamente. Según esto ,

representa el tamaño de inicio (en MB o% de la memoria total de GPU) de la agrupación de memoria.

Y

Esto podría causar la fragmentación de la memoria. Entonces, si tiene un error de memoria mientras usa cnmem, intente asignar más memoria al inicio o desactívela. Si intenta esto, informe su resultado en: ref theano-dev .

Pero si obtuve un error de memoria, ¿por qué debería asignar más memoria al inicio? Y, en mi caso, asignar más memoria al principio parece ser la causa del error.

Esta pregunta se resuelve en base a esto .

Como se indica aquí , el cnmem solo se puede asignar como un float .

0: no habilitado.

0

> 1: use este número en megabytes (MB) de memoria.

Así que funcionará si cnmem=1.0 lugar de cnmem=1 .