2017-07-11 33 views
5

Używam Keras neuronowych szkolenia sieciowe oraz prognozy na GTX 1070 na Windows 10. W większości to działa, ale od czasu do czasu narzekaNieprzewidywalny CUDNN_STATUS_NOT_INITIALIZED Windows

E c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\cuda\cuda_dnn.cc:359] could not create cudnn handle: CUDNN_STATUS_NOT_INITIALIZED 
E c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\cuda\cuda_dnn.cc:366] error retrieving driver version: Unimplemented: kernel reported driver version not implemented on Windows 
E c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\stream_executor\cuda\cuda_dnn.cc:326] could not destroy cudnn handle: CUDNN_STATUS_BAD_PARAM 
F c:\tf_jenkins\home\workspace\release-win\device\gpu\os\windows\tensorflow\core\kernels\conv_ops.cc:659] Check failed: stream->parent()->GetConvolveAlgorithms(&algorithms) 

To nie może być wyjaśnione ani przez dosłownie znaczenie błędu ani błąd OOM.

Jak naprawić?

+0

https://github.com/tensorflow/tensorflow/issues/6698 –

Odpowiedz

2

Spróbuj ograniczyć użycie gpu za pomocą opcji set gpu per_process_gpu_memory_fraction.

Baw się przy nim, aby zobaczyć, co działa, a co nie.

Zalecam użycie .7 jako początkowej linii bazowej.

+0

@Dims Czy myśli wybierając mój odpowiedzieć, aby można było zamknąć? –

1

Spotkałem problem czasami na Windows10 i Keras. Uruchom ponownie, aby rozwiązać problem przez krótki czas, ale zdarzyć się ponownie.

odsyłam do https://github.com/fchollet/keras/issues/1538

import tensorflow as tf 
from keras.backend.tensorflow_backend import set_session 
config = tf.ConfigProto() 
config.gpu_options.per_process_gpu_memory_fraction = 0.3 
set_session(tf.Session(config=config)) 

ustawienia rozwiązać problem zatrzymania.

0

TF doku pomaga mi dużo Allowing GPU memory growth

Pierwszym z nich jest opcja allow_growth, który próbuje przydzielić tylko tyle pamięci GPU na podstawie przydziałów uruchomieniowych: zaczyna się przydzielanie bardzo mało pamięci, a jako Sesje się uruchomić i potrzebujemy więcej pamięci GPU, rozszerzamy obszar pamięci GPU potrzebny do procesu TensorFlow. Zwróć uwagę, że nie zwalniamy pamięci, ponieważ może to prowadzić do jeszcze gorszej fragmentacji pamięci. Aby wyłączyć tę opcję, w opcji w ConfigProto poprzez:

config = tf.ConfigProto() 
config.gpu_options.allow_growth = True 
session = tf.Session(config=config, ...) 

lub

with tf.Session(graph=graph_node, config=config) as sess: 
    ... 

Drugi sposób jest rozwiązaniem per_process_gpu_memory_fraction, które określa część całkowitej ilości pamięci każdego widoczne GPU powinno zostać przydzielone. Na przykład, można powiedzieć TensorFlow aby przydzielić tylko 40% całkowitej pamięci każdego GPU przez:

config = tf.ConfigProto() 
config.gpu_options.per_process_gpu_memory_fraction = 0.4 
session = tf.Session(config=config, ...)