Tensorflow: No se pudo crear el identificador cudnn: CUDNN_STATUS_INTERNAL_ERROR

Creado en 21 dic. 2018  ·  181Comentarios  ·  Fuente: tensorflow/tensorflow

Asegúrese de que se trata de un error. etiqueta: bug_template

Información del sistema

  • ¿He escrito código personalizado (en lugar de usar un script de ejemplo de stock provisto en TensorFlow): Sí y No (descrito a continuación)
  • Plataforma y distribución del sistema operativo (por ejemplo, Linux Ubuntu 16.04): Manjaro
  • Dispositivo móvil (por ejemplo, iPhone 8, Pixel 2, Samsung Galaxy) si el problema ocurre en el dispositivo móvil:
  • TensorFlow instalado desde (fuente o binario): tf-nightly-gpu (19 de diciembre, r1.13)
  • Versión de TensorFlow (use el comando a continuación): 1.13.0-dev20181219
  • Versión de Python: 3.7.1
  • Versión de Bazel (si se compila desde la fuente):
  • Versión de GCC / Compiler (si se compila desde la fuente):
  • Versión CUDA / cuDNN: CUDA 10 con cuDNN 7.4.1
  • Modelo de GPU y memoria: RTX 2070 8GB

Describe el comportamiento actual
Estoy ejecutando el modelo de CNN en MNIST. Cuando estoy corriendo con la GPU, me encuentro
2018-12-20 20:09:13.644176: E tensorflow/stream_executor/cuda/cuda_dnn.cc:334] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR

Investigué un poco y me di cuenta de que es un problema de memoria (que no debería ser el caso, ya que tengo 32 GB de RAM y 64 GB de intercambio. Ejecuté htop cuando ejecuté el modelo y tengo 20 + GB libres, que es más de suficiente para adaptarse a las asignaciones de vRAM de 8 GB.

El uso de gpu_options.allow_growth = True hace que el modelo funcione correctamente, y la configuración os.environ['CUDA_VISIBLE_DEVICES'] = '-1' también funciona. Esto significa que estoy enfrentando un problema de memoria, pero no veo cómo.

Además, usar gpu_options.allow_growth = True no soluciona el mismo problema al intentar ejecutar tensorflow / models / official / mnist / model, que debería tener un comportamiento similar con mi código.

Código para reproducir el problema

import os
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
import math
import time
# Killing optional CPU driver warnings
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
# os.environ['CUDA_VISIBLE_DEVICES'] = '-1'
tf.logging.set_verbosity(tf.logging.ERROR)


class Model:

    def __init__(self, image, label):
        """
        A Model class contains a computational graph that classifies images
        to predictions. Each of its methods builds part of the graph
        on Model initialization. Do not modify the constructor, as doing so
        would break the autograder. You may, however, add class variables
        to use in your graph-building. e.g. learning rate, 

        image: the input image to the computational graph as a tensor
        label: the correct label of an image as a tensor
        prediction: the output prediction of the computational graph,
                    produced by self.forward_pass()
        optimize: the model's optimizing tensor produced by self.optimizer()
        loss: the model's loss produced by computing self.loss_function()
        accuracy: the model's prediction accuracy
        """
        self.image = image
        self.label = label

        # TO-DO: Add any class variables you want to use.

        self.prediction = self.forward_pass()
        self.loss = self.loss_function()
        self.optimize = self.optimizer()
        self.accuracy = self.accuracy_function()

    def forward_pass(self):
        """
        Predicts a label given an image using convolution layers

        :return: the prediction as a tensor
        """
        filter_1 = tf.Variable(tf.truncated_normal([3, 3, 1, 8], stddev=0.1))
        conv_1 = tf.nn.conv2d(self.image, filter_1, [1, 1, 1, 1], "SAME")

        reshaped = tf.reshape(conv_1, shape=[50, -1])

        L1 = reshaped.shape[1].value
        L2 = 500
        W1 = tf.Variable(tf.random_normal([L1, L2], mean=0, stddev=0.01))
        b1 = tf.Variable(tf.random_normal([L2], mean=0, stddev=0.01))
        relu_1 = tf.nn.relu(tf.matmul(reshaped, W1) + b1)

        W2 = tf.Variable(tf.random_normal([L2, 10], mean=0, stddev=0.01))
        b2 = tf.Variable(tf.random_normal([10], mean=0, stddev=0.01))
        logits = tf.nn.relu(tf.matmul(relu_1, W2) + b2)
        return logits

    def loss_function(self):
        """
        Calculates the model cross-entropy loss

        :return: the loss of the model as a tensor
        """
        loss = tf.losses.softmax_cross_entropy(onehot_labels=self.label, logits=self.prediction)
        return loss

    def optimizer(self):
        """
        Optimizes the model loss using an Adam Optimizer

        :return: the optimizer as a tensor
        """
        learning_rate = 0.1
        sgd = tf.train.GradientDescentOptimizer(learning_rate)
        train = sgd.minimize(self.loss)
        return train

    def accuracy_function(self):
        """
        Calculates the model's prediction accuracy by comparing
        predictions to correct labels – no need to modify this

        :return: the accuracy of the model as a tensor
        """
        correct_prediction = tf.equal(tf.argmax(self.prediction, 1),
                                      tf.argmax(self.label, 1))
        return tf.reduce_mean(tf.cast(correct_prediction, tf.float32))


def main():
    t_start = time.time()

    mnist = input_data.read_data_sets("data/mnist/", one_hot=True)
    batch_sz = 50
    batch = 2000

    inputs = tf.placeholder(shape=[batch_sz, 28, 28, 1], dtype=tf.float32)
    labels = tf.placeholder(shape=[batch_sz, 10], dtype=tf.float32)

    model = Model(inputs, labels)

    session_config = tf.ConfigProto(gpu_options=tf.GPUOptions(allow_growth=True))
    sess = tf.Session(config=session_config)

    # sess = tf.Session()

    sess.run(tf.global_variables_initializer())
    for i in range(batch):
        next_image, next_label = mnist.train.next_batch(batch_sz)
        next_image = next_image.reshape((batch_sz, 28, 28, 1))
        sess.run(model.optimize, feed_dict={inputs: next_image, labels: next_label})

    acc, test_images, test_labels = 0, mnist.test.images, mnist.test.labels
    test_batch = math.ceil(len(test_images) / batch_sz)
    for i in range(test_batch):
        batch_images = test_images[i * batch_sz: (i + 1) * batch_sz]
        batch_images = batch_images.reshape((batch_sz, 28, 28, 1))
        batch_labes = test_labels[i * batch_sz: (i + 1) * batch_sz]
        acc += sess.run(model.accuracy, feed_dict={inputs: batch_images, labels: batch_labes})
    acc /= test_batch
    print(acc)

    print(time.time() - t_start, 'seconds')

    return


if __name__ == '__main__':
    main()
TF 2.0 gpu bug

Comentario más útil

Intenté compilar desde la fuente, pero encontré el mismo problema. Finalmente pude solucionar mi problema que estaba configurando config.gpu_options.allow_growth = True .

Todos 181 comentarios

Me he encontrado con el mismo problema con la misma GPU: "CUDNN_STATUS_INTERNAL_ERROR".

GPU RTX 2070
CUDA 10
cuDNN 7.4.2
Ubuntu 18.04
tf-nightly-gpu (r1.13, 13 de enero)
Python 3.6.7

2019-01-15 05:01:03.503415: I tensorflow/stream_executor/platform/default/dso_loader.cc:154] successfully opened CUDA li
brary libcublas.so.10.0 locally
2019-01-15 05:01:03.752563: I tensorflow/stream_executor/platform/default/dso_loader.cc:154] successfully opened CUDA li
brary libcudnn.so.7 locally
2019-01-15 05:01:04.905618: E tensorflow/stream_executor/cuda/cuda_dnn.cc:493] Could not create cudnn handle: CUDNN_STAT
US_INTERNAL_ERROR
2019-01-15 05:01:04.908147: E tensorflow/stream_executor/cuda/cuda_dnn.cc:493] Could not create cudnn handle: CUDNN_STAT
US_INTERNAL_ERROR
2019-01-15 05:01:04.908191: W tensorflow/core/framework/op_kernel.cc:1412] OP_REQUIRES failed at conv_ops_fused.cc:801 :
 Unknown: Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to se
e if a warning log message was printed above.

Tengo el mismo problema corriendo

GPU RTX2080
CUDA 10
cudnn 7.4.2

Probé las siguientes versiones tf tf-nightly-gpu y una versión autocompilada del maestro (060b6e32ad).
Descubrí que es posible establecer las siguientes variables de ENTORNO para obtener más información de depuración.

CUDNN_LOGINFO_DBG = 1;
CUDNN_LOGDEST_DBG = stdout

Entonces me sale el siguiente error:

I0117 14: 11: 24.441819 140433563125568 basic_session_run_hooks.py:594] Guardando puntos de control para 0 en /tmp/mnist/model.ckpt.
2019-01-17 14: 11: 25.916269: I tensorflow / stream_executor / platform / default / dso_loader.cc: 154] abrí con éxito la biblioteca CUDA libcublas.so.10.0 localmente

¡YO! Se llama a la función cudnnCreate () de CuDNN (v7402):
¡yo! Hora: 2019-01-17T14: 11: 26.079184 (0d + 0h + 0m + 0s desde el inicio)
¡yo! Proceso = 29255; Hilo = 29356; GPU = NULO; Handle = NULL; StreamId = NULL.

2019-01-17 14: 11: 26.079151: I tensorflow / stream_executor / platform / default / dso_loader.cc: 154] abrí con éxito la biblioteca CUDA libcudnn.so.7 localmente

¡YO! Se llama a la función cudnnCreate () de CuDNN (v7402):
¡yo! Hora: 2019-01-17T14: 11: 26.571897 (0d + 0h + 0m + 0s desde el inicio)
¡yo! Proceso = 29255; Hilo = 29356; GPU = NULO; Handle = NULL; StreamId = NULL.

2019-01-17 14: 11: 26.571858: E tensorflow / stream_executor / cuda / cuda_dnn.cc: 493] No se pudo crear el identificador cudnn: CUDNN_STATUS_INTERNAL_ERROR
2019-01-17 14: 11: 26.579375: E tensorflow / stream_executor / cuda / cuda_dnn.cc: 493] No se pudo crear el identificador cudnn: CUDNN_STATUS_INTERNAL_ERROR

¡YO! Se llama a la función cudnnCreate () de CuDNN (v7402):
¡yo! Hora: 2019-01-17T14: 11: 26.579803 (0d + 0h + 0m + 0s desde el inicio)
¡yo! Proceso = 29255; Hilo = 29356; GPU = NULL; Handle = NULL; StreamId = NULL.

2019-01-17 14: 11: 26.585818: E tensorflow / stream_executor / cuda / cuda_dnn.cc: 493] No se pudo crear el identificador cudnn: CUDNN_STATUS_INTERNAL_ERROR
2019-01-17 14: 11: 26.585850: W ./tensorflow/stream_executor/stream.h:2109] intentando realizar una operación DNN usando StreamExecutor sin soporte DNN
Rastreo (llamadas recientes más última):
Archivo "/usr/local/lib/python3.6/dist-packages/tensorflow/python/client/session.py", línea 1335, en _do_call
devolver fn (* args)
Archivo "/usr/local/lib/python3.6/dist-packages/tensorflow/python/client/session.py", línea 1320, en _run_fn
opciones, feed_dict, fetch_list, target_list, run_metadata)
Archivo "/usr/local/lib/python3.6/dist-packages/tensorflow/python/client/session.py", línea 1408, en _call_tf_sessionrun
run_metadata)
tensorflow.python.framework.errors_impl.UnknownError: No se pudo obtener el algoritmo de convolución. Esto probablemente se deba a que cuDNN no se pudo inicializar, así que intente ver si se imprimió un mensaje de registro de advertencia arriba.
[[{{node Discriminator_1 / Conv / Conv2D}}]]
[[train / discriminator_train / train_op / control_dependency / _569]]

Durante el manejo de la excepción anterior, se produjo otra excepción:

Rastreo (llamadas recientes más última):
Archivo "/home/dj/projects/gan/tf_models/research/gan/mnist/train.py", línea 151, en
tf.app.run ()
Archivo "/usr/local/lib/python3.6/dist-packages/tensorflow/python/platform/app.py", línea 125, en ejecución
_sys.exit (principal (argv))
Archivo "/home/dj/projects/gan/tf_models/research/gan/mnist/train.py", línea 147, en main
get_hooks_fn = tfgan.get_joint_train_hooks ())
Archivo "/usr/local/lib/python3.6/dist-packages/tensorflow/contrib/gan/python/train.py", línea 1200, en gan_train
config = config)
Archivo "/usr/local/lib/python3.6/dist-packages/tensorflow/contrib/training/python/training/training.py", línea 546, en tren
loss = session.run (train_op, run_metadata = run_metadata)
Archivo "/usr/local/lib/python3.6/dist-packages/tensorflow/python/training/monitored_session.py", línea 693, en ejecución
run_metadata = run_metadata)
Archivo "/usr/local/lib/python3.6/dist-packages/tensorflow/python/training/monitored_session.py", línea 1188, en ejecución
run_metadata = run_metadata)
Archivo "/usr/local/lib/python3.6/dist-packages/tensorflow/python/training/monitored_session.py", línea 1287, en ejecución
subir seis.reraise ( original_exc_info)Archivo "/usr/local/lib/python3.6/dist-packages/six.py", línea 693, en reraiseaumentar el valorArchivo "/usr/local/lib/python3.6/dist-packages/tensorflow/python/training/monitored_session.py", línea 1272, en ejecuciónreturn self._sess.run (argumentos , ** kwargs)
Archivo "/usr/local/lib/python3.6/dist-packages/tensorflow/python/training/monitored_session.py", línea 1336, en ejecución
feed_dict, opciones)
Archivo "/usr/local/lib/python3.6/dist-packages/tensorflow/python/training/monitored_session.py", línea 1362, en _call_hook_before_run
request = hook.before_run (run_context)
Archivo "/usr/local/lib/python3.6/dist-packages/tensorflow/contrib/gan/python/train.py", línea 1061, en before_run
run_context.session.run (self._train_ops)
Archivo "/usr/local/lib/python3.6/dist-packages/tensorflow/python/client/session.py", línea 930, en ejecución
run_metadata_ptr)
Archivo "/usr/local/lib/python3.6/dist-packages/tensorflow/python/client/session.py", línea 1153, en _run
feed_dict_tensor, opciones, run_metadata)
Archivo "/usr/local/lib/python3.6/dist-packages/tensorflow/python/client/session.py", línea 1329, en _do_run
run_metadata)
Archivo "/usr/local/lib/python3.6/dist-packages/tensorflow/python/client/session.py", línea 1349, en _do_call
tipo de aumento (e) (node_def, op, message)
tensorflow.python.framework.errors_impl.UnknownError: No se pudo obtener el algoritmo de convolución. Esto probablemente se deba a que cuDNN no se pudo inicializar, así que intente ver si se imprimió un mensaje de registro de advertencia arriba.
[[Nodo Discriminator_1 / Conv / Conv2D (definido en home / dj / projects / gan / tf_models / research / gan / mnist / networks.py: 152)]]
[[train / discriminator_train / train_op / control_dependency / _569]]

Los errores pueden haberse originado en una operación de entrada.
Operaciones de fuente de entrada conectadas al nodo Discriminator_1 / Conv / Conv2D:
inputs / batch / n (definido en home / dj / projects / gan / tf_models / research / gan / mnist / data_provider.py: 67)

Seguimiento de pila original para 'Discriminator_1 / Conv / Conv2D':
Archivo "home / dj / projects / gan / tf_models / research / gan / mnist / train.py", línea 151, en
tf.app.run ()
Archivo "usr / local / lib / python3.6 / dist-packages / tensorflow / python / platform / app.py", línea 125, en ejecución
_sys.exit (principal (argv))
Archivo "home / dj / projects / gan / tf_models / research / gan / mnist / train.py", línea 87, en main
[FLAGS.batch_size, FLAGS.noise_dims]))
Archivo "usr / local / lib / python3.6 / dist-packages / tensorflow / contrib / gan / python / train.py", línea 118, en gan_model
discriminator_real_outputs = discriminator_fn (datos_real, generador_inputs)
Archivo "home / dj / projects / gan / tf_models / research / gan / mnist / networks.py", línea 176, en incondicional_discriminador
net = _discriminator_helper (img, False, Ninguno, weight_decay)
Archivo "home / dj / projects / gan / tf_models / research / gan / mnist / networks.py", línea 152, en _discriminator_helper
net = layer.conv2d (img, 64, [4, 4], stride = 2)
Archivo "usr / local / lib / python3.6 / dist-packages / tensorflow / contrib / framework / python / ops / arg_scope.py", línea 182, en func_with_args
return func ( args, * current_args)
Archivo "usr / local / lib / python3.6 / dist-packages / tensorflow / contrib / layer / python / layer / layer.py", línea 1155, en convolution2d
conv_dims = 2)
Archivo "usr / local / lib / python3.6 / dist-packages / tensorflow / contrib / framework / python / ops / arg_scope.py", línea 182, en func_with_args
return func ( args, * current_args)
Archivo "usr / local / lib / python3.6 / dist-packages / tensorflow / contrib / layer / python / layer / layer.py", línea 1058, en convolución
salidas = layer.apply (entradas)
Archivo "usr / local / lib / python3.6 / dist-packages / tensorflow / python / keras / engine / base_layer.py", línea 1228, en aplicar
return self .__ call __ (entradas, argumentos , * kwargs)
Archivo "usr / local / lib / python3.6 / dist-packages / tensorflow / python / layer / base.py", línea 531, en __call__
salidas = super (Capa, auto) .__ llamar __ (entradas, argumentos , * kwargs)
Archivo "usr / local / lib / python3.6 / dist-packages / tensorflow / python / keras / engine / base_layer.py", línea 564, en __call__
salidas = self.call (entradas, argumentos , * kwargs)
Archivo "usr / local / lib / python3.6 / dist-packages / tensorflow / python / keras / layer / convolutional.py", línea 196, en la llamada
salidas = self._convolution_op (entradas, self.kernel)
Archivo "usr / local / lib / python3.6 / dist-packages / tensorflow / python / ops / nn_ops.py", línea 966, en __call__
return self.conv_op (inp, filter)
Archivo "usr / local / lib / python3.6 / dist-packages / tensorflow / python / ops / nn_ops.py", línea 591, en __call__
return self.call (inp, filter)
Archivo "usr / local / lib / python3.6 / dist-packages / tensorflow / python / ops / nn_ops.py", línea 208, en __call__
nombre = self.name)
Archivo "usr / local / lib / python3.6 / dist-packages / tensorflow / python / ops / nn_ops.py", línea 1578, en conv2d
nombre = nombre)
Archivo "usr / local / lib / python3.6 / dist-packages / tensorflow / python / ops / gen_nn_ops.py", línea 1040, en conv2d
data_format = data_format, dilataciones = dilataciones, nombre = nombre)
Archivo "usr / local / lib / python3.6 / dist-packages / tensorflow / python / framework / op_def_library.py", línea 788, en _apply_op_helper
op_def = op_def)
Archivo "usr / local / lib / python3.6 / dist-packages / tensorflow / python / util / deprecation.py", línea 501, en new_func
return func ( args, * kwargs)
Archivo "usr / local / lib / python3.6 / dist-packages / tensorflow / python / framework / ops.py", línea 3300, en create_op
op_def = op_def)
Archivo "usr / local / lib / python3.6 / dist-packages / tensorflow / python / framework / ops.py", línea 1801, en __init__
self._traceback = tf_stack.extract_stack ()

¿Alguna idea de alguien? Estoy justo antes de reinstalar mi entorno completo :-(

Intente compilar r1.13 desde la fuente. Llevaría mucho tiempo, pero debería solucionar el problema. Al menos arregló el mío.

Intenté compilar desde la fuente, pero encontré el mismo problema. Finalmente pude solucionar mi problema que estaba configurando config.gpu_options.allow_growth = True .

He tenido el mismo problema (en un RTX 2060, Ubuntu 18.04, Python 3.6.7, CUDA 10.0.130, cuDNN 7.4.2, Tensorflow 1.13.0-rc0 de la fuente). Gracias a la sugerencia de @ va-andrew, lo tengo funcionando con el conjunto de opciones allow_growth .

FWIW, en el curso de la búsqueda de soluciones a esto, parece que este problema es un problema común con la serie RTX (aunque podría ser un problema general con CUDA 10.0, ya que las nuevas tarjetas no admiten las versiones anteriores). Sería fantástico si los valores predeterminados pudieran actualizarse en la versión 1.13 para que no sea necesario configurar opciones especiales para estas tarjetas.

Interviniendo para decir que también experimenté esto bajo la siguiente configuración:

Los contenedores de GPU de Docker de Tensorflow con versiones estables de todo tampoco funcionan (directamente en lugar de informar CUDNN_STATUS_INTERNAL_ERROR)

Curiosamente, ¡todo funciona bien en Windows 10 con Tensorflow v1.12!

Y otros han informado, configurar allow_growth permite que las cosas funcionen correctamente.

El mismo problema aqui.

  • RTX 2070
  • Ubuntu 18.04
  • CudNN 7.4.2 (pero he intentado compilar con otras versiones anteriores sin suerte)
  • Tensorflow 1.13.0-dev20190125 (también probé Tensorflow 1.12 compilado con Cuda 10)

Y como otros han informado, establecer allow_growth = TRUE permite que las cosas funcionen.

Cerrando este problema ya que está resuelto. ¡Gracias!

@ymodak ¿Puede hacer referencia al PR que solucionó este error?

Tengo un problema similar con tf-nightly-gpu-2.0-preview en el RTX 2080

El mismo problema con un RTX2080, pasé dos días compilando y buscando errores hasta que encontré esta solución.
(el allow_growth = true lo arregló)

Me has alegrado el día

¿Cómo se configura allow_growth = true? Tengo tf-nightly-gpu-2.0-preview y probé:

importar tensorflow como tf
config = tf.ConfigProto ()
config.gpu_options.allow_growth = Verdadero
sesión = tf.Session (config = config, ...)

pero obtén este error:

AttributeError Traceback (última llamada más reciente)
en()
1 importar tensorflow como tf
----> 2 config = tf.ConfigProto ()

AttributeError: el módulo 'tensorflow' no tiene atributo 'ConfigProto'

¿Cómo puedo configurar allow_growth en tensorflow 2.0?

ok, lo hice funcionar en tf-nightly-gpu-2.0-preview y ipython notebook agregando esto a mi código:

desde tensorflow.compat.v1 importar ConfigProto
de tensorflow.compat.v1 importar InteractiveSession

config = ConfigProto ()
config.gpu_options.allow_growth = Verdadero
sesión = InteractiveSession (config = config)

mismo problema, con gpu_options.allow_growth = True el problema solucionado.

@newhouseb ¿cómo / dónde estableciste eso cierto para todos los puntos de referencia? ¿Fue un cambio fácil?

¿Es la manta permitir el crecimiento una solución?

Está desactivado de forma predeterminada por una razón, consulte
https://www.tensorflow.org/guide/using_gpu#allowing_gpu_memory_growth

En mi programa la gestión de la memoria es importante

Me gustaría limitar la cantidad de GPU que usa TF porque en mi aplicación de gráficos, la memoria de la GPU se usará para otras cosas y ponerla en un espacio limitado es importante para evitar errores de memoria.

Estoy trabajando en C ++ bajo Windows.

Agregar la opción permitir crecimiento da como resultado un error OOM.

Sin esta línea de código, el modelo funciona bien en la misma máquina con la misma tarjeta.

Con error OOM

options.config.mutable_gpu_options()->set_allow_growth(true);
options.config.mutable_gpu_options()->set_per_process_gpu_memory_fraction(fraction);

Sin error OOM

//options.config.mutable_gpu_options()->set_allow_growth(true);
options.config.mutable_gpu_options()->set_per_process_gpu_memory_fraction(fraction);

Entonces, para resolver este problema con el crecimiento de set allow, se produce una falla de segmento.

@ymodak Este error no está arreglado. Podría decirse que el uso de cualquier tipo de convnet debería funcionar en la configuración predeterminada. Allow_growth debería ser verdadero por defecto, debería arreglarse para que esto funcione, o debería haber un error mejor que CUDNN_STATUS_INTERNAL_ERROR .

@ymodak Parece que este problema se cerró prematuramente. Si bien existe una solución alternativa para este problema, implica cambiar el código de la aplicación. Como resultado, el código de ejemplo no funciona _fuera de la caja_ en las tarjetas RTX y la mayoría de las recetas en línea también necesitarán modificaciones.

@samhodge, ¿no puede evitar OOM usando config.gpu_options.per_process_gpu_memory_fraction = 0.4 como se sugiere en la página de documentación de tensorflow que publicó usted mismo?

Estoy confundido por este truco booleano para habilitar tensorflow-gpu en mi RTX 2080: ¿será este allow_growth = True un problema si uso mi GPU únicamente para un script tensorflow / cuaderno jupyter a la vez? (además del uso estándar de GPU para la pantalla, etc.)

Tengo la intención de establecer una pila ML estática en una computadora y me gustaría saber si esto terminará en un desastre en algún momento (gran búsqueda de cuadrícula, modelos con muchos parámetros, etc.). Todavía no he descubierto si definitivamente necesito compilar a partir de fuentes para intentar evitar este error interno o simplemente cambiar este booleano.

Ok, creo que encontré la fuente de mis problemas antes de crear mi sesión. Mido la RAM de la GPU libre, así que si estoy en una tarjeta de 8 Gb y 6 Gb son gratis, uso una fracción de 0,75 y, ocasionalmente, eso termina en un OOM, pero recientemente tengo estado experimentando con 0,95 * 0,75 y todavía no tengo un OOM. Entonces, si empuja el espacio para la asignación de Tensorflow al límite, a veces choca. Obviamente, si sus entradas y salidas a un Op individual no encajan, será OOM, pero mido contra esto y usaré GPU o CPU dependiendo de cuál se ajuste.

@samhodge genial, por lo que al final el truco booleano allow_growth proporciona una solución si no se inicia una operación importante de GPU en paralelo y si lo que se procesa _ a la vez_ por tensorflow (el tamaño del lote sería crítico) no desbordar la memoria proporcionada por la GPU ...?

Todo usa la GPU incluso tu navegador

Corriendo con el mismo problema en una GTX 1050 usando tensorflow-gpu 1.13.1 de pip con CUDA 10.0 / cuDNN 7.4.2.24/Nvidia driver 410 / Ubuntu 16.04.

Todavía tengo el mismo problema aquí, pero "config.gpu_options.allow_growth = True" no soluciona el problema. Ocurre tanto en TF-gpu 1.14.1 como en TF-gpu 2.0. RTX1070, CUDA 10.0, Ubuntu 18.04, controlador Nvidia 430.09.

Las descripciones de los problemas que está viendo me hacen creer que (una versión particular de) cuDNN intenta asignar memoria de GPU al crear el identificador. Si TensorFlow ya tomó toda la memoria (ya sea porque config.gpu_options.allow_growth = false, o per_process_gpu_memory_fraction cerca de 1.0), no queda memoria para asignar para cuDNN.

Puede confirmar esto ejecutando TensorFlow a través de nvprof y generar un seguimiento de API para inspeccionar la llamada cuMemAlloc que falla.

El número 6698 parece tratar el mismo problema. Algunas personas notaron que habían usado accidentalmente una versión de cuDNN que no coincide con su versión de CUDA. ¿Podría verificar que está utilizando cuDNN para CUDA 10 cuando se ejecuta con CUDA 10?

Resulta que no instalé correctamente cuDNN porque soy un gran tonto. Lo conseguí, reinstalé TF2 todas las noches, agregué las líneas para permitir el crecimiento y todo está bien.

¿Cómo eliminar cudatoolkit y cudnn de Conda?

Dado que cudnn incluido (o incrustado) en Anaconda tiene el siguiente error, quiero eliminar cudatoolkit y cudnn instalados conda, e instalar CUDA y cudnn independientes del sitio web de Nvidia.

Error: no se pudo obtener el algoritmo de convolución. Esto probablemente se deba a que cuDNN no se pudo inicializar, así que intente ver si se imprimió un mensaje de registro de advertencia arriba.

Sin embargo, si bien uso los comandos de la siguiente manera pero no puedo eliminarlos, no puedo eliminarlos.
conda eliminar --nombre cuda --todos
conda eliminar --name cudnn --todos

Veo que dos documentos que incluyen cudatoolkit-10.0.130-0 y cudnn-7.3.1-cuda10.0.0_0 en la ruta como
sigue.

/home/anaconda3/pkgs/cudatoolkit-10.0.130-0
/home/anaconda3/pkgs/cudnn-7.3.1-cuda10.0.0_0

¿Cómo puedo eliminar (o eliminar) cuda y cudnn que se incluyeron (o incrustaron) en Anaconda.

Gracias por adelantado,

Miguel

@ mikechen66 ¿Cuál es la salida de conda? Puede deberse a que otros paquetes dependen de cuda y cudnn. ¿Por qué querrías eliminarlos en primer lugar? Si desea obtener un entorno personalizado, use miniconda en lugar de anaconda. Miniconda solo viene con conda, y necesitas instalar todos los paquetes que necesitas manualmente.

Hola tydlwav:

Gracias por tus comentarios. Después de verificar la compatibilidad de la versión y la fecha de lanzamiento de las bibliotecas centrales, instalé los entornos de desarrollo relacionados, ejecuté el código de prueba simple MNIST y obtuve los resultados de la siguiente manera.

Creo que Anaconda3 ni siquiera puede admitir las bibliotecas centrales de cudnn y TensorFlow. Entonces es un gran problema de Anaconda3. Así que quiero eliminar las bibliotecas livianas cudnn de Anaconda y usar las bibliotecas cuda y cudnn independientes y poderosas de Nvidia para ejecutar el código de prueba. Por favor ayude a dar algunas sugerencias.

  1. Ambientes de instalación

Nvidia GeForce RTX 2060
Controlador de gráficos: NVIDIA-Linux-x86_64-415.27 (15 de enero de 2019)
Primera versión que admite RTX 2060
Anaconda3: Anaconda3-2019.03-Linux-x86_64.sh (04/04/2019)
- cudatoolkit-10.0.130-0
- cudnn-7.3.1-cuda10.0.0_0
- TensorFlow 13.1
- Cuaderno Juputer e ipykernel
- incumplido por Ananconda3

  1. Código de prueba MNIST:

importar keras
de keras.datasets import mnist
de keras.models import Sequential
de keras.layers import Dense, Dropout
de keras.layers import Flatten, MaxPooling2D, Conv2D
de keras.callbacks importar TensorBoard

(X_train, y_train), (X_test, y_test) = mnist.load_data ()

X_train = X_train.reshape (60000,28,28,1) .astype ('float32')
X_test = X_test.reshape (10000,28,28,1) .astype ('float32')

X_train / = 255
Prueba_X / = 255

n_clases = 10
y_train = keras.utils.to_categorical (y_train, n_classes)
y_test = keras.utils.to_categorical (y_test, n_classes)

modelo = secuencial ()
model.add (Conv2D (32, kernel_size = (3,3), activación = 'relu', input_shape = (28,28,1)))
model.add (Conv2D (64, kernel_size = (3,3), activación = 'relu'))
model.add (MaxPooling2D (tamaño_piscina = (2,2)))
model.add (Abandono (0.25))
model.add (Aplanar ())
model.add (Denso (128, activación = 'relu'))
model.add (Abandono (0.5))
modelo.add (Denso (n_clases, activación = 'softmax'))

model.compile (loss = 'categorical_crossentropy', optimizer = 'adam', metrics = ['exactitud'])

tensor_board = TensorBoard ('./ logs / LeNet-MNIST-1')

model.fit (X_train, y_train, batch_size = 128, epochs = 15, verbose = 1,
validation_data = (X_test, y_test), devoluciones de llamada = [tensor_board])

  1. Salidas:

Usando el backend de TensorFlow.

ADVERTENCIA: tensorflow : De /home/mike/anaconda3/envs/tf-gpu/lib/python3.7/site-packages/tensorflow/python/framework/op_def_library.py:263: colocate_with (de tensorflow.python.framework.ops ) está en desuso y se eliminará en una versión futura.
Instrucciones de actualización:
Colocaciones manejadas automáticamente por colocador.
ADVERTENCIA: tensorflow : De /home/mike/anaconda3/envs/tf-gpu/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py:3445: llamando a dropout (desde tensorflow.python.ops.nn_ops) with keep_prob está obsoleto y se eliminará en una versión futura.
Instrucciones de actualización:
Utilice rate lugar de keep_prob . La tarifa debe establecerse en rate = 1 - keep_prob .
ADVERTENCIA: tensorflow : De /home/mike/anaconda3/envs/tf-gpu/lib/python3.7/site-packages/tensorflow/python/ops/math_ops.py:3066: to_int32 (de tensorflow.python.ops.math_ops ) está en desuso y se eliminará en una versión futura.
Instrucciones de actualización:
Utilice tf.cast en su lugar.
Entrene con 60000 muestras, valide con 10000 muestras
Época 1/15

UnknownError Traceback (última llamada más reciente)
en
34
35 model.fit (X_train, y_train, batch_size = 128, epochs = 15, verbose = 1,
---> 36 validation_data = (X_test, y_test), devoluciones de llamada = [tensor_board])

~ / anaconda3 / envs / tf-gpu / lib / python3.7 / site-packages / keras / engine / training.py in fit (self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, ** kwargs)
1037 época_inicial = época_inicial,
1038 pasos_por_epoch = pasos_por_epoch,
-> 1039 pasos_de_validación = pasos_de_validación)
1040
1041 def evaluar (auto, x = Ninguno, y = Ninguno,

~ / anaconda3 / envs / tf-gpu / lib / python3.7 / site-packages / keras / engine / training_arrays.py en fit_loop (modelo, f, ins, out_labels, batch_size, epochs, verbose, callbacks, val_f, val_ins, shuffle, callback_metrics, initial_epoch, steps_per_epoch, validation_steps)
197 ins_batch [i] = ins_batch [i] .toarray ()
198
-> 199 salidas = f (ins_batch)
200 salidas = to_list (salidas)
201 para l, o en zip (out_labels, outs):

~ / anaconda3 / envs / tf-gpu / lib / python3.7 / site-packages / keras / backend / tensorflow_backend.py en __call __ (self, inputs)
2713 return self._legacy_call (entradas)
2714
-> 2715 return self._call (entradas)
2716 más:
2717 si py_any (is_tensor (x) para x en entradas):

~ / anaconda3 / envs / tf-gpu / lib / python3.7 / site-packages / keras / backend / tensorflow_backend.py en _call (self, inputs)
2673 obtenido = self._callable_fn ( valores_matriz, run_metadata = self.run_metadata)2674 más:-> 2675 obtenido = self._callable_fn ( array_vals)
2676 retorno obtenido [: len (self.outputs)]
2677

~ / anaconda3 / envs / tf-gpu / lib / python3.7 / site-packages / tensorflow / python / client / session.py en __call __ (self, args, * kwargs)
1437 ret = tf_session.TF_SessionRunCallable (
1438 self._session._session, self._handle, argumentos, estado,
-> 1439 run_metadata_ptr)
1440 si run_metadata:
1441 proto_data = tf_session.TF_GetBuffer (run_metadata_ptr)

~ / anaconda3 / envs / tf-gpu / lib / python3.7 / site-packages / tensorflow / python / framework / errors_impl.py en __exit __ (self, type_arg, value_arg, traceback_arg)
526 Ninguno, Ninguno,
527 compat.as_text (c_api.TF_Message (self.status.status)),
-> 528 c_api.TF_GetCode (self.status.status))
529 # Elimina el objeto de estado subyacente de la memoria, de lo contrario permanece vivo
530 # ya que hay una referencia al estado de esto desde el rastreo debido a

UnknownError: no se pudo obtener el algoritmo de convolución. Esto probablemente se deba a que cuDNN no se pudo inicializar, así que intente ver si se imprimió un mensaje de registro de advertencia arriba.
[[{{node conv2d_1 / convolution}}]]
[[{{node metrics / acc / Mean}}]]

Hola tydlwav:

Utilizo el siguiente comando para desinstalar tanto cuda como cudnn. Sin embargo, ambas bibliotecas aún se encuentran en Anaconda3 aunque no funcionan en este momento. Supongo que Anaconda3 tiene la intención de proteger las bibliotecas centrales para que no se eliminen. Podría ser la capacidad central de Continuum incluso aunque tenga errores. Intentaré usar Independent Nvdia cuda (sin incluir nvcc) y cudnn o buscaré el nuevo cuda o cudnn con conda para instalarlo.

Comando de desinstalación:

conda desinstalar cudatoolkit

Recopilación de metadatos de paquetes: hecho
Entorno de resolución: hecho

Plan de paquete

ubicación del entorno: / home / mike / anaconda3 / envs / tf-gpu

especificaciones eliminadas:
- cudatoolkit

Los siguientes paquetes serán ELIMINADOS:

cudatoolkit-10.0.130-0
cudnn-7.3.1-cuda10.0_0
cupti-10.0.130-0
keras-2.2.4-0
tensorflow-1.13.1-gpu_py37hc158e3b_0
tensorflow-base-1.13.1-gpu_py37h8d69cac_0
tensorflow-gpu-1.13.1-h0d30ee6_0

Continuar ([y] / n)? y

Preparando transacción: hecho
Verificando transacción: hecho
Ejecutando transacción: hecho

Notas:

Después de desinstalar ambos, Jupyter Notebook mostró "No hay un mudule llamado" tensorflow ". Eso significa que la desinstalación se realizó correctamente. Sin embargo, tanto cudatoolkit como cudnn todavía se encuentran en Anaconda3. Creo que Continuum no los elimina por defecto, aunque ambos ellos no funcionan.

/home/anaconda3/pkgs/cudatoolkit-10.0.130-0
/home/anaconda3/pkgs/cudnn-7.3.1-cuda10.0.0_0

Ya los ha eliminado. Los archivos en pkgs son para instalación. Estos son caché descargados para la instalación. Además, este no es el lugar para discutir los problemas ambientales de Conda. No es relevante para este tema. Es posible que desee probar el desbordamiento de pila.

Estoy un poco confundido por el estado de este problema. Estoy usando un RTX 2080, cuda 10.1, cudnn v7.5.1.10 y tensorflow 1.14.

El uso de permitir el crecimiento funciona, pero tal vez tengo una falta de coincidencia de versión diferente.

¿Habrá una solución para esto en tensorflow 1.14?

Gracias

Gracias. Veo el problema de compatibilidad entre la serie RTX 20XX Turing, TensorFlow y Anaconda. Es obvio que la serie RTX 20XX es compatible con cudnn 7.5.0, TensorFlow solo es compatible con cudnn 7.4, pero Anaconda incluye un 7.3.1 optimizado, es un desajuste total entre los tres proveedores. Además, la serie RTX 20XX tiene un gran problema de compatibilidad con Ubuntu 16.04 LTS. A veces, Ubuntu 16.04 fallaba. Tuve que traer dos memorias USB de arranque para reinstalar el sistema operativo. Por lo tanto, actualicé dos PC a Ubuntu 18.04 LTS e instalé Miniconda. Luego probaré una versión superior de Tensorflow.

Notas:

Nvidia tiene su propio Ubuntu 18.04 LTS personalizado para su plataforma Jetson TX1 / TX2 y Jetson Nano Mobile GPU. Nvidia parece determinar sus nuevos productos, como la serie RTX 20XX, en compatibilidad con Ubuntu 18.04 LTS en lugar de la versión inferior de Ubuntu 16.04. Sin embargo, no sé si Continuum tiene su plan de actualización para la serie Nvidia RTX 20XX Turing.

La serie RTX está bien soportada a partir de ahora. He usado tf con RTX 2070 a través de un entorno conda en una distribución que no es ubuntu. Este debería ser el peor de los casos y aún funciona bien. Cuda y cudnn son compatibles con versiones anteriores, y no debería ser un problema si usa las versiones más nuevas. Simplemente debe crear un nuevo entorno Python 3.6 con conda create -n tf python==3.6.8 y ejecutar conda install tensorflow-gpu .

Eso es genial. He compilado desde la fuente y he tenido clientes que trabajan con Tensorflow 1.12.0 CUDA 10.0 y CUDNN 7.4.2.24 en la mayoría del hardware, pero he tenido problemas con un puñado de clientes con tarjetas RTX con una CNN con cudnn en la GPU. Es posible que haya empaquetado accidentalmente el CUDNN incorrecto para CUDA 9.0; los archivos tienen el mismo nombre.

¿Alguien puede confirmar que estas versiones funcionan en RTX2080 y otras tarjetas basadas en Turing?

Hola tydlwav:

Instalé Miniconda y el entorno de python y tensorflow relacionado de acuerdo con su sugerencia. Todavía tiene el error: No se pudo obtener el algoritmo de convolución. Esto probablemente se deba a que cuDNN no se pudo inicializar .......
Por favor ayude a encontrar una solución.

Consulte los pasos que utilicé.

  1. Instale Python 3.6.8 de acuerdo con sus pautas.
    conda crear -n tf python == 3.6.8

  2. activar tf
    conda activar tf

  3. instale tensorflow-gpu en el entorno tf de acuerdo con sus pautas.
    conda instalar tensorflow-gpu

El paquete instalado incluye cudatoolkit y cudnn de la siguiente manera.
.................................................. ..................................................
cudatoolkit pkgs / main / linux-64 :: cudatoolkit-10.0.130-0
cudnn pkgs / main / linux-64 :: cudnn-7.3.1-cuda10.0_0
.................................................. ..................................................

  1. instale el cuaderno jupyter, ipykernel y el entorno relacionado en la página web.

1). instalar cuaderno jupyter
conda instalar jupyter notebook

2). instalar ipykernel basado en jupyter notebook
conda instalar ipykernel jupyter

3). crear TensorFlow-GPU en la página web de jupyter notebook
python -m ipykernel install --user --name tf-gpu --display-name "TensorFlow-GPU"

  1. Cuaderno jupyter abierto
    1). comando en la página web del cuaderno jupyter
    cuaderno jupyter

2). Haga clic en TensorFlow-GPU
Al hacer clic en el menú "nuevo" y seleccionar "TensorFlow-GPU" en la página web, la celda se muestra en la página web del cuaderno jupyter. La página web se enumera a continuación.
http: // localhost : 8888 / notebooks / Untitled3.ipynb? kernel_name = tf-gpu

  1. Pegar Ejecutar el código de prueba MNIST simple

importar keras
de keras.datasets import mnist
de keras.models import Sequential
de keras.layers import Dense, Dropout
de keras.layers import Flatten, MaxPooling2D, Conv2D
de keras.callbacks importar TensorBoard

(X_train, y_train), (X_test, y_test) = mnist.load_data ()

X_train = X_train.reshape (60000,28,28,1) .astype ('float32')
X_test = X_test.reshape (10000,28,28,1) .astype ('float32')

X_train / = 255
Prueba_X / = 255

n_clases = 10
y_train = keras.utils.to_categorical (y_train, n_classes)
y_test = keras.utils.to_categorical (y_test, n_classes)

modelo = secuencial ()
model.add (Conv2D (32, kernel_size = (3,3), activación = 'relu', input_shape = (28,28,1)))
model.add (Conv2D (64, kernel_size = (3,3), activación = 'relu'))
model.add (MaxPooling2D (tamaño_piscina = (2,2)))
model.add (Abandono (0.25))
model.add (Aplanar ())
model.add (Denso (128, activación = 'relu'))
model.add (Abandono (0.5))
modelo.add (Denso (n_clases, activación = 'softmax'))

model.compile (loss = 'categorical_crossentropy', optimizer = 'adam', metrics = ['exactitud'])

tensor_board = TensorBoard ('./ logs / LeNet-MNIST-1')

model.fit (X_train, y_train, batch_size = 128, epochs = 15, verbose = 1,
validation_data = (X_test, y_test), devoluciones de llamada = [tensor_board])

  1. Errores como el último mensaje mencionado:

UnknownError: no se pudo obtener el algoritmo de convolución. Esto probablemente se deba a que cuDNN no se pudo inicializar, así que intente ver si se imprimió un mensaje de registro de advertencia arriba.
[[{{node conv2d_1 / convolution}}]]
[[{{node metrics / acc / Mean}}]]

Gracias,

Miguel

Hola tydlwav:

Por cierto, también instalé keras con el siguiente comando.
conda instalar keras-gpu

Dado que la instalación es correcta, tengo el error. Así que supongo que es el problema de compatibilidad de versiones entre Miniconda y la serie RTX20XX Turing. El error es el mismo que Anaconda. Me doy cuenta de que las versiones cudnn y cuda en Miniconda y Anaconda son las mismas.

Eso es bastante interesante. Tengo cuda 10 y cudnn7.3 trabajando con conda hace aproximadamente un mes y medio. No he usado tensorflow desde entonces. Si no le funciona, puede compilar desde el código fuente. Eso siempre funciona para mí. Si recién está comenzando, le recomiendo usar pytorch. Te resultará mucho más fácil instalar y hacer que todo funcione.

Hola tydlwav:

Probaré el otro método como pytorch. Ahora que Google lanza tensorflow-gpu 1.14, ¿puedo usar Miniconda para instalar tensorflow-gpu 1.14 independiente en el sitio web de Google Tensorflow de la siguiente manera?

Tensorflow de Google: https://www.tensorflow.org/install/source

Notas:

Conda solo tiene compilaciones de tensorflow-gpu de 1.0.1 a 1.13.1 de la siguiente manera. Las compilaciones son tan antiguas que no pudieron ponerse al día con el TensorFlow oficial de Google y la serie Truing oficial de Nvidia GeForce RTX 20XX (2060 ~ 2080).

Mando:
conda búsqueda tensorflow-gpu

Cargando canales: hecho

Nombre Versión Crear canal
tensorflow-gpu 1.0.1 py27_4 paquetes / gratis
tensorflow-gpu 1.0.1 py35_4 paquetes / gratis
tensorflow-gpu 1.0.1 py36_4 paquetes / gratis
tensorflow-gpu 1.1.0 np111py27_0 pkgs / gratis
tensorflow-gpu 1.1.0 np111py35_0 pkgs / gratis
tensorflow-gpu 1.1.0 np111py36_0 pkgs / gratis
tensorflow-gpu 1.1.0 np112py27_0 pkgs / gratis
tensorflow-gpu 1.1.0 np112py35_0 pkgs / gratis
tensorflow-gpu 1.1.0 np112py36_0 pkgs / gratis
tensorflow-gpu 1.2.1 py27cuda7.5cudnn5.1_0 pkgs / free
tensorflow-gpu 1.2.1 py27cuda7.5cudnn6.0_0 pkgs / gratis
tensorflow-gpu 1.2.1 py27cuda8.0cudnn5.1_0 pkgs / gratis
tensorflow-gpu 1.2.1 py27cuda8.0cudnn6.0_0 pkgs / gratis
tensorflow-gpu 1.2.1 py35cuda7.5cudnn5.1_0 pkgs / free
tensorflow-gpu 1.2.1 py35cuda7.5cudnn6.0_0 pkgs / free
tensorflow-gpu 1.2.1 py35cuda8.0cudnn5.1_0 pkgs / gratis
tensorflow-gpu 1.2.1 py35cuda8.0cudnn6.0_0 pkgs / free
tensorflow-gpu 1.2.1 py36cuda7.5cudnn5.1_0 pkgs / free
tensorflow-gpu 1.2.1 py36cuda7.5cudnn6.0_0 pkgs / free
tensorflow-gpu 1.2.1 py36cuda8.0cudnn5.1_0 pkgs / free
tensorflow-gpu 1.2.1 py36cuda8.0cudnn6.0_0 pkgs / gratis
tensorflow-gpu 1.3.0 0 paquetes / gratis
tensorflow-gpu 1.4.1 0 paquetes / principal
tensorflow-gpu 1.5.0 0 paquetes / principal
tensorflow-gpu 1.6.0 0 paquetes / principal
tensorflow-gpu 1.7.0 0 paquetes / principal
tensorflow-gpu 1.8.0 h7b35bdc_0 pkgs / main
tensorflow-gpu 1.9.0 hf154084_0 pkgs / main
tensorflow-gpu 1.10.0 hf154084_0 pkgs / main
tensorflow-gpu 1.11.0 h0d30ee6_0 pkgs / main
tensorflow-gpu 1.12.0 h0d30ee6_0 pkgs / main
tensorflow-gpu 1.13.1 h0d30ee6_0 pkgs / main

No son viejos, ya que he usado la versión de tf 1.12 de conda con RTX 2070. El hardware nuevo generalmente es compatible con versiones anteriores, y RTX no es diferente. Lo más probable es que haya algún problema de entorno extraño en juego. No tengo acceso a una máquina RTX hasta julio, por lo que no puedo ayudar con las pruebas en este momento. La construcción desde la fuente debería resolver su problema. Nunca he fallado en ejecutar convnets desde tf construido desde la fuente (suponiendo que tenga las configuraciones correctas durante la compilación).

Una vez más, este no es el lugar adecuado para discutir el tema de la distribución de tensorflow. Puede hacer una publicación en stack overflow o reddit y vincularla aquí. Más personas podrán verlo y ayudarlo de esta manera.

Su problema no es un error y definitivamente no es de lo que se trata este problema.

@chsigg, su diagnóstico de que este es un problema con CUDNN al intentar asignar recursos de memoria de GPU que tensorflow ya ha asignado, me parece correcto. Simplemente establecer per_process_gpu_memory_fraction=0.9 lugar de 0.95 fue suficiente para resolver mis problemas.

También estaba enfrentando este problema. Se corrigió actualizando cuDNN a la versión 7.6.

tensorflow.python.framework.errors_impl.UnknownError: Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above

Tensorflow-gpu: 1.13.1
Cuda: 10.0
CuDNN: 7.3.1

Además, Conda instaló tensorflow y CuDNN.
conda list cudnn

cudnn                     7.3.1                cuda10.0_0    anaconda

Cosas que hice:

  1. Conda tensorflow desinstalado.
    conda remove tensorflow
  2. Desinstalar conda cuDNN
    conda remove cudnn
  3. Instalar tensorflow con pip
    pip install tensorflow
  4. Descargue el archivo deb en tiempo de ejecución de cuDNN 7.6 correspondiente desde https://developer.nvidia.com/cudnn
  5. Instálalo con sudo dpkg -i libcudnn_xxxxx_amd64.deb

@nluehr algún comentario? ¿Podemos hacer que MinSystemMemory () cuda / cudnn sea compatible con la versión?

Es legítimo un error de memoria, si usa tf.keras, haga lo siguiente en la parte superior de su archivo
config = tf.ConfigProto ()
config.gpu_options.allow_growth = Verdadero
tf.keras.backend.set_session (tf.Session (config = config))

También encontré este problema y pude resolverlo usando la solución de @ va-andrew, y específicamente, usé la implementación de

EDITAR: Estaba mirando la documentación de tensorflow (https://www.tensorflow.org/guide/using_gpu), y también puede decirle que permita el crecimiento de la memoria configurando la variable de entorno TF_FORCE_GPU_ALLOW_GROWTH en verdadero. También dice que esta configuración es específica de la plataforma, por lo que YMMV (funciona para mí con Ubuntu 18.04).

Como referencia, estoy ejecutando:
Ubuntu 18.04.2 LTS, Gigabyte GeForce RTX 2080 Turbo, controlador NVIDIA 430.26, CUDA 10.0.130, cuDNN 7.4.2.24, tensorflow-gpu 1.13.1, python 3.6. Ejecuto tensorflow desde un entorno virtual, usando spyder 3.3.4.

Tengo una segunda computadora con exactamente el mismo hardware y la configuré siguiendo el mismo conjunto de instrucciones, usé los mismos archivos para realizar la instalación y también tuve este problema en esa máquina. No es de extrañar.

Tengo una tercera computadora con exactamente el mismo hardware, excepto que tiene una 2080 Ti en lugar de la 2080, y la configuré siguiendo el mismo conjunto de instrucciones y nuevamente usé los mismos archivos para realizar la instalación. Pero esta vez, no hubo problema.

Entonces, me hacen creer que no está relacionado con algún conflicto de CUDA, cuDNN y la versión del controlador; no es una instalación incorrecta, etc. Más bien, está relacionada con el modelo de la tarjeta de video; Solo he visto mencionar este problema con RTX 2060, 2070 y 2080.

Afortunadamente, no es un gran inconveniente utilizar la solución alternativa.

También estaba enfrentando este problema. Se corrigió actualizando cuDNN a la versión 7.6.

tensorflow.python.framework.errors_impl.UnknownError: Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above

Tensorflow: 1.13.1
Cuda: 10.0
CuDNN: 7.3.1

Además, Conda instaló tensorflow y CuDNN.
conda list cudnn

cudnn                     7.3.1                cuda10.0_0    anaconda

Cosas que hice:

1. Uninstalled conda tensorflow.
   `conda remove tensorflow`

2. Uninstall conda cuDNN
   `conda remove cudnn`

3. Install tensorflow with pip
   `pip install tensorflow`

4. Download corresponding cuDNN 7.6 runtime deb file from https://developer.nvidia.com/cudnn

5. Install it with `sudo dpkg -i libcudnn7_-1+cuda9.0_amd64.deb`

@ alexforever86 Después de realizar la actualización, ¿está seguro de que se está ejecutando en su GPU y no en la CPU? Parece que está utilizando la GPU antes de realizar la actualización (debido al mensaje de error que hace referencia a cuDNN), pero me pregunto después. Usas "pip install tensorflow", pero debería ser "pip install tensorflow-gpu", ¿no? Además, dijo que está usando CUDA 10, pero el archivo deb de cuDNN que enumeró es para cuda9.0, por lo que no debería funcionar.

Por lo tanto, creo que podría ser el caso de que en realidad no esté utilizando la GPU y, por lo tanto, no es una prueba de que la actualización a cuDNN 7.6 resuelva el problema.

@ synapse8 Tiene toda la razón sobre la versión de tensorflow-gpu y cuDNN. También estoy muy confundido por mi comentario ahora, y ya no recuerdo los detalles. De todos modos, a continuación se muestran las versiones actuales en mi sistema.

pip show tensorflow-gpu
Nombre: tensorflow-gpu
Versión: 1.13.1

nvidia-smi
NVIDIA-SMI 430.26 Versión del controlador: 430.26 Versión CUDA: 10.2

sudo apt search cudnn | grep installed
libcudnn7 / ahora 7.6.0.64-1 + cuda10.0 amd64

@ alexforever86 con la configuración que mencionaste ahora, ¿todavía ves este problema? (Supongo que funciona para ti). Recientemente instalé un sistema con cuda10, controlador 410, 7.6 cudnn y TF-gpu 1.14 (instalación de pip) y no he visto el problema.

@ robzor92 He estado usando tensorflow-gpu 1.13, y por curiosidad, acabo de instalar 1.14 para probar si esto resolvió el problema (para mí). Sigo recibiendo el error y todavía tengo que hacer la solución alternativa de "permitir el crecimiento" (de nuevo, no es tan importante).

¿Qué tarjeta de vídeo está utilizando?

@ synapse8 Lo probé con una GTX 1070.

@ synapse8 También probé el código de muestra proporcionado por este creador de hilos hace un momento, funcionó sin problemas. Sin embargo, no diría que es solo un problema de la línea RTX, ya que vi el mismo problema en una GTX 1050Ti con TF 1.13.1. Usando la misma combinación de driver / cuda / cudnn que publiqué antes.

@ robzor92 Dudo que el problema del 1050Ti sea el pequeño tamaño de VRAM. Las tarjetas RTX encontrarían esto en los modelos básicos CNN MNIST. Dudo que el ajuste de NVIDIA de la asignación de VRAM en las tarjetas RTX haya estropeado las cosas de alguna manera.

Tengo el mismo error en tensorflow 1.14.0 y RTX2080. Pero en mi caso, este error ocurre solo cuando uso la capa de convolución.

2019-07-14 21:48:13.041683: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
2019-07-14 21:48:13.064262: I tensorflow/core/platform/profile_utils/cpu_utils.cc:94] CPU Frequency: 3600000000 Hz
2019-07-14 21:48:13.064955: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x55abe99bcd30 executing computations on platform Host. Devices:
2019-07-14 21:48:13.064967: I tensorflow/compiler/xla/service/service.cc:175]   StreamExecutor device (0): <undefined>, <undefined>
2019-07-14 21:48:13.066219: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcuda.so.1
2019-07-14 21:48:13.153748: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:1005] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2019-07-14 21:48:13.154195: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x55abebb44f00 executing computations on platform CUDA. Devices:
2019-07-14 21:48:13.154207: I tensorflow/compiler/xla/service/service.cc:175]   StreamExecutor device (0): GeForce RTX 2080, Compute Capability 7.5
2019-07-14 21:48:13.154317: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:1005] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2019-07-14 21:48:13.154707: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1640] Found device 0 with properties: 
name: GeForce RTX 2080 major: 7 minor: 5 memoryClockRate(GHz): 1.71
pciBusID: 0000:01:00.0
2019-07-14 21:48:13.154845: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcudart.so.10.0
2019-07-14 21:48:13.155504: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcublas.so.10.0
2019-07-14 21:48:13.156112: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcufft.so.10.0
2019-07-14 21:48:13.156265: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcurand.so.10.0
2019-07-14 21:48:13.157040: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcusolver.so.10.0
2019-07-14 21:48:13.157646: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcusparse.so.10.0
2019-07-14 21:48:13.159661: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcudnn.so.7
2019-07-14 21:48:13.159730: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:1005] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2019-07-14 21:48:13.160165: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:1005] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2019-07-14 21:48:13.160542: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1763] Adding visible gpu devices: 0
2019-07-14 21:48:13.160559: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcudart.so.10.0
2019-07-14 21:48:13.161120: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1181] Device interconnect StreamExecutor with strength 1 edge matrix:
2019-07-14 21:48:13.161129: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1187]      0 
2019-07-14 21:48:13.161133: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1200] 0:   N 
2019-07-14 21:48:13.161331: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:1005] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2019-07-14 21:48:13.161730: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:1005] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2019-07-14 21:48:13.162120: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1326] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 6794 MB memory) -> physical GPU (device: 0, name: GeForce RTX 2080, pci bus id: 0000:01:00.0, compute capability: 7.5)
2019-07-14 21:48:13.497639: I tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcudnn.so.7
2019-07-14 21:48:14.077729: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
2019-07-14 21:48:14.080055: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
Traceback (most recent call last):
  File "test.py", line 16, in <module>
    print(model.predict(test_inputs))
  File "/home/yudai/.local/share/virtualenvs/pipenv_practice-DKmRVcs4/lib/python3.7/site-packages/tensorflow/python/keras/engine/training.py", line 1078, in predict
    callbacks=callbacks)
  File "/home/yudai/.local/share/virtualenvs/pipenv_practice-DKmRVcs4/lib/python3.7/site-packages/tensorflow/python/keras/engine/training_arrays.py", line 363, in model_iteration
    batch_outs = f(ins_batch)
  File "/home/yudai/.local/share/virtualenvs/pipenv_practice-DKmRVcs4/lib/python3.7/site-packages/tensorflow/python/keras/backend.py", line 3292, in __call__
    run_metadata=self.run_metadata)
  File "/home/yudai/.local/share/virtualenvs/pipenv_practice-DKmRVcs4/lib/python3.7/site-packages/tensorflow/python/client/session.py", line 1458, in __call__
    run_metadata_ptr)
tensorflow.python.framework.errors_impl.UnknownError: 2 root error(s) found.
  (0) Unknown: Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above.
     [[{{node conv2d/Conv2D}}]]
  (1) Unknown: Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above.
     [[{{node conv2d/Conv2D}}]]
     [[flatten/Reshape/_7]]
0 successful operations.
0 derived errors ignored.

Intenté config.gpu_options.allow_growth = True , pero no resuelve este error.

Quiero que alguien me ayude.

Gracias.

Mismo problema con RTX 2070

Hice una observación interesante sobre esto, que podría ayudar a rastrear este error o encontrar una solución viable:
También obtengo el error Failed to get convolution algorithm con referencia a Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR .
Sistema: computadora portátil con Nvidia Quadro P2000, Ubuntu 18.04, tf 1.13.1, cuda10, cudnn 7.4.2
Como se mencionó, puedo ejecutar el programa sin problemas usando allow_growth , así que gracias por eso, lo suficientemente bueno para mí.

Interesante: obtengo este error solo cuando uso tf.layers.conv... pero cambiar a tf.keras.layers.... permite que el programa se ejecute sin allow_growth , por lo que algo en el código de keras parece funcionar mejor que en el tf código. Quizás alguien pueda usar esta información para encontrar una solución de keras.
Me quedo con los tf.layers por ahora, ya que brindan un intercambio de peso fácil a través de alcances variables, que lamentablemente no son compatibles con keras.

@ DavidS3141 Es interesante. En mi caso, la única capa de convolución no funciona tanto en tf.layers como en tf.keras.layers ...

Cuando uso pytorch, torch.cuda.is_available es True y puedo usar la capa de convolución sin ningún problema, así que creo que la causa es el tensorflow, pero no sé qué está mal.

Estoy de acuerdo con @ Hayashi-Yudai: Lo mismo ocurre con MXNet. La configuración idéntica funciona bien cuando falla Tensorflow.

Medio ambiente:
RTX2080
Ubuntu 18.10
Conductor 430.26
CUDA 10.0 (también 10.1, que aún no es compatible con TF)
cuDNN 7.6.1
mxnet-cu100 1.4.1
tensorflow-gpu 1.14.0

Hola chicos, estoy usando los pesos del modelo pre-entrenado con la red troncal ResNet50 en el conjunto de datos COCO para entrenar en mi conjunto de datos CSV. Recibo este error: Desconocido: no se pudo obtener el algoritmo de convolución.
- tamaño de lote 7 - pasos 9 - épocas 4
--snapshot-path snapshots --tensorboard-dir tensorboard
csv dataset / train.csv dataset / classes.csv Intenté resolver el problema mediante el siguiente script en la línea de comandos en el entorno virtual:
pitón

importar tensorflow

desde tensorflow.compat.v1 importar ConfigProto
de tensorflow.compat.v1 importar InteractiveSession
config = ConfigProto ()
config.gpu_options.allow_growth = Verdadero
sesión = InteractiveSession (config = config)

tanto como
importar tensorflow como tf
config = tf.ConfigProto ()
config.gpu_options.allow_growth = Verdadero
session = tf.Session (config = config) pero no resolvió mi error:

Estoy usando: -
Ubuntu 16.0
Cuda: 10.0
Tensorflow 1.14.0

Error:
tensorflow.python.framework.errors_impl.UnknownError: 2 errores de raíz encontrados. │ | No se encontraron procesos en ejecución |
(0) Desconocido: no se pudo obtener el algoritmo de convolución. Esto probablemente se deba a que cuDNN no se pudo inicializar, así que intente ver si aparece una advertencia │ + ------------------------------- ---------------------------------------------- +
El mensaje de registro se imprimió arriba. │
[[{{nodo conv1 / convolución}}]] │
[[pérdida / agregar / _2377]] │
(1) Desconocido: no se pudo obtener el algoritmo de convolución. Esto probablemente se deba a que cuDNN no se pudo inicializar, así que intente ver si aparece una advertencia │
El mensaje de registro se imprimió arriba. │
[[{{nodo conv1 / convolución}}]] │
0 operaciones exitosas. │
0 errores derivados ignorados. │
terminar llamado sin una excepción activa │
Abortado (núcleo volcado)
Cualquier ayuda sería apreciada.

El mismo problema aqui. La solución Allow_growth funciona. De lo contrario, obtengo este error en el conjunto de datos de tensorflow de MNIST más básico.

RTX2060 móvil aquí.

El problema ocurre con tensorflow compilado desde la rama r2.0, así como con TF 1.4 instalado a través de conda con conda (tensorflow-gpu).

@ Hayashi-Yudai

Intenté config.gpu_options.allow_growth = True, pero no resuelve este error.

¿Cuáles fueron los comandos exactos que agregó a su código? Pruebe lo siguiente en su lugar si es diferente ...

config = tf.ConfigProto ()
config.gpu_options.allow_growth = Verdadero
tf.keras.backend.set_session (tf.Session (config = config))

@ synapse8 Gracias por tu comentario. Lo intenté pero el resultado fue el mismo.

Por cierto, probé nvidia-docker y salió bien, excepto que la versión de Python es 3.5.
https://docs.nvidia.com/deeplearning/frameworks/tensorflow-release-notes/running.html#running

Una información adicional, si no le importa usar python 3.6.8 y tensorflow-gpu 1.12.0, puede usar anaconda.

conda create -n <virtual env name> python=3.6.8
conda install tensorflow-gpu==1.12.0
conda install cudnn==7.3.1    # By default, cudnn7.6 is installed but it causes the error

Probé la construcción de tf-2.0.0-beta1 a partir de fuentes con CUDA-10.1 y CUDNN-7.6.2.4 y el error no se manifiesta.

Puede encontrar imágenes de docker para crear un paquete tf-gpu y un paquete tf-base aquí:
https://github.com/edowson/docker-tensorflow

El canal anaconda no tiene cudnn==7.6.2 al momento de escribir este comentario.

Windows 7, me golpeó la cabeza contra la pared por Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR durante bastante tiempo tratando de instalar una nueva máquina.

Las reinstalaciones, muchas otras cosas en este y otros hilos no lo arreglaron.

Mientras probaba que no tener cudnn64_7.dll causaría un error diferente al CUDNN_STATUS_INTERNAL_ERROR , cambié el nombre de la dll. Confirmando que el error fue un error de tipo CUDNN NOT INSTALLED , deshice el cambio de nombre del archivo.

Mágicamente, todo empezó a funcionar.

No tengo idea de por qué ni cómo, pero lo hace. Ojalá esto ayude a alguien más. Si no es así, solo te llevará unos segundos intentarlo.

Encontré que este problema fue causado por mí haciendo dos llamadas erróneamente a tf.Session

sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))

# several lines of code later...

sess = tf.Session(config=config)

Probablemente no sea la causa principal para la mayoría de las personas, pero podría valer la pena buscarla.

Solo para compartir "allow_growth = True" resuelve el problema de mi sistema a continuación
rtx 2080ti, ubuntu18.04, cuda9.0, cudnn7, tf1.9

config = tf.ConfigProto ()
config.gpu_options.allow_growth = Verdadero
sesión = tf.Session (config = config)

Tiene que ver con la fracción de memoria disponible para cargar recursos de GPU para crear un identificador cudnn, también conocido como per_process_gpu_memory_fraction .
Reducir esta fracción de memoria usted mismo resolverá el error.

> sess_config = tf.ConfigProto(gpu_options =
> tf.GPUOptions(per_process_gpu_memory_fraction=0.7),
> allow_soft_placement = True)
> 
> with tf.Session(config=sess_config) as sess:
>      sess.run([whatever])

Utilice la fracción más pequeña que pueda caber en su memoria. (En el código, uso 0.7, puede comenzar con 0.3 o incluso más pequeño, luego aumentar hasta obtener el mismo error, ese es su límite).
Páselo a su tf.Session() o tf.train.MonitoredTrainingSession() o sv.managed_session() del Supervisor como config.

Esto debería permitir que su GPU cree un identificador cudnn para su código de TensorFlow.

Como se explica aquí , el nuevo enfoque en TF 2.0 para configurar config.gpu_options.allow_growth = True es:

gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus:
  # Currently, memory growth needs to be the same across GPUs
  try:
    for gpu in gpus:
      tf.config.experimental.set_memory_growth(gpu, True)
  except RuntimeError as e:
    print(e)

Con este fragmento de código y TF 2.0 RC1, el error ya no aparece.
Sin embargo, debido a la cantidad de personas que tienen una GPU Nvidia 20XX, creo que sería una buena idea abordar este problema de forma nativa antes de que se lance la versión final de TF 2.0.

Tuve el mismo problema con 1080Ti y TitanX en TF1.4 y las sugerencias de @ va-andrew y @oscarlinux me salvaron el día. Lo que me recuerda en primer lugar por qué me cambié a Pytorch y nunca regresé. Desafortunadamente, todavía hay personas que usan TF ... así que todavía tengo que pasar por este dolor cada vez que uso su código base ... tal vez sea hora de jugar un poco con ONNX.

Para cualquier otra persona que encuentre esto después de actualizar a tensorflow 2.0, la API y el código son ligeramente diferentes.

Ubuntu 18
Tensorflow 2.0
Tensorflow-gpu 2.0
GeForce RTX 2070

Código actualizado para este sistema.

import tensorflow as tf
config = tf.compat.v1.ConfigProto()
config.gpu_options.allow_growth = True
session = tf.compat.v1.Session(config=config)

Esta solución funcionó para mí. (TF-GPU 2.0, Windows 10, GeForce RTX 2070)

physical_devices = tf.config.experimental.list_physical_devices('GPU')
assert len(physical_devices) > 0, "Not enough GPU hardware devices available"
tf.config.experimental.set_memory_growth(physical_devices[0], True)

Agregue un punto de datos adicional:
rtx 2080ti, ubuntu18.04, cuda10.0, cudnn7
En mi caso no funciona con tf1.14 y 1.15rc3

@ w4nderlust , para 1.14 y 1.15 querrá continuar configurando la opción de configuración de sesión config.gpu_options.allow_growth = True . ¿Es que lo que está informando no funciona, o simplemente el mecanismo tf.config.experimental ?

@ w4nderlust , para 1.14 y 1.15 querrá continuar configurando la opción de configuración de sesión config.gpu_options.allow_growth = True . ¿Es que lo que está informando no funciona, o simplemente el mecanismo tf.config.experimental ?

Lo siento debería haber sido más preciso, estoy informando que sin config.gpu_options.allow_growth = True todavía no funciona en mi configuración con 1,14 y 1,15rc3.

Creo que encontré una solución mejor que la config.gpu_options.allow_growth = True .

Para mi configuración (_RTX 2070_, imagen de la ventana acoplable _tensorflow: 1.15.0-gpu-py3_), configurar la configuración como se muestra a continuación evita el _CUDNN_STATUS_INTERNAL_ERROR_ mientras aún asigna
Esto es muy útil para modelos grandes que no cabrían en la memoria en el modo allow_growth pero que solo encajan cuando se asigna toda la memoria.

Para asignar toda la memoria en RTX:
config.gpu_options.per_process_gpu_memory_fraction = 1.0

Para asignar toda la memoria en RTX:
config.gpu_options.per_process_gpu_memory_fraction = 1.0

@PoloShock
Probé esto con TF 2.0 y no parece funcionar.
Ubuntu18.04, RTX 2080, CUDA10, cudnn 7.6.

Para TF 2.0, la API para limitar el uso de memoria de la GPU ha cambiado.

gpus = tf.config.experimental.list_physical_devices('GPU')

tf.config.experimental.set_virtual_device_configuration(gpus[0], [tf.config.experimental.VirtualDeviceConfiguration(memory_limit=1024)]

@nluehr , ¿entiende por qué este problema solo aparece en RTX? ¿Podría ser porque tenemos otras aplicaciones que lo usan como una GPU de pantalla al mismo tiempo que TensorFlow?

Es difícil para mí depurar esto directamente porque no tengo acceso a una GPU RTX.

@sanjoy Estoy ejecutando display en gpu integrado. No hay otras aplicaciones en mi única gpu RTX mientras ejecuto TensorFlow.

Intenté usar eso para tensorflow 2.0:

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

Soluciona el error cudnn en mi rtx2080, ¡pero el entrenamiento es tan rápido como mi 1050Ti en mi laptop!
Mientras entrena a una CNN:

Tue Nov 12 19:22:35 2019       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.26       Driver Version: 440.26       CUDA Version: 10.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce RTX 2080    Off  | 00000000:2D:00.0 Off |                  N/A |
|  0%   37C    P2    75W / 265W |   2904MiB /  7979MiB |     27%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      1026      G   /usr/lib/Xorg                                200MiB |
|    0      6420      G   cinnamon                                      43MiB |
|    0     21073      C   /home/clementpoiret/anaconda3/bin/python    2647MiB |
+-----------------------------------------------------------------------------+

Añadiendo

gpus = tf.config.experimental.list_physical_devices('GPU')
tf.config.experimental.set_virtual_device_configuration(gpus[0], [tf.config.experimental.VirtualDeviceConfiguration(memory_limit=7000)]

No resolví el problema, sin allow_growth obtengo el error cudnn y, de todos modos, mi RTX solo está usando algo como 3Gb o memoria.

Alguna idea ?

Lo intenté

    gpus = tf.config.experimental.list_physical_devices('GPU')
    tf.config.experimental.set_memory_growth(gpus[0], True)
    tf.config.experimental.set_virtual_device_configuration(
        gpus[0],
        [tf.config.experimental.VirtualDeviceConfiguration(memory_limit=7900)])

pero cudnn sigue arrojando un error

También obtengo este error en la imagen de Docker de tensorflow 1.15.0-py3-gpu (Ubuntu 18.04) con dos GPU Titan V (@sanjoy), no RTX. Sin embargo, este error solo parece ocurrirme en mi GPU0 que tiene Xorg y gnome-shell usando memoria GPU0 mientras que GPU1 solo tiene Python usando GPU mem y no arroja este error. Desafortunadamente, el error también es intermitente: a veces podré eliminar el contenedor de la ventana acoplable, volver a crearlo con la misma configuración y el mismo código, luego el error desaparecerá. O no.

Pude solucionarlo usando la interfaz de backend de Keras con:

import tensorflow as tf

config = tf.ConfigProto()
config.gpu_options.allow_growth = True
allow_growth_session = tf.Session(config=config)
tf.keras.backend.set_session(allow_growth_session)

A continuación se muestra mi nvidia-smi en ambas GPU

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.26       Driver Version: 440.26       CUDA Version: 10.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  TITAN V             Off  | 00000000:01:00.0  On |                  N/A |
| 46%   63C    P2    51W / 250W |   7936MiB / 12065MiB |     31%      Default |
+-------------------------------+----------------------+----------------------+
|   1  TITAN V             Off  | 00000000:02:00.0 Off |                  N/A |
| 52%   70C    P2   131W / 250W |  12014MiB / 12066MiB |     60%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      1564      G   /usr/lib/xorg/Xorg                            56MiB |
|    0      1607      G   /usr/bin/gnome-shell                          58MiB |
|    0      2428      G   /usr/lib/xorg/Xorg                           442MiB |
|    0      2574      G   /usr/bin/gnome-shell                         289MiB |
|    0      3292      G   ...p/pycharm-professional/167/jbr/bin/java    12MiB |
|    0      6794      G   anki                                          60MiB |
|    0     10336      G   /usr/lib/firefox/firefox                       6MiB |
|    0     16986      C   python                                      6981MiB |
|    1      4057      C   python                                     12001MiB |
+-----------------------------------------------------------------------------+

Tengo el mismo problema que @clementpoiret con TF 2.0 instalado a través de conda. Al usar la bandera allow_growth , el problema desaparece, pero eso también hace que el entrenamiento sea muy, muy lento, más lento que el que tenía en TF 1.x ... ¿Ansioso primero, eh?

@clementpoiret y @EKami , ¿acelera tu entrenamiento si reemplazas config.gpu_options.allow_growth = True con config.gpu_options.per_process_gpu_memory_fraction = 0.8 ? Puede experimentar para ver qué fracción hace el mayor uso de su gpu.

@ synapse8 No veo algo equivalente en la documentación de tensorflow 2.0, ¿alguna forma de hacerlo con tf.config.experimental?

Editar: intentaré configurar la memoria de esta manera, para ver si está resolviendo el problema:

import subprocess
import tensorflow as tf


def get_gpus_memory():
    """Get the max gpu memory.

    Returns
    -------
    usage: list
        Returns a list of total memory for each gpus.
    """
    result = subprocess.check_output([
        "nvidia-smi", "--query-gpu=memory.total",
        "--format=csv,nounits,noheader"
    ]).decode("utf-8")

    gpus_memory = [int(x) for x in result.strip().split("\n")]
    return gpus_memory


def setup_gpus(allow_growth=True, memory_fraction=.9):
    """Setup GPUs.

    Parameters:
    allow_growth (Boolean)
    memory_fraction (Float): Set maximum memory usage, with 1 using
        maximum memory
    """
    gpus = tf.config.experimental.list_physical_devices("GPU")
    if gpus:
        try:
            # Currently, memory growth needs to be the same across GPUs
            for i, gpu in enumerate(gpus):
                memory = get_gpus_memory()[i]

                tf.config.experimental.set_memory_growth(gpu, allow_growth)

                # Setting memory limit to max*fraction
                tf.config.experimental.set_virtual_device_configuration(
                    gpu, [
                        tf.config.experimental.VirtualDeviceConfiguration(
                            memory_limit=memory * memory_fraction)
                    ])

                logical_gpus = tf.config.experimental.list_logical_devices(
                    "GPU")
                print(len(gpus), "Physical GPUs,", len(logical_gpus),
                      "Logical GPUs")
        except RuntimeError as e:
            # Memory growth must be set before GPUs have been initialized
            print(e)

De esta manera podemos llamar convenientemente a setup_gpus(True, .9)

@clementpoiret : tenga en cuenta que la llamada tf.config.experimental.set_memory_growth es innecesaria ya que tf.config.experimental.set_virtual_device_configuration anula esa marca, ya que corta la memoria de la GPU y preasigna la memoria asignada.

Este problema no se limita al RTX. O TF 2.0.

Añadiendo:
_desde tensorflow.compat.v1 importar ConfigProto
de tensorflow.compat.v1 importar InteractiveSession
config = ConfigProto ()
config.gpu_options.allow_growth = Verdadero
sesión = InteractiveSession (config = config) _

Resuelve el problema "No se pudo crear el identificador cudnn: CUDNN_STATUS_INTERNAL_ERROR" con el entorno de la siguiente manera:

nvidia-smi | NVIDIA-SMI 430.50 Driver Version: 430.50 CUDA Version: 10.1 | | 0 GeForce GT 1030 | 49% 67C P0 N/A / 30W | 1957MiB / 2000MiB | 94%

python -c 'import tensorflow as tf; print(tf.__version__)' 1.14.0
¿Podría ser este un problema máximo de asignación de bloques contiguos con los controladores NVIDIA? ¿Dónde está bien asignar la misma cantidad total de memoria pero en bloques más pequeños?

Hola,

No puedo reproducir esto en mi máquina, así que necesitaré ayuda para hacer esto. ¿Tenemos a alguien aquí que pueda reproducir el problema y esté dispuesto a realizar una depuración práctica?

Como punto de partida, me gustaría entender por qué MinSystemMemory no conserva suficiente memoria para cuDNN. Si alguien con una configuración que reproduce este problema puede agregar algunos registros (como un parche local) para descubrir la cantidad de memoria devuelta por MinSystemMemory , sería genial. ¿Y el aumento del número mágico 0.05 en MinSystemMemory ayuda a la situación?

@sanjoy Tengo una versión que presenta este problema. ¿Cómo puedo acceder a MinSystemMemory o "configurar el número mágico 0.05"? He vuelto a usar cuda 9.1 en su mayor parte, pero no me importa probar algunas cosas.

@odinsbane , tendrás que compilar TensorFlow desde la fuente para hacer lo que sugiero a continuación.

El primer paso es agregar LOG(INFO) o std::cerr líneas a MinSystemMemory para imprimir available_memory y el valor de retorno de MinSystemMemory . ¿Está available_memory acuerdo con lo que imprime nvidia-smi ? ¿Cuánta memoria le estamos dejando al sistema?

En segundo lugar, ¿ayudar en algo aumentar el número mágico 0.05 a, digamos, 0.07 ?

¡Este funciona! ¡Gracias chicos!

from keras.backend.tensorflow_backend import set_session
$ import tensorflow as tf
$ config = tf.ConfigProto()
$ config.gpu_options.allow_growth = True
$ config.log_device_placement = True
$ sess = tf.Session(config=config)
$ set_session(sess)

nos enfrentamos a un problema similar en nuestro RTX 2070 (Ubuntu 18.04, TF2) Probamos diferentes combinaciones de versiones CUDA 10.0 y libcudnn7.xxx, pero el error sigue apareciendo nuevamente.
En otra máquina tenemos una GTX 1080ti y esta funciona sin problemas.
El controlador nvidia es 430.50 en ambos casos.

No es causado por tf.keras.utils.plot_model , lo elimino y este error sigue apareciendo, pero con menos frecuencia.
Actualización: Encuentro que esto solo sucede cuando uso tf.keras.utils.plot_model . Seguiré intentando.

============

Tengo un problema similar con RTX 2080 Ti en Ubuntu 18.04.3 LTS, tf 1.15, cuda 10.0.

Lo extraño en mi caso es que esto solo sucede muy ocasionalmente, y una vez que sucede, durará de minutos a horas y luego simplemente desaparecerá .

Probé todas las soluciones anteriores y ninguna puede solucionarlo de inmediato. Traté de no hacer nada y solo esperar, finalmente desaparecerá.

Lo que también probé y no se menciona arriba:

  1. Eliminar directorio ~/.nv
  2. Simplemente reinicie

FYI, registros de errores

2019-12-21 14:47:30.785233: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcublas.so.10.0
2019-12-21 14:47:30.959825: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudnn.so.7
2019-12-21 14:47:31.722238: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
2019-12-21 14:47:31.749524: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
Traceback (most recent call last):
  File "train_cifar.py", line 204, in <module>
    main()
  File "train_cifar.py", line 133, in main
    validation_data=(x_test, output_test), callbacks=callbacks, verbose=0)
  File "/home/xxx/anaconda3/envs/tf-1-gpu/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/training.py", line 727, in fit
    use_multiprocessing=use_multiprocessing)
  File "/home/xxx/anaconda3/envs/tf-1-gpu/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/training_generator.py", line 603, in fit
    steps_name='steps_per_epoch')
  File "/home/xxx/anaconda3/envs/tf-1-gpu/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/training_generator.py", line 265, in model_iteration
    batch_outs = batch_function(*batch_data)
  File "/home/xxx/anaconda3/envs/tf-1-gpu/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/training.py", line 1017, in train_on_batch
    outputs = self.train_function(ins)  # pylint: disable=not-callable
  File "/home/xxx/anaconda3/envs/tf-1-gpu/lib/python3.7/site-packages/tensorflow_core/python/keras/backend.py", line 3476, in __call__
    run_metadata=self.run_metadata)
  File "/home/xxx/anaconda3/envs/tf-1-gpu/lib/python3.7/site-packages/tensorflow_core/python/client/session.py", line 1472, in __call__
    run_metadata_ptr)
tensorflow.python.framework.errors_impl.UnknownError: 2 root error(s) found.
  (0) Unknown: Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above.
     [[{{node stem_layer/conv2d/Conv2D}}]]
     [[metrics/classifier_acc/Identity/_1749]]
  (1) Unknown: Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above.
     [[{{node stem_layer/conv2d/Conv2D}}]]
0 successful operations.
0 derived errors ignored.

Nos enfrentamos a problemas relevantes

Especificaciones del Sistema

  • Ubuntu 18.04.3 LTS
  • RTX 2070
  • pitón 3.7.1
  • tf-gpu 2.0.0
  • V10.0.130 CUDA
  • libcudnn7 7.6.2

El error se activa cuando intento usar LSTM, GRU, RNN, etc.

Error real

2019-12-23 16:09:00.912238: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudnn.so.7 2019-12-23 16:09:01.408990: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR 2019-12-23 16:09:01.409043: W tensorflow/core/framework/op_kernel.cc:1622] OP_REQUIRES failed at cudnn_rnn_ops.cc:1491 : Unknown: Fail to find the dnn implementation.

File "/home/alex/anaconda3/envs/tf/lib/python3.7/site-packages/tensorflow_core/python/keras/layers/recurrent_v2.py", line 961, in call **cudnn_lstm_kwargs) File "/home/alex/anaconda3/envs/tf/lib/python3.7/site-packages/tensorflow_core/python/keras/layers/recurrent_v2.py", line 1174, in cudnn_lstm rnn_mode='lstm') File "/home/alex/anaconda3/envs/tf/lib/python3.7/site-packages/tensorflow_core/python/ops/gen_cudnn_rnn_ops.py", line 109, in cudnn_rnn ctx=_ctx) File "/home/alex/anaconda3/envs/tf/lib/python3.7/site-packages/tensorflow_core/python/ops/gen_cudnn_rnn_ops.py", line 198, in cudnn_rnn_eager_fallback attrs=_attrs, ctx=_ctx, name=name) File "/home/alex/anaconda3/envs/tf/lib/python3.7/site-packages/tensorflow_core/python/eager/execute.py", line 67, in quick_execute six.raise_from(core._status_to_exception(e.code, message), None) File "<string>", line 3, in raise_from tensorflow.python.framework.errors_impl.UnknownError: Fail to find the dnn implementation. [Op:CudnnRNN]

Problema aparente

Como parece, toda mi memoria se consume bastante rápido. Los problemas parecen surgir solo en modo gpu, el mismo código funciona bien con cpu

Ensayos

  • permitir el crecimiento de la memoria
  • crear un dispositivo virtual con memoria limitada

Ambos intentos producen el mismo error.

¿Algunas ideas?

No puedo avanzar en este tema porque no puedo reproducirlo. Si puede reproducir esto de manera confiable en su máquina, puede ayudar; así es como: https://github.com/tensorflow/tensorflow/issues/24496#issuecomment -560963770, https://github.com/tensorflow/tensorflow/issues/24496#issuecomment -561366750

No puedo avanzar en este tema porque no puedo reproducirlo. Si puede reproducir esto de manera confiable en su máquina, puede ayudar; así es como: # 24496 (comentario) , # 24496 (comentario)

Hola @sanjoy , estoy muy dispuesto a ayudar, pero desafortunadamente no puedo construir tf desde la fuente porque estoy usando las propiedades de mi universidad para hacer mis experimentos y mi computadora portátil personal no está equipada con una GPU. ¿Hay otras formas de obtener el registro que necesitamos?

Encontré el siguiente código en el desbordamiento de la pila , ¿podría ayudar?

from tensorflow.contrib.memory_stats.python.ops.memory_stats_ops import BytesInUse
with tf.device('/device:GPU:0'):  # Replace with device you are interested in
  bytes_in_use = BytesInUse()
with tf.Session() as sess:
  print(sess.run(bytes_in_use))

¿Hay otras formas de obtener el registro que necesitamos?

Verificaré una declaración VLOG para obtener esta información. Una vez hecho esto, ¿podrá instalar y reproducir esto con tf-nightly (con algunos indicadores adicionales, le haré saber exactamente cuáles)?

Seguramente, puedo instalar un paquete en esa computadora si está disponible en pip o conda y uso un entorno virtual. Intentaré reproducir el error.

Seguramente, puedo instalar un paquete en esa computadora si está disponible en pip o conda y uso un entorno virtual. Intentaré reproducir el error.

¿Puede instalar tf-nightly (para que recoja el compromiso que agrega registro) y ejecutar con la variable de entorno TF_CPP_VMODULE establecida en gpu_device=5 ? Eso debería imprimir dos líneas como

2019-12-26 12:07:37.196206: I tensorflow/core/common_runtime/gpu/gpu_device.cc:837] available_memory = 12319588352                                             
2019-12-26 12:07:37.196221: I tensorflow/core/common_runtime/gpu/gpu_device.cc:838] min_system_memory = 615979417                                              

¿Puede informar estos números aquí?

Lo siento, mi código actual no es compatible con tf 2.0 (yo uso 1.15), estoy intentando actualizarlo. Por favor dame algo de tiempo.

Este problema parece estar relacionado con mi RTX2080, tengo una GTX1080 de escritorio, todo parece estar bien, luego uso conda clon the conda enviroment en mi portátil RTX2080, uso tensorflow2.0.0-gpu. una vez que el código de la aplicación usa Conv2d, LSTM, GRU, surge este problema.
antes de usar los siguientes códigos para resolver este problema:
gpus = tf.config.experimental.list_physical_devices ('GPU')
si gpus:
tratar:

Actualmente, el crecimiento de la memoria debe ser el mismo en todas las GPU

    for gpu in gpus:
        tf.config.experimental.set_memory_growth(gpu, True)
        logical_gpus = tf.config.experimental.list_logical_devices('GPU')
        print(len(gpus), "Physical GPUs,", len(logical_gpus), "Logical GPUs")
except RuntimeError as e:

El crecimiento de la memoria debe establecerse antes de que se inicialicen las GPU

    print(e)

pero desde hace varios días, el método anterior ya no funciona

Tengo el mismo problema con gtx 960m

Hola @sanjoy , acabo de recibir este resultado:

2019-12-30 17:38:23.824323: I tensorflow/core/common_runtime/gpu/gpu_device.cc:837] available_memory = 10840309760
2019-12-30 17:38:23.824328: I tensorflow/core/common_runtime/gpu/gpu_device.cc:838] min_system_memory = 542015488

Hola @sanjoy , acabo de recibir este resultado:

2019-12-30 17:38:23.824323: I tensorflow/core/common_runtime/gpu/gpu_device.cc:837] available_memory = 10840309760
2019-12-30 17:38:23.824328: I tensorflow/core/common_runtime/gpu/gpu_device.cc:838] min_system_memory = 542015488

¡Gracias!

Desafortunadamente, esto no ayudó tanto como pensaba. Si aprieto MinSystemMemory en una compilación local a 542015488 (es decir, min_system_memory = std::min(min_system_memory, 542015488ll) ), el resnet (por ejemplo) parece funcionar bien y no obtengo ningún error de cuDNN .

@sanjoy Puedo reproducir (en su mayoría de manera consistente) el problema por mi parte.

Mensajes relevantes de la última noche:

Con el crecimiento de la memoria explícitamente permitido

2019-12-30 22:51:06.846774: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudart64_101.dll
WARNING:tensorflow:Falling back to tensorflow client, its recommended to install the cloud tpu client directly with pip install cloud-tpu-client .
2019-12-30 22:51:08.851660: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library nvcuda.dll
2019-12-30 22:51:08.877811: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1558] Found device 0 with properties: 
pciBusID: 0000:08:00.0 name: GeForce GTX 1070 computeCapability: 6.1
coreClock: 1.7715GHz coreCount: 15 deviceMemorySize: 8.00GiB deviceMemoryBandwidth: 238.66GiB/s
2019-12-30 22:51:08.887672: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudart64_101.dll
2019-12-30 22:51:08.895277: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cublas64_10.dll
2019-12-30 22:51:08.906016: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cufft64_10.dll
2019-12-30 22:51:08.913767: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library curand64_10.dll
2019-12-30 22:51:08.921329: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cusolver64_10.dll
2019-12-30 22:51:08.930208: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cusparse64_10.dll
2019-12-30 22:51:08.941818: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudnn64_7.dll
2019-12-30 22:51:08.945713: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1700] Adding visible gpu devices: 0
TF GPU device: PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')



CUDA_PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1
Tensorflow Version: 2.1.0-dev20191230
Tensorflow_addons Version: 0.7.0-dev



Preparing data
Loading dataset
100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:03<00:00, 21.61it/s] 
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 68/68 [00:00<00:00, 447.32it/s] 
Performing NLP
100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:00<00:00, 13332.71it/s] 
100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 68/68 [00:00<?, ?it/s] 
Transforming dataset
Generating primitives and constructing vocabulary
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:00<00:00, 139.11it/s] 
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 68/68 [00:00<00:00, 4249.86it/s] 
Encoding primitives
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 16654/16654 [00:00<00:00, 33640.74it/s]
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 805/805 [00:00<00:00, 33538.43it/s] 
2019-12-30 22:51:22.970554: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
2019-12-30 22:51:22.977228: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1558] Found device 0 with properties: 
pciBusID: 0000:08:00.0 name: GeForce GTX 1070 computeCapability: 6.1
coreClock: 1.7715GHz coreCount: 15 deviceMemorySize: 8.00GiB deviceMemoryBandwidth: 238.66GiB/s
2019-12-30 22:51:22.983571: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudart64_101.dll
2019-12-30 22:51:22.986832: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cublas64_10.dll
2019-12-30 22:51:22.990667: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cufft64_10.dll
2019-12-30 22:51:22.993801: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library curand64_10.dll
2019-12-30 22:51:22.996967: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cusolver64_10.dll
2019-12-30 22:51:23.002629: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cusparse64_10.dll
2019-12-30 22:51:23.006072: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudnn64_7.dll
2019-12-30 22:51:23.010482: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1700] Adding visible gpu devices: 0
2019-12-30 22:51:23.557556: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1087] TensorFlow compiled with CUDA 10.1 and cuDNN 7.6.5
2019-12-30 22:51:23.560870: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1099] Device interconnect StreamExecutor with strength 1 edge matrix:
2019-12-30 22:51:23.564144: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1105]      0 
2019-12-30 22:51:23.569159: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1118] 0:   N
2019-12-30 22:51:23.571310: I tensorflow/core/common_runtime/gpu/gpu_device.cc:837] available_memory = 7038160076
2019-12-30 22:51:23.573861: I tensorflow/core/common_runtime/gpu/gpu_device.cc:838] min_system_memory = 351908003
2019-12-30 22:51:23.576728: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1370] GPUDevice PlatformGpuId 0 TfGpuId 0 on bus 1 numa: 0 pci: 0000:08:00.0 DeviceLocality: bus_id: 1
links {
}

2019-12-30 22:51:23.583814: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1244] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 6376 MB memory) -> physical GPU (device: 0, name: GeForce GTX 1070, pci bus id: 0000:08:00.0, compute capability: 6.1)
2019-12-30 22:51:23.590034: I tensorflow/core/common_runtime/gpu/gpu_device.cc:249] Created stream[0] = 000002093BAB9860
2019-12-30 22:51:23.594885: I tensorflow/core/common_runtime/gpu/gpu_device.cc:268] Created host_to_device_stream[0] = 000002093BAB9360
2019-12-30 22:51:23.597951: I tensorflow/core/common_runtime/gpu/gpu_device.cc:273] Created device_to_host_stream[0] = 000002093BABA960
2019-12-30 22:51:23.600920: I tensorflow/core/common_runtime/gpu/gpu_device.cc:289] Created device_to_device_stream[0] = 000002093BAB8EE0

Sin cambios en la configuración del dispositivo GPU

2019-12-30 22:54:47.762913: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudart64_101.dll
WARNING:tensorflow:Falling back to tensorflow client, its recommended to install the cloud tpu client directly with pip install cloud-tpu-client .
2019-12-30 22:54:50.073199: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library nvcuda.dll
2019-12-30 22:54:50.100339: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1558] Found device 0 with properties:
pciBusID: 0000:08:00.0 name: GeForce GTX 1070 computeCapability: 6.1
coreClock: 1.7715GHz coreCount: 15 deviceMemorySize: 8.00GiB deviceMemoryBandwidth: 238.66GiB/s
2019-12-30 22:54:50.105836: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudart64_101.dll
2019-12-30 22:54:50.115940: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cublas64_10.dll
2019-12-30 22:54:50.127341: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cufft64_10.dll
2019-12-30 22:54:50.131871: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library curand64_10.dll
2019-12-30 22:54:50.139786: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cusolver64_10.dll
2019-12-30 22:54:50.144940: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cusparse64_10.dll
2019-12-30 22:54:50.159197: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudnn64_7.dll
2019-12-30 22:54:50.162685: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1700] Adding visible gpu devices: 0
TF GPU device: PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')



CUDA_PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1
Tensorflow Version: 2.1.0-dev20191230
Tensorflow_addons Version: 0.7.0-dev



Preparing data
Loading dataset
100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:03<00:00, 21.71it/s] 
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 68/68 [00:00<00:00, 433.07it/s] 
Performing NLP
100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:00<00:00, 13332.18it/s] 
100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 68/68 [00:00<?, ?it/s] 
Transforming dataset
Generating primitives and constructing vocabulary
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 80/80 [00:00<00:00, 140.34it/s] 
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 68/68 [00:00<00:00, 4249.55it/s] 
Encoding primitives
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 16654/16654 [00:00<00:00, 33039.93it/s] 
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 805/805 [00:00<00:00, 33537.43it/s] 
2019-12-30 22:55:04.084880: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
2019-12-30 22:55:04.088867: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1558] Found device 0 with properties:
pciBusID: 0000:08:00.0 name: GeForce GTX 1070 computeCapability: 6.1
coreClock: 1.7715GHz coreCount: 15 deviceMemorySize: 8.00GiB deviceMemoryBandwidth: 238.66GiB/s
2019-12-30 22:55:04.094516: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudart64_101.dll
2019-12-30 22:55:04.097049: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cublas64_10.dll
2019-12-30 22:55:04.099754: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cufft64_10.dll
2019-12-30 22:55:04.102329: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library curand64_10.dll
2019-12-30 22:55:04.105131: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cusolver64_10.dll
2019-12-30 22:55:04.108029: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cusparse64_10.dll
2019-12-30 22:55:04.110629: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudnn64_7.dll
2019-12-30 22:55:04.114339: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1700] Adding visible gpu devices: 0
2019-12-30 22:55:04.655119: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1087] TensorFlow compiled with CUDA 10.1 and cuDNN 7.6.5
2019-12-30 22:55:04.658124: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1099] Device interconnect StreamExecutor with strength 1 edge matrix:
2019-12-30 22:55:04.660826: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1105]      0
2019-12-30 22:55:04.662403: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1118] 0:   N
2019-12-30 22:55:04.664213: I tensorflow/core/common_runtime/gpu/gpu_device.cc:837] available_memory = 7038160076
2019-12-30 22:55:04.666185: I tensorflow/core/common_runtime/gpu/gpu_device.cc:838] min_system_memory = 351908003
2019-12-30 22:55:04.668490: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1370] GPUDevice PlatformGpuId 0 TfGpuId 0 on bus 1 numa: 0 pci: 0000:08:00.0 DeviceLocality: bus_id: 1
links {
}

2019-12-30 22:55:04.672820: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1244] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 6376 MB memory) -> physical GPU (device: 0, name: GeForce GTX 1070, pci bus id: 0000:08:00.0, compute capability: 6.1)
2019-12-30 22:55:04.677690: I tensorflow/core/common_runtime/gpu/gpu_device.cc:249] Created stream[0] = 0000021EC0CF5840
2019-12-30 22:55:04.679747: I tensorflow/core/common_runtime/gpu/gpu_device.cc:268] Created host_to_device_stream[0] = 0000021EC0CF58C0
2019-12-30 22:55:04.682343: I tensorflow/core/common_runtime/gpu/gpu_device.cc:273] Created device_to_host_stream[0] = 0000021EC0CF5940
2019-12-30 22:55:04.685266: I tensorflow/core/common_runtime/gpu/gpu_device.cc:289] Created device_to_device_stream[0] = 0000021EC0CF59C0

EDITAR: información del modelo, si ayuda.

__________________________________________________________________________________________________
Layer (type)                    Output Shape         Param #     Connected to
==================================================================================================
Feature_1 (InputLayer)          [(None, 150)]        0
__________________________________________________________________________________________________
Feature_2 (InputLayer)          [(None, 150)]        0
__________________________________________________________________________________________________
embedding (Embedding)           (None, 150, 64)      5632        Feature_1[0][0]
__________________________________________________________________________________________________
embedding_1 (Embedding)         (None, 150, 64)      2944        Feature_2[0][0]
__________________________________________________________________________________________________
bidirectional (Bidirectional)   (None, 150, 128)     66048       embedding[0][0]
__________________________________________________________________________________________________
bidirectional_1 (Bidirectional) (None, 150, 128)     66048       embedding_1[0][0]
__________________________________________________________________________________________________
concatenate (Concatenate)       (None, 150, 256)     0           bidirectional[0][0]
                                                                 bidirectional_1[0][0]
__________________________________________________________________________________________________
bidirectional_2 (Bidirectional) (None, 64)           73984       concatenate[0][0]
__________________________________________________________________________________________________
dense (Dense)                   (None, 32)           2080        bidirectional_2[0][0]
__________________________________________________________________________________________________
dense_1 (Dense)                 (None, 1)            33          dense[0][0]
==================================================================================================
Total params: 216,769
Trainable params: 216,769
Non-trainable params: 0

Un ejemplo mínimo usando TF 1.15, y obtengo este error. En RTX 2070 y NVIDIA 440.44 y CUDA versión 10.2.

import tensorflow as tf
import tensorflow.keras.applications as applications
import tensorflow.keras.utils as utils
import numpy as np

num_samples = 1000
height = 224
width = 224
num_classes = 1000

model = applications.ResNet50(weights=None, input_shape=(height, width, 3), classes=num_classes)

parallel_model = utils.multi_gpu_model(model, gpus=2, cpu_relocation=True)
parallel_model.compile(loss='categorical_crossentropy', optimizer='rmsprop')

x = np.random.random((num_samples, height, width, 3))
y = np.random.random((num_samples, num_classes))

parallel_model.fit(x, y, epochs=20, batch_size=256)

print('all done')
Train on 1000 samples
Epoch 1/20
2020-02-06 15:06:40.524918: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcublas.so.10
2020-02-06 15:06:41.291528: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudnn.so.7
2020-02-06 15:06:41.329183: W tensorflow/core/framework/cpu_allocator_impl.cc:81] Allocation of 822083584 exceeds 10% of system memory.
2020-02-06 15:06:42.082319: W tensorflow/core/framework/cpu_allocator_impl.cc:81] Allocation of 851705856 exceeds 10% of system memory.
2020-02-06 15:06:42.293092: W tensorflow/core/framework/cpu_allocator_impl.cc:81] Allocation of 822083584 exceeds 10% of system memory.
2020-02-06 15:06:43.173764: W tensorflow/core/framework/cpu_allocator_impl.cc:81] Allocation of 822083584 exceeds 10% of system memory.
2020-02-06 15:06:43.820074: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
2020-02-06 15:06:44.390897: W tensorflow/core/framework/cpu_allocator_impl.cc:81] Allocation of 822083584 exceeds 10% of system memory.
2020-02-06 15:06:45.839525: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
2020-02-06 15:06:45.856793: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
2020-02-06 15:06:45.883423: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
Traceback (most recent call last):
  File "./test_tf.py", line 19, in <module>
    parallel_model.fit(x, y, epochs=20, batch_size=256)
  File "/nix/store/520352w3m8lyj2zgv647qfqrws5q798n-python3.7-tensorflow-gpu-1.15.0/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/training.py", line 727, in fit
    use_multiprocessing=use_multiprocessing)
  File "/nix/store/520352w3m8lyj2zgv647qfqrws5q798n-python3.7-tensorflow-gpu-1.15.0/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/training_arrays.py", line 675, in fit
    steps_name='steps_per_epoch')
  File "/nix/store/520352w3m8lyj2zgv647qfqrws5q798n-python3.7-tensorflow-gpu-1.15.0/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/training_arrays.py", line 394, in model_iteration
    batch_outs = f(ins_batch)
  File "/nix/store/520352w3m8lyj2zgv647qfqrws5q798n-python3.7-tensorflow-gpu-1.15.0/lib/python3.7/site-packages/tensorflow_core/python/keras/backend.py", line 3476, in __call__
    run_metadata=self.run_metadata)
  File "/nix/store/520352w3m8lyj2zgv647qfqrws5q798n-python3.7-tensorflow-gpu-1.15.0/lib/python3.7/site-packages/tensorflow_core/python/client/session.py", line 1472, in __call__
    run_metadata_ptr)
tensorflow.python.framework.errors_impl.UnknownError: 2 root error(s) found.
  (0) Unknown: Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above.
    [[{{node replica_1/resnet50/conv1_conv/Conv2D}}]]
  (1) Unknown: Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above.
    [[{{node replica_1/resnet50/conv1_conv/Conv2D}}]]
    [[training/RMSprop/gradients/gradients/Switch_482/_3893]]
0 successful operations.
1 derived errors ignored.

Quiero señalar en un número separado https://github.com/tensorflow/tensorflow/issues/36501 que si bien el uso de esas opciones permite que el código se ejecute, observar el uso de memoria real de las GPU muestra que ni siquiera es realmente haciendo uso de memoria incremental. Entonces, la opción anterior corrige el error, pero en realidad no hace lo que dice estar haciendo. Solía ​​usar el mismo modelo en versiones anteriores de TF como 1.2 ... etc. y esos hicieron una asignación de memoria incremental real.

¡Tengo los mismos problemas que todos aquí! Después de instalar tf 2.1, no pude ejecutar un ejemplo simple de MNIST sin agregar crecimiento de memoria a la GPU. Yo uso un 2080 ti .

El principal problema al que me enfrento es que no puedo ejecutar tensorflow-probable junto con tf 2.1 sin obtener el error interno CUDNN maldito, incluso con el crecimiento de la memoria agregado al código. He intentado instalar tf 2.0, CUDA 10.0 y CUDA 10.1, diferentes versiones de CUDNN. Logré arreglar el ejemplo simple de MNIST para que funcione sin el crecimiento después de reinstalar completamente mi ubuntu pero no el ejemplo de probabilidad de tensorflow. Finalmente intenté usar un acoplador nocturno oficial de tensorflow y todavía obtuve el mismo error al usar la probabilidad de tensorflow (tf 2.2 dentro del contenedor). Todo funciona bien en la CPU. También intenté ejecutar la misma ventana acoplable en una máquina con 1080 ti y funcionó ... Definitivamente, siento que hay algo mal con la serie RTX .

error con tf docker y ejemplo de probabilidad de flujo tensor e información adicional de depuración de cudnn:

TF VERSION: 2.2.0-dev20200208
2020-02-11 08:51:05.891560: I tensorflow/core/platform/cpu_feature_guard.cc:143] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
2020-02-11 08:51:05.912465: I tensorflow/core/platform/profile_utils/cpu_utils.cc:102] CPU Frequency: 3696000000 Hz
2020-02-11 08:51:05.913040: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x57b1fd0 initialized for platform Host (this does not guarantee that XLA will be used). Devices:
2020-02-11 08:51:05.913052: I tensorflow/compiler/xla/service/service.cc:176]   StreamExecutor device (0): Host, Default Version
2020-02-11 08:51:05.914414: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcuda.so.1
2020-02-11 08:51:05.975016: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-02-11 08:51:05.975364: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x5679220 initialized for platform CUDA (this does not guarantee that XLA will be used). Devices:
2020-02-11 08:51:05.975376: I tensorflow/compiler/xla/service/service.cc:176]   StreamExecutor device (0): GeForce RTX 2080 Ti, Compute Capability 7.5
2020-02-11 08:51:05.975477: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-02-11 08:51:05.975744: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1558] Found device 0 with properties: 
pciBusID: 0000:01:00.0 name: GeForce RTX 2080 Ti computeCapability: 7.5
coreClock: 1.545GHz coreCount: 68 deviceMemorySize: 10.75GiB deviceMemoryBandwidth: 573.69GiB/s
2020-02-11 08:51:05.975865: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudart.so.10.1
2020-02-11 08:51:05.976745: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcublas.so.10
2020-02-11 08:51:05.977582: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcufft.so.10
2020-02-11 08:51:05.977722: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcurand.so.10
2020-02-11 08:51:05.978636: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcusolver.so.10
2020-02-11 08:51:05.979165: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcusparse.so.10
2020-02-11 08:51:05.981150: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudnn.so.7
2020-02-11 08:51:05.981216: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-02-11 08:51:05.981528: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-02-11 08:51:05.981792: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1700] Adding visible gpu devices: 0
2020-02-11 08:51:05.981812: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudart.so.10.1
2020-02-11 08:51:05.982323: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1099] Device interconnect StreamExecutor with strength 1 edge matrix:
2020-02-11 08:51:05.982331: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1105]      0 
2020-02-11 08:51:05.982335: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1118] 0:   N 
2020-02-11 08:51:05.982395: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-02-11 08:51:05.982687: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-02-11 08:51:05.982959: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1244] Created TensorFlow device (/device:GPU:0 with 9604 MB memory) -> physical GPU (device: 0, name: GeForce RTX 2080 Ti, pci bus id: 0000:01:00.0, compute capability: 7.5)
2020-02-11 08:51:05.983594: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-02-11 08:51:05.983864: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1558] Found device 0 with properties: 
pciBusID: 0000:01:00.0 name: GeForce RTX 2080 Ti computeCapability: 7.5
coreClock: 1.545GHz coreCount: 68 deviceMemorySize: 10.75GiB deviceMemoryBandwidth: 573.69GiB/s
2020-02-11 08:51:05.983881: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudart.so.10.1
2020-02-11 08:51:05.983889: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcublas.so.10
2020-02-11 08:51:05.983896: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcufft.so.10
2020-02-11 08:51:05.983904: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcurand.so.10
2020-02-11 08:51:05.983912: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcusolver.so.10
2020-02-11 08:51:05.983920: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcusparse.so.10
2020-02-11 08:51:05.983928: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudnn.so.7
2020-02-11 08:51:05.983961: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-02-11 08:51:05.984238: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-02-11 08:51:05.984497: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1700] Adding visible gpu devices: 0
2020-02-11 08:51:05.984508: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1099] Device interconnect StreamExecutor with strength 1 edge matrix:
2020-02-11 08:51:05.984512: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1105]      0 
2020-02-11 08:51:05.984516: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1118] 0:   N 
2020-02-11 08:51:05.984563: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-02-11 08:51:05.984842: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-02-11 08:51:05.985099: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1244] Created TensorFlow device (/device:GPU:0 with 9604 MB memory) -> physical GPU (device: 0, name: GeForce RTX 2080 Ti, pci bus id: 0000:01:00.0, compute capability: 7.5)
SUCCESS: Found GPU: /device:GPU:0
2020-02-11 08:51:05.989382: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-02-11 08:51:05.989649: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1558] Found device 0 with properties: 
pciBusID: 0000:01:00.0 name: GeForce RTX 2080 Ti computeCapability: 7.5
coreClock: 1.545GHz coreCount: 68 deviceMemorySize: 10.75GiB deviceMemoryBandwidth: 573.69GiB/s
2020-02-11 08:51:05.989663: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudart.so.10.1
2020-02-11 08:51:05.989671: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcublas.so.10
2020-02-11 08:51:05.989678: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcufft.so.10
2020-02-11 08:51:05.989684: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcurand.so.10
2020-02-11 08:51:05.989691: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcusolver.so.10
2020-02-11 08:51:05.989700: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcusparse.so.10
2020-02-11 08:51:05.989709: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudnn.so.7
2020-02-11 08:51:05.989744: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-02-11 08:51:05.990021: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-02-11 08:51:05.990347: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1700] Adding visible gpu devices: 0
2020-02-11 08:51:05.990544: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-02-11 08:51:05.990807: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1558] Found device 0 with properties: 
pciBusID: 0000:01:00.0 name: GeForce RTX 2080 Ti computeCapability: 7.5
coreClock: 1.545GHz coreCount: 68 deviceMemorySize: 10.75GiB deviceMemoryBandwidth: 573.69GiB/s
2020-02-11 08:51:05.990820: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudart.so.10.1
2020-02-11 08:51:05.990828: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcublas.so.10
2020-02-11 08:51:05.990834: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcufft.so.10
2020-02-11 08:51:05.990841: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcurand.so.10
2020-02-11 08:51:05.990848: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcusolver.so.10
2020-02-11 08:51:05.990854: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcusparse.so.10
2020-02-11 08:51:05.990861: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudnn.so.7
2020-02-11 08:51:05.990892: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-02-11 08:51:05.991171: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-02-11 08:51:05.991426: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1700] Adding visible gpu devices: 0
2020-02-11 08:51:05.991437: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1099] Device interconnect StreamExecutor with strength 1 edge matrix:
2020-02-11 08:51:05.991441: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1105]      0 
2020-02-11 08:51:05.991444: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1118] 0:   N 
2020-02-11 08:51:05.991486: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-02-11 08:51:05.991763: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-02-11 08:51:05.992022: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1244] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 9604 MB memory) -> physical GPU (device: 0, name: GeForce RTX 2080 Ti, pci bus id: 0000:01:00.0, compute capability: 7.5)
WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow_core/python/ops/linalg/linear_operator_lower_triangular.py:158: calling LinearOperator.__init__ (from tensorflow.python.ops.linalg.linear_operator) with graph_parents is deprecated and will be removed in a future version.
Instructions for updating:
Do not pass `graph_parents`.  They will  no longer be used.
WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow_core/python/ops/linalg/linear_operator_lower_triangular.py:158: calling LinearOperator.__init__ (from tensorflow.python.ops.linalg.linear_operator) with graph_parents is deprecated and will be removed in a future version.
Instructions for updating:
Do not pass `graph_parents`.  They will  no longer be used.
2020-02-11 08:51:06.822991: W tensorflow/python/util/util.cc:319] Sets are not currently considered sequences, but this may change in the future, so consider avoiding using them.
Epoch 1/15
2020-02-11 08:51:07.907445: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcublas.so.10
2020-02-11 08:51:09.832694: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudnn.so.7

I! CuDNN (v7604) function cudnnCreate() called:
i! Time: 2020-02-11T08:51:09.832722 (0d+0h+0m+4s since start)
i! Process=205; Thread=269; GPU=NULL; Handle=NULL; StreamId=NULL.

2020-02-11 08:51:10.409902: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR

I! CuDNN (v7604) function cudnnCreate() called:
i! Time: 2020-02-11T08:51:10.410012 (0d+0h+0m+5s since start)
i! Process=205; Thread=269; GPU=NULL; Handle=NULL; StreamId=NULL.

2020-02-11 08:51:10.417952: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
      1/Unknown - 4s 4s/stepTraceback (most recent call last):
  File "VAE_MNIST_tfp.py", line 150, in <module>
    validation_data=eval_dataset)
  File "/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/keras/engine/training.py", line 718, in fit
    use_multiprocessing=use_multiprocessing)
  File "/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/keras/engine/training_v2.py", line 341, in fit
    total_epochs=epochs)
  File "/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/keras/engine/training_v2.py", line 128, in run_one_epoch
    batch_outs = execution_function(iterator)
  File "/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/keras/engine/training_v2_utils.py", line 98, in execution_function
    distributed_function(input_fn))
  File "/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/eager/def_function.py", line 576, in __call__
    result = self._call(*args, **kwds)
  File "/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/eager/def_function.py", line 640, in _call
    return self._stateless_fn(*args, **kwds)
  File "/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/eager/function.py", line 2414, in __call__
    return graph_function._filtered_call(args, kwargs)  # pylint: disable=protected-access
  File "/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/eager/function.py", line 1660, in _filtered_call
    self.captured_inputs)
  File "/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/eager/function.py", line 1741, in _call_flat
    ctx, args, cancellation_manager=cancellation_manager))
  File "/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/eager/function.py", line 598, in call
    ctx=ctx)
  File "/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/eager/execute.py", line 60, in quick_execute
    inputs, attrs, num_outputs)
tensorflow.python.framework.errors_impl.UnknownError:  Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above.
     [[node model/conv2d/Conv2D (defined at VAE_MNIST_tfp.py:150) ]] [Op:__inference_distributed_function_4291]

Errors may have originated from an input operation.
Input Source operations connected to node model/conv2d/Conv2D:
 model/lambda/sub (defined at VAE_MNIST_tfp.py:98)

Function call stack:
distributed_function

@sanjoy Tengo el mismo problema con RTX 2080 y puedo compilar desde la fuente si es necesario.

@odinsbane , tendrás que compilar TensorFlow desde la fuente para hacer lo que sugiero a continuación.

El primer paso es agregar LOG(INFO) o std::cerr líneas a MinSystemMemory para imprimir available_memory y el valor de retorno de MinSystemMemory . ¿Está available_memory acuerdo con lo que imprime nvidia-smi ? ¿Cuánta memoria le estamos dejando al sistema?

En segundo lugar, ¿ayudar en algo aumentar el número mágico 0.05 a, digamos, 0.07 ?

puede confirmar que construir desde la fuente con cambiar el número mágico 0.05 número mágico a 0.1 parece solucionar el problema (al menos para 1.15.2).

En un océano de publicaciones ruidosas, el número mágico de memoria mínima del sistema parece totalmente lógico. ¡Gracias por compartir!

@chsigg ¿ Alguna sugerencia? ¿Quizás podamos intentar inicializar cuDNN, cuBLAS y otras bibliotecas de NVIDIA _antes_ de que reservemos toda la memoria de la GPU?

También podemos intentar habilitar allow_growth de forma predeterminada, pero eso llevará tiempo.

Este problema parece estar relacionado con mi RTX2080, tengo una GTX1080 de escritorio, todo parece estar bien, luego uso conda clon the conda enviroment en mi portátil RTX2080, uso tensorflow2.0.0-gpu. una vez que el código de la aplicación usa Conv2d, LSTM, GRU, surge este problema.
antes de usar los siguientes códigos para resolver este problema:
gpus = tf.config.experimental.list_physical_devices ('GPU')
si gpus:
tratar:

Actualmente, el crecimiento de la memoria debe ser el mismo en todas las GPU

    for gpu in gpus:
        tf.config.experimental.set_memory_growth(gpu, True)
        logical_gpus = tf.config.experimental.list_logical_devices('GPU')
        print(len(gpus), "Physical GPUs,", len(logical_gpus), "Logical GPUs")
except RuntimeError as e:

El crecimiento de la memoria debe establecerse antes de que se inicialicen las GPU

    print(e)

pero desde hace varios días, el método anterior ya no funciona

He intentado ejecutar el código de clasificación de imágenes básicas de lambda Tensorflow2-tutorial durante días y obtuve el mismo error de manejo de cudnn hasta que probé su solución. Finalmente se está ejecutando ahora en RTX 2070 Max Q y usa una memoria GPU mínima.

También me encuentro con este problema
anacondacloud instalar tensorflow-gpu2.0

rtx2070s
tensorflow-gpu.2.0.0
cuda 10.0.13
cudnn 7.6.5
No se pudo crear el identificador cudnn: CUDNN_STATUS_INTERNAL_ERROR
No se pudo obtener el algoritmo de convolución. Esto probablemente se deba a que cuDNN no se pudo inicializar, así que intente ver si se imprimió un mensaje de registro de advertencia arriba.

También me encuentro con este problema
anacondacloud instalar tensorflow-gpu2.0

rtx2070s
tensorflow-gpu.2.0.0
cuda 10.0.13
cudnn 7.6.5
No se pudo crear el identificador cudnn: CUDNN_STATUS_INTERNAL_ERROR
No se pudo obtener el algoritmo de convolución. Esto probablemente se deba a que cuDNN no se pudo inicializar, así que intente ver si se imprimió un mensaje de registro de advertencia arriba.

¿Insertó:

gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus:
try:
    for gpu in gpus:
        tf.config.experimental.set_memory_growth(gpu, True)
        logical_gpus = tf.config.experimental.list_logical_devices('GPU')
        print(len(gpus), "Physical GPUs,", len(logical_gpus), "Logical GPUs")
except RuntimeError as e:
    print(e)

en la parte superior de su código de entrada?

Después de bastante tiempo experimentando con un problema aparentemente diferente que falla con tf.signal.stft
Finalmente encontré este hilo y probé la solución que permite el crecimiento de la memoria. También resolvió mi problema.
He instalado tensorflow-gpu = 2.1 con cudatoolkit = 10.1 de anaconda, pero también intenté instalar
tensorflow-gpu a través de pip con exactamente el mismo resultado. Puedo reproducir esto en linux-ubuntu 18.04 y debian 9.12 con las tarjetas

   GeForce GTX 1050 Ti with Max-Q Design   
   GeForce GTX 1050 Ti
   GeForce RTX 2080 Ti

También probé otras dos tarjetas en nuestro laboratorio.

  GeForce GTX 1080 Ti
  TITAN Xp COLLECTORS EDITION

donde el código funciona bien con y sin permitir el crecimiento de la memoria

Mi problema mínimo está debajo. Curiosamente, el problema no es conv2d. Puedo cambiar el orden de estos tres comandos y siempre es el tercero el que falla.

import sys
import tensorflow as tf

gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus and len(sys.argv)> 1 and sys.argv[1].startswith("-a"):
    print("allowing growth")
    growth = True
else:
    print("nogrowth")
    growth = False

try:
    for gpu in gpus:
        tf.config.experimental.set_memory_growth(gpu, growth)
        logical_gpus = tf.config.experimental.list_logical_devices('GPU')
        print(len(gpus), "Physical GPUs,", len(logical_gpus), "Logical GPUs")
except RuntimeError as e:
    print(e)

tf.signal.stft(tf.zeros(3000, dtype=tf.float32), 512, 128)
tf.matmul(tf.zeros((2,2,2)), tf.zeros((2,2,2)))
tf.nn.conv2d(tf.zeros((2,20,20,20), dtype=tf.float32),
                                         filters=tf.zeros((2,2,20,20), dtype=tf.float32),
            strides=(1,1,1,1), padding="VALID")
print("done")

También encontré este problema
anacondacloud instalar tensorflow-gpu2.0
rtx2070s
tensorflow-gpu.2.0.0
cuda 10.0.13
cudnn 7.6.5
No se pudo crear el identificador cudnn: CUDNN_STATUS_INTERNAL_ERROR
No se pudo obtener el algoritmo de convolución. Esto puede deberse a que cuDNN no se pudo inicializar, así que intente ver si hay mensajes de registro de advertencia impresos arriba.

¿Insertó:

gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus:
try:
    for gpu in gpus:
        tf.config.experimental.set_memory_growth(gpu, True)
        logical_gpus = tf.config.experimental.list_logical_devices('GPU')
        print(len(gpus), "Physical GPUs,", len(logical_gpus), "Logical GPUs")
except RuntimeError as e:
    print(e)

¿En la parte superior del código que ingresó?

sí, resolví este problema de esta manera. ¡Gracias!

Tuve el mismo problema y allow_growth = True fue la solución. PERO, para TensorFlow 2, para hacer eso, debe agregar las siguientes líneas:

gpu_devices = tf.config.experimental.list_physical_devices('GPU') for device in gpu_devices: tf.config.experimental.set_memory_growth(device, True)

Gracias al usuario @opcecco en este número: https://github.com/tensorflow/tensorflow/issues/25446

Curiosamente, el problema no es conv2d. Puedo cambiar el orden de estos tres comandos y siempre es el tercero el que falla.

@roebel ¿Puede adjuntar registros para algunas seis permutaciones diferentes?

¿Y qué pasa si cambia el programa a (decir):

tf.signal.stft(tf.zeros(3000, dtype=tf.float32), 512, 128)
tf.signal.stft(tf.zeros(3000, dtype=tf.float32), 512, 128)
tf.signal.stft(tf.zeros(3000, dtype=tf.float32), 512, 128)
tf.signal.stft(tf.zeros(3000, dtype=tf.float32), 512, 128)
tf.matmul(tf.zeros((2,2,2)), tf.zeros((2,2,2)))
tf.nn.conv2d(tf.zeros((2,20,20,20), dtype=tf.float32),
                                         filters=tf.zeros((2,2,20,20), dtype=tf.float32),
            strides=(1,1,1,1), padding="VALID")

¿La falla aún ocurre en el conv2d o ocurre en el tercer stft ?

@sanjoy seguro que aquí hay tres variaciones del script anterior cambiando el orden de los comandos y una cuarta variante que comienza con 4 stft y termina con conv2d

Los cuatro registros diferentes utilizan el script de
https://github.com/tensorflow/tensorflow/issues/24496#issuecomment -593098386
reemplazando las últimas cuatro líneas.

En resumen los resultados según el orden:

stft-> blas-> conv2d falla al ejecutar conv2d
conv2d-> stft-> blas falla al ejecutar stft (así que no es el tercero, pero parece que blas ya está cargado para conv2d
matmul-> conv2d-> stft falla al ejecutar STFT
stft -> - stft -> - stft-> stft-> matmul-> conv2d falla cuando se ejecuta conv2d. Consulte los registros a continuación.

No le importe preguntar por otras variantes si es necesario.

conv2d último:

tf.matmul(tf.zeros((2,2,2)), tf.zeros((2,2,2)))
tf.signal.stft(tf.zeros(3000, dtype=tf.float32), 512, 128)
tf.nn.conv2d(tf.zeros((2,20,20,20), dtype=tf.float32),
                                         filters=tf.zeros((2,2,20,20), dtype=tf.float32),
            strides=(1,1,1,1), padding="VALID")
print("done")

log.conv2d.last.txt

matmul último

tf.nn.conv2d(tf.zeros((2,20,20,20), dtype=tf.float32),
                                         filters=tf.zeros((2,2,20,20), dtype=tf.float32),
            strides=(1,1,1,1), padding="VALID")
tf.signal.stft(tf.zeros(3000, dtype=tf.float32), 512, 128)
tf.matmul(tf.zeros((2,2,2)), tf.zeros((2,2,2)))
print("done")

log.matmul.last.txt

stft último

tf.matmul(tf.zeros((2,2,2)), tf.zeros((2,2,2)))
tf.nn.conv2d(tf.zeros((2,20,20,20), dtype=tf.float32),
                                         filters=tf.zeros((2,2,20,20), dtype=tf.float32),
            strides=(1,1,1,1), padding="VALID")
tf.signal.stft(tf.zeros(3000, dtype=tf.float32), 512, 128)
print("done")

log.stft.last.txt

4 stft primero conv2d último:

tf.signal.stft(tf.zeros(3000, dtype=tf.float32), 512, 128)
tf.signal.stft(tf.zeros(3000, dtype=tf.float32), 512, 128)
tf.signal.stft(tf.zeros(3000, dtype=tf.float32), 512, 128)
tf.signal.stft(tf.zeros(3000, dtype=tf.float32), 512, 128)
tf.matmul(tf.zeros((2,2,2)), tf.zeros((2,2,2)))
tf.nn.conv2d(tf.zeros((2,20,20,20), dtype=tf.float32),
                                         filters=tf.zeros((2,2,20,20), dtype=tf.float32),
            strides=(1,1,1,1), padding="VALID")
print("done")

log.multi_stft.first.txt

Muchas gracias

Tengo el mismo problema con la siguiente configuración:
TensorFlow instalado desde (fuente o binario): r1.13.1, r.1.13.2, r1.14
Versión de Python: 3.6.1
Versión de Bazel (si se compila desde la fuente):
Versión de GCC / Compiler (si se compila desde la fuente):
Versión CUDA / cuDNN: CUDA 10 con cuDNN 7.4.1
Modelo de GPU y memoria: RTX 2070 8GB.

Solucioné este problema con:
TensorFlow instalado desde (fuente o binario): r1.12.0
Versión de Python: 3.6.9
Versión de GCC / compilador: 4.8
Versión CUDA / cuDNN: CUDA 9.0 con cuDNN 7.1.4
Modelo de GPU y memoria: RTX 2070 8GB.
Espero que te ayude

También me enfrenté a un problema de este tipo, que se resolvió agregando una variable de entorno TF_FORCE_GPU_ALLOW_GROWTH = true.

La configuración es la siguiente:
Windows 10
Tensorflow compilado a partir de la fuente r2.0
Bazel: 0.26.1
Compilador de C ++: MSVC 2017
CUDA: 10
cuDNN: 7.6.5

CPU intel4930, nvidia titan XP pascal
Ubuntu 18.04.4, miniconda más reciente,
`! conda list | grep "rumia" da

    cudatoolkit               10.1.243             h6bb024c_0  
    cudnn                     7.6.5                cuda10.1_0  

`! conda list | grep "tensor" `` da

tensorboard               2.1.0                     py3_0  
tensorflow                2.1.0           gpu_py37h7a4bb67_0  
tensorflow-base           2.1.0           gpu_py37h6c5654b_0  
tensorflow-estimator      2.1.0              pyhd54b08b_0  
tensorflow-gpu            2.1.0                h0d30ee6_0  

La primera celda en el cuaderno jupyter es:

import tensorflow as tf
gpu_devices = tf.config.experimental.list_physical_devices('GPU')
for device in gpu_devices: tf.config.experimental.set_memory_growth(device, True)

El modelo es un codificador automático variacional con parámetros totales: 112,269
x_train.shape, y_train.shape, x_test.shape, y_test.shape da
((106496, 32, 32, 1), (106496,), (12288, 32, 32, 1), (12288,))

el código incluye:

batch_size=64
var_auto_encoder.fit(x_train, x_train, verbose=1, 
                 batch_size=batch_size, epochs=100,
                 validation_data=(x_test, x_test))

y falla. muestra la consola

2020-03-18 15:46:03.019451: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcublas.so.10
2020-03-18 15:46:03.179472: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudnn.so.7
2020-03-18 15:46:03.566267: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
2020-03-18 15:46:03.569842: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
2020-03-18 15:46:03.569907: W tensorflow/core/common_runtime/base_collective_executor.cc:217] BaseCollectiveExecutor::StartAbort Unknown: Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above.
     [[{{node conv2d/Conv2D}}]]
2020-03-18 15:46:03.573206: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR

Si en lugar de la primera celda como se indicó anteriormente, uso

from tensorflow.compat.v1 import ConfigProto
from tensorflow.compat.v1 import InteractiveSession

config = ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.2
config.gpu_options.allow_growth = True
session = InteractiveSession(config=config)

entonces me sale este error


2020-03-18 15:55:43.050094: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudart.so.10.1
2020-03-18 15:55:43.050123: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcublas.so.10
2020-03-18 15:55:43.050150: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcufft.so.10
2020-03-18 15:55:43.050177: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcurand.so.10
2020-03-18 15:55:43.050209: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcusolver.so.10
2020-03-18 15:55:43.050246: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcusparse.so.10
2020-03-18 15:55:43.050273: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudnn.so.7
2020-03-18 15:55:43.050337: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-03-18 15:55:43.050720: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-03-18 15:55:43.051063: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1697] Adding visible gpu devices: 0
2020-03-18 15:55:43.051097: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1096] Device interconnect StreamExecutor with strength 1 edge matrix:
2020-03-18 15:55:43.051108: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1102]      0 
2020-03-18 15:55:43.051116: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1115] 0:   N 
2020-03-18 15:55:43.051201: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-03-18 15:55:43.051573: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-03-18 15:55:43.051915: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1241] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 16 MB memory) -> physical GPU (device: 0, name: TITAN X (Pascal), pci bus id: 0000:01:00.0, compute capability: 6.1)
2020-03-18 15:56:07.877181: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
2020-03-18 15:56:07.882424: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
2020-03-18 15:56:07.886148: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
2020-03-18 15:56:07.889830: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR


Why am I having the problem if I allow memory growth? Do I need to reboot to reinitialize the gpu?

Curiosamente, durante mis luchas, recibí un mensaje de un letrero rojo de 'no entrada' en mi barra de menú que decía 'error, cuenta rota, tiene dependencia insatisfecha'
Ejecuté la actualización de software y quiere eliminar libcudnn7-dev y libcudnn7-doc
así como actualizar otras 57 bibliotecas que tienen que ver con linux

EDITAR: Después de reiniciar, el modelo parece entrenarse con éxito usando esto:

from tensorflow.compat.v1 import ConfigProto
from tensorflow.compat.v1 import InteractiveSession

config = ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.2
config.gpu_options.allow_growth = True
session = InteractiveSession(config=config)

o esto:

import tensorflow as tf
gpu_devices = tf.config.experimental.list_physical_devices('GPU')
for device in gpu_devices: tf.config.experimental.set_memory_growth(device, True)

La utilización de memoria en la gpu es <700 MB con un tamaño de lote de 16 y
~ 1 gigabyte con un tamaño de lote 256 (que entrena 3 veces más rápido)

Intenté compilar desde la fuente, pero encontré el mismo problema. Finalmente pude solucionar mi problema que estaba configurando config.gpu_options.allow_growth = True .

Pero si encontré este problema en la línea de comandos, ¿cómo agregar estos códigos?

También me encuentro con este problema
anacondacloud instalar tensorflow-gpu2.0
rtx2070s
tensorflow-gpu.2.0.0
cuda 10.0.13
cudnn 7.6.5
No se pudo crear el identificador cudnn: CUDNN_STATUS_INTERNAL_ERROR
No se pudo obtener el algoritmo de convolución. Esto probablemente se deba a que cuDNN no se pudo inicializar, así que intente ver si se imprimió un mensaje de registro de advertencia arriba.

¿Insertó:

gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus:
try:
    for gpu in gpus:
        tf.config.experimental.set_memory_growth(gpu, True)
        logical_gpus = tf.config.experimental.list_logical_devices('GPU')
        print(len(gpus), "Physical GPUs,", len(logical_gpus), "Logical GPUs")
except RuntimeError as e:
    print(e)

en la parte superior de su código de entrada?

Tuve exactamente el mismo problema que el anterior. Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR

¡La solución de @robosmith solucionó mi problema por completo!

Mis especificaciones:
RTX 2070
Ubuntu 18.04 LTE
Tensorflow 2.1.0
Keras 2.3.0
cudnn 7.6.5
cuda10.1.0
conda 4.8.3
pitón 3.7.7

Construido a través de conda install tensorflow-gpu keras

Muchas gracias! ¡Esta es la primera vez que hago que TF-2 funcione! Y TF-1 dejó de funcionar por completo, por lo que decidí actualizar y 'ver qué pasa'.

¡Gracias!

config.gpu_options.allow_growth = Verdadero

cuando usa tensorflow 2.0, puede usar
tf.config.experimental.set_memory_growth(tf.config.list_physical_devices('GPU')[0], True)
este código es posterior a import tensorflow as tf pero anterior a su código.

Intenté compilar desde la fuente, pero encontré el mismo problema. Finalmente pude solucionar mi problema que estaba configurando config.gpu_options.allow_growth = True .

Este código se comparte para que esté disponible más rápido para los usuarios de tensorflow y keras.
fuente de aquí

# Tensorflow
import tensorflow as tf
config = tf.ConfigProto()
config.gpu_options.allow_growth = True
session = tf.Session(config=config, ...)


#And for Keras
from keras.callbacks import ModelCheckpoint
from keras.models import Model, load_model, save_model, Sequential
from keras.layers import Dense, Activation, Dropout, Input, Masking, TimeDistributed, LSTM, Conv1D
from keras.layers import GRU, Bidirectional, BatchNormalization, Reshape
from keras.optimizers import Adam
from keras.backend.tensorflow_backend import set_session
import tensorflow as tf
config = tf.ConfigProto()
config.gpu_options.allow_growth = True  # dynamically grow the memory used on the GPU
config.log_device_placement = True  # to log device placement (on which device the operation ran)
sess = tf.Session(config=config)
set_session(sess)  # set this TensorFlow session as the default session for Keras

Solo quería intervenir y decir que el problema sigue ahí;

Mis especificaciones:
Ubuntu 20.04
NVIDIA RTX 2070
Nvidia_driver 440.64
Tensorflow-gpu 2.0.1 (instalado a través de conda, que instala automáticamente Cudatoolkit y CuDNN en el mismo entorno)
cudatoolkit 10.1.243
cudnn 7.6.5

El problema se resuelve con tf.config.experimental.set_memory_growth(tf.config.list_physical_devices('GPU')[0], True)

Sin embargo, esto parece más una solución temporal que una solución real, y muchas personas tienen tarjetas 20XX en estos días. Probablemente debería haber una actualización en la que se aborde este problema.

Actualización: ya que tengo un arranque dual, también traté de buscar Windows. El problema persiste allí.
Windows 10
Controlador de Nvidia 445.87
Aparte de eso, todo es similar

La instalación del controlador más reciente (445.87) para mi RTX 2080 me resolvió este problema.

@NBouman Eso es interesante, pero para mí en Ubuntu 18.04 con GeForce GTX 1050 TI, acabo de actualizar al último controlador disponible 440.82. Aún se requiere permitir el crecimiento de la memoria para que funcione.

La instalación del controlador más reciente (445.87) para mi RTX 2080 me resolvió este problema.

@NBouman ¿Qué sistema operativo estás usando? Estoy en Ubuntu 20.40 y el último controlador disponible que pude encontrar es 440.82 y, como @roebel , el problema persiste.

@roebel @eduardoscsouza Estoy en Windows 10 con la máquina que antes tenía este problema.

Solo quería intervenir y decir que el problema sigue ahí;

Mis especificaciones:
Ubuntu 20.04
NVIDIA RTX 2070
Nvidia_driver 440.64
Tensorflow-gpu 2.0.1 (instalado a través de conda, que instala automáticamente Cudatoolkit y CuDNN en el mismo entorno)
cudatoolkit 10.1.243
cudnn 7.6.5

El problema se resuelve con tf.config.experimental.set_memory_growth(tf.config.list_physical_devices('GPU')[0], True)

Sin embargo, esto parece más una solución temporal que una solución real, y muchas personas tienen tarjetas 20XX en estos días. Probablemente debería haber una actualización en la que se aborde este problema.

Actualización: ya que tengo un arranque dual, también traté de buscar Windows. El problema persiste allí.
Windows 10
Controlador de Nvidia 445.87
Aparte de eso, todo es similar

Para tensorflow 2.0.0 trabajó con:
tf.config.experimental.set_memory_growth(tf.config.experimental.list_physical_devices('GPU')[0],True)

¡¡¡Gracias!!! miles de gracias !!!!!!!!!!!!!!!

SO: ubuntu 18.04 lts

Versión del controlador: 435.21

CUDA: cudatoolkit 10.1

CUDNN: cudnn-7.6.5-cuda10.1_0

Usé anaconda install tensorflow

conda create -n tf-gpu tensorflow-gpu

Anaconda autoinstala cudatoolkit y cudnn a través del comando anterior.

Tengo la misma pregunta, el error:

coreClock: 1.5315GHz coreCount: 3 deviceMemorySize: 1.96GiB deviceMemoryBandwidth: 44.76GiB/s
2020-05-12 17:58:44.119679: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudart.so.10.1
2020-05-12 17:58:44.119694: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcublas.so.10
2020-05-12 17:58:44.119707: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcufft.so.10
2020-05-12 17:58:44.119719: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcurand.so.10
2020-05-12 17:58:44.119732: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcusolver.so.10
2020-05-12 17:58:44.119744: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcusparse.so.10
2020-05-12 17:58:44.119756: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudnn.so.7
2020-05-12 17:58:44.119819: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-05-12 17:58:44.120069: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-05-12 17:58:44.120277: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1697] Adding visible gpu devices: 0
2020-05-12 17:58:44.120308: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudart.so.10.1
2020-05-12 17:58:44.174976: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1096] Device interconnect StreamExecutor with strength 1 edge matrix:
2020-05-12 17:58:44.175003: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1102]      0 
2020-05-12 17:58:44.175012: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1115] 0:   N 
2020-05-12 17:58:44.175136: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-05-12 17:58:44.175392: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-05-12 17:58:44.175624: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-05-12 17:58:44.175844: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1241] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 1439 MB memory) -> physical GPU (device: 0, name: GeForce MX150, pci bus id: 0000:01:00.0, compute capability: 6.1)
2020-05-12 17:58:44.177113: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x55abc3d20b80 initialized for platform CUDA (this does not guarantee that XLA will be used). Devices:
2020-05-12 17:58:44.177129: I tensorflow/compiler/xla/service/service.cc:176]   StreamExecutor device (0): GeForce MX150, Compute Capability 6.1
2020-05-12 17:58:44.177749: W tensorflow/core/framework/cpu_allocator_impl.cc:81] Allocation of 376320000 exceeds 10% of system memory.
2020-05-12 17:58:44.787493: W tensorflow/core/framework/cpu_allocator_impl.cc:81] Allocation of 376320000 exceeds 10% of system memory.
WARNING:tensorflow:Layer my_model is casting an input tensor from dtype float64 to the layer's dtype of float32, which is new behavior in TensorFlow 2.  The layer has dtype float32 because it's dtype defaults to floatx.

If you intended to run this layer in float32, you can safely ignore this warning. If in doubt, this warning is likely only an issue if you are porting a TensorFlow 1.X model to TensorFlow 2.

To change all layers to have dtype float64 by default, call `tf.keras.backend.set_floatx('float64')`. To change just this layer, pass dtype='float64' to the layer constructor. If you are the author of this layer, you can disable autocasting by passing autocast=False to the base Layer constructor.

2020-05-12 17:58:45.311821: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcublas.so.10
2020-05-12 17:58:45.467966: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudnn.so.7
2020-05-12 17:58:45.904025: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
2020-05-12 17:58:45.913861: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
2020-05-12 17:58:45.913978: W tensorflow/core/common_runtime/base_collective_executor.cc:217] BaseCollectiveExecutor::StartAbort Unknown: Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above.
     [[{{node my_model/conv2d/Conv2D}}]]

Entonces, tenemos aquí un problema que no está resuelto (además de una solución alternativa que va en contra de las recomendaciones oficiales de no usar el crecimiento de la memoria para un manejo más eficiente de la memoria). El equipo de desarrollo no ha recibido muchos comentarios. ¿Me pregunto porque?

Este error parece afectar a una gran variedad de versiones de tensorflow (1.13, 2.0, 2.1). Si vi correctamente, se informa que todos los problemas ocurren con cuda 10. El código funciona bien en muchas tarjetas pero no en otras.
¿Alguien del equipo de desarrollo podría decirnos si esto sugiere un problema en el controlador cuda más que en la capa tensorflow? En ese caso, sin duda sería útil transmitir el informe de error a las páginas de soporte de NVIDIA. ¿No es así?

¿Alguien del equipo de desarrollo de tensorflow podría comentar cómo ven este error? ¿Alguien está investigando esto?

¿La gente ha estado comprobando si hay dos bibliotecas compartidas CuDNN 7 en la ruta o ruta de la biblioteca LD? No hay números menores o de parche en esta biblioteca, pero las discrepancias entre versiones pueden generar este mensaje de error.

Abrí un informe de error en NVIDIA, te haré saber qué sale de eso.

@samhodge
De hecho, hay muchas versiones de libcudnn instaladas, cada anaconda env tiene su propia versión.
Normalmente, anaconda se instala con rpath configurado correctamente, por lo que es bastante difícil no obtener las bibliotecas adecuadas.

Hice un strace y grepé las bibliotecas que se abren cuando falla
Vienen constantemente del directorio env de anaconda que aloja el paquete tensorflow (ver más abajo).
Además de libcuda, esa es la versión 440.82 y la he compilado con el instalador de NVIDIA.

Puedo configurar LD_LIBRARY_PATH a uno de los otros directorios lib lib de anaconda con diferentes cudatoolkits y diferentes libcudnn, el rastro sigue siendo el mismo.
Tenga en cuenta también que no es lbcudnn lo que plantea el problema. Siempre es la tercera biblioteca libcuxyz que es
usado y esto solo en GPU específicas (he usado el mismo script de instalación en diferentes máquinas con diferentes GPU, algunas funcionan, otras no) y funcionan todas si el crecimiento de la memoria está habilitado.

(tf2.1) m3088.roebel: (test_sd) 510> grep open trace.log  | grep libcu | grep -v -- -1
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/libcuda.so.1", O_RDONLY|O_CLOEXEC) = 4
openat(AT_FDCWD, "/data/anasynth/anaconda3/envs/tf2.1/lib/python3.7/site-packages/tensorflow_core/python/../../../../libcudart.so.10.1", O_RDONLY|O_CLOEXEC) = 11
openat(AT_FDCWD, "/data/anasynth/anaconda3/envs/tf2.1/lib/python3.7/site-packages/tensorflow_core/python/../../../../libcublas.so.10", O_RDONLY|O_CLOEXEC) = 11
openat(AT_FDCWD, "/data/anasynth/anaconda3/envs/tf2.1/lib/python3.7/site-packages/tensorflow_core/python/../../../.././libcublasLt.so.10", O_RDONLY|O_CLOEXEC) = 11
openat(AT_FDCWD, "/data/anasynth/anaconda3/envs/tf2.1/lib/python3.7/site-packages/tensorflow_core/python/../../../../libcufft.so.10", O_RDONLY|O_CLOEXEC) = 11
openat(AT_FDCWD, "/data/anasynth/anaconda3/envs/tf2.1/lib/python3.7/site-packages/tensorflow_core/python/../../../../libcurand.so.10", O_RDONLY|O_CLOEXEC) = 11
openat(AT_FDCWD, "/data/anasynth/anaconda3/envs/tf2.1/lib/python3.7/site-packages/tensorflow_core/python/../../../../libcusolver.so.10", O_RDONLY|O_CLOEXEC) = 11
openat(AT_FDCWD, "/data/anasynth/anaconda3/envs/tf2.1/lib/python3.7/site-packages/tensorflow_core/python/../../../../libcusparse.so.10", O_RDONLY|O_CLOEXEC) = 11
openat(AT_FDCWD, "/data/anasynth/anaconda3/envs/tf2.1/lib/python3.7/site-packages/tensorflow_core/python/../../../../libcudnn.so.7", O_RDONLY|O_CLOEXEC) = 11

Tengo el mismo problema en Ubuntu 20.04 con una GeForce RTX 2060 SUPER. Un NN con capas densas funciona bien. Pero con las capas de CNN obtengo Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above.
Agregar tf.config.experimental.set_memory_growth(tf.config.list_physical_devices('GPU')[0], True) no hace ninguna diferencia al error.
Seguí la instalación de acuerdo con https://www.tensorflow.org/install/gpu y nvidia-smi muestra:
Driver Version: 440.64.00 CUDA Version: 10.2
Mi conda env tiene:

cudatoolkit               10.1.243             h6bb024c_0  
cudnn                     7.6.5                cuda10.1_0  
tensorflow-gpu            2.1.0                h0d30ee6_0

En un env conda con tf 1.15, obtengo el mismo error. Sería genial si esto pudiera solucionarse.

Actualizar

Después de usar export TF_FORCE_GPU_ALLOW_GROWTH=true todo funciona. Tenía la impresión de que el tf.config.experimental.set_memory_growth(tf.config.list_physical_devices('GPU')[0], True) sería lo mismo, pero ese no es el caso. Creo que esto debería indicarse claramente en la página web de soporte de GPU de TensorFlow.

@samhodge
De hecho, hay muchas versiones de libcudnn instaladas, cada anaconda env tiene su propia versión.
Normalmente, anaconda se instala con rpath configurado correctamente, por lo que es bastante difícil no obtener las bibliotecas adecuadas.

Hice un strace y grepé las bibliotecas que se abren cuando falla
Vienen constantemente del directorio env de anaconda que aloja el paquete tensorflow (ver más abajo).
Además de libcuda, esa es la versión 440.82 y la he compilado con el instalador de NVIDIA.

Puedo configurar LD_LIBRARY_PATH a uno de los otros directorios lib lib de anaconda con diferentes cudatoolkits y diferentes libcudnn, el rastro sigue siendo el mismo.
Tenga en cuenta también que no es lbcudnn lo que plantea el problema. Siempre es la tercera biblioteca libcuxyz que es
usado y esto solo en GPU específicas (he usado el mismo script de instalación en diferentes máquinas con diferentes GPU, algunas funcionan, otras no) y funcionan todas si el crecimiento de la memoria está habilitado.

(tf2.1) m3088.roebel: (test_sd) 510> grep open trace.log  | grep libcu | grep -v -- -1
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/libcuda.so.1", O_RDONLY|O_CLOEXEC) = 4
openat(AT_FDCWD, "/data/anasynth/anaconda3/envs/tf2.1/lib/python3.7/site-packages/tensorflow_core/python/../../../../libcudart.so.10.1", O_RDONLY|O_CLOEXEC) = 11
openat(AT_FDCWD, "/data/anasynth/anaconda3/envs/tf2.1/lib/python3.7/site-packages/tensorflow_core/python/../../../../libcublas.so.10", O_RDONLY|O_CLOEXEC) = 11
openat(AT_FDCWD, "/data/anasynth/anaconda3/envs/tf2.1/lib/python3.7/site-packages/tensorflow_core/python/../../../.././libcublasLt.so.10", O_RDONLY|O_CLOEXEC) = 11
openat(AT_FDCWD, "/data/anasynth/anaconda3/envs/tf2.1/lib/python3.7/site-packages/tensorflow_core/python/../../../../libcufft.so.10", O_RDONLY|O_CLOEXEC) = 11
openat(AT_FDCWD, "/data/anasynth/anaconda3/envs/tf2.1/lib/python3.7/site-packages/tensorflow_core/python/../../../../libcurand.so.10", O_RDONLY|O_CLOEXEC) = 11
openat(AT_FDCWD, "/data/anasynth/anaconda3/envs/tf2.1/lib/python3.7/site-packages/tensorflow_core/python/../../../../libcusolver.so.10", O_RDONLY|O_CLOEXEC) = 11
openat(AT_FDCWD, "/data/anasynth/anaconda3/envs/tf2.1/lib/python3.7/site-packages/tensorflow_core/python/../../../../libcusparse.so.10", O_RDONLY|O_CLOEXEC) = 11
openat(AT_FDCWD, "/data/anasynth/anaconda3/envs/tf2.1/lib/python3.7/site-packages/tensorflow_core/python/../../../../libcudnn.so.7", O_RDONLY|O_CLOEXEC) = 11

Así que estás ilustrando mi punto libcudnn.so.7 no dice 7.XXX.YYY además de eso 7.XXX.YYY tiene una dependencia adicional de CUDA 10.2 10.1 10.0 9.2 9.1 9.0 etc.

No he visto el error desde que comencé a administrar bien la ruta y a administrar la cantidad de memoria disponible antes de inicializar un gráfico de un tamaño conocido y asegurarme de que la GPU objetivo solo usaba suficiente memoria para el gráfico y suficiente memoria para consultar cuánto CUDA la memoria está disponible.

Creo que es un problema de recursos. ¿Cuánta memoria hay disponible cuando inicia el proceso y cuánta memoria usa su gráfico?

@ kognat-docs

Así que está ilustrando mi punto libcudnn.so.7 no dice 7.XXX.YYY además de que 7.XXX.YYY tiene una dependencia adicional de CUDA 10.2 10.1 10.0 9.2 9.1 9.0, etc.

La pregunta que planteó fue "¿La gente ha estado comprobando si hay dos bibliotecas compartidas CuDNN 7 en la ruta o en la ruta de la biblioteca LD"? Y mi respuesta fue: he comprobado esto, solo hay uno.
Te he enviado el rastro.

No he visto el error desde que comencé a administrar la ruta.

¿A qué te refieres con gestionar la ruta?
¡Siempre gestiono mis caminos! ¡He instalado un entorno conda que verifiqué para ser consistente! Todo está como ha sido empaquetado por anaconda, lo verifiqué.

De todos modos, puedes creer que soy demasiado estúpido para montar una anaconda. Bien
Ahora he descargado la imagen oficial de la ventana acoplable.

tensorflow / t ensorflow: 2.1.0-gpu-py3

y ejecutar mi script allí. Se estrella si no tengo

exportar TF_FORCE_GPU_ALLOW_GROWTH = true

¿Puedo gestionar mejor los caminos?

y administrar la cantidad de memoria disponible antes de inicializar un gráfico de un tamaño conocido y asegurarse de que la GPU objetivo solo usó suficiente memoria para el gráfico y suficiente memoria para consultar cuánta memoria CUDA está disponible.

Creo que es un problema de recursos. ¿Cuánta memoria hay disponible cuando inicia el proceso y cuánta memoria usa su gráfico?

Como escribí anteriormente en mi informe, ¡no hay gráfico (o mejor dicho, apenas hay un gráfico)! Acabo de ejecutar estas cuatro líneas

import tensorflow as tf
tf.signal.stft(tf.zeros(3000, dtype=tf.float32), 512, 128)
tf.matmul(tf.zeros((2,2,2)), tf.zeros((2,2,2)))
tf.nn.conv2d(tf.zeros((2,20,20,20), dtype=tf.float32), filters=tf.zeros((2,2,20,20), dtype=tf.float32), strides=(1,1,1,1), padding="VALID")

y se estrella. Si cambio el orden de las tres líneas, siempre se bloquea después de estas tres operaciones (ya lo había explicado en mi informe de error).

Solo por diversión, conté los bytes: se requieren <83kB de memoria de datos. La GPU está vacía, no la uso para gráficos y no hay otros procesos ejecutándose en ella. ¡En los distintos sistemas hay 4GB u 11GB disponibles! ¡Además, sé cómo ejecutar nvidia-smi! ¡Entonces la tarjeta está vacía todavía no puedo ejecutar estas 4 líneas que requieren 84kB!

Solo para su información, un error debido a memoria agotada se ve de manera bastante diferente, yo también tengo estos. Para mis gráficos reales, soy muy capaz de detectarlos y reaccionar en consecuencia.

Gracias por tus esfuerzos de todos modos.

@roebel ¿ Viste el comentario de https://github.com/tensorflow/tensorflow/issues/24496#issuecomment -561366750?

No he podido volver a compilar tensorflow y probarlo. Sus versiones se mueven tan rápido que me tomaría un poco configurar y compilar todo. Además, la versión 1.15 dejó de ser compatible con la versión gcc que uso y la 1.13 no recibe ninguna actualización, por lo que no tenía sentido depurar esto de todos modos.

@roebel No recuerdo qué desencadenó el problema para ti.

ver esto https://github.com/tensorflow/tensorflow/issues/24496#issuecomment -480549043

Es por eso que pensé que estaba relacionado con la memoria, este problema no me ha afectado durante algún tiempo, ni a los usuarios de mi software en una variedad de plataformas.

@samhodge

Sí, entiendo que si hay un error, parece que se desencadena solo por una situación bastante particular.

@odinsbane

gracias, no, no me había dado cuenta. Veré si logro compilar la versión más reciente tf2.2.0.

De hecho probé la ventana acoplable con tensorflow 2.2, usa la misma versión de cuda 10.1 y tiene el mismo problema.

Pensé que esto era un problema exclusivo de Windows, así que instalé un entorno de ubuntu desde cero, solo para descubrir que el problema es mi tarjeta gráfica (RTX 2080). Desafortunadamente, creo que voy a seleccionar una plataforma de aprendizaje automático diferente debido a este problema, ya que parece haber sido un problema desde 2018.

@ kognat-docs

y administrar la cantidad de memoria disponible antes de inicializar un gráfico de un tamaño conocido y asegurarse de que la GPU objetivo solo usó suficiente memoria para el gráfico y suficiente memoria para consultar cuánta memoria CUDA está disponible.

Creo que es un problema de recursos. ¿Cuánta memoria hay disponible cuando inicia el proceso y cuánta memoria usa su gráfico?

Como escribí anteriormente en mi informe, ¡no hay gráfico (o mejor dicho, apenas hay un gráfico)! Acabo de ejecutar estas cuatro líneas

import tensorflow as tf
tf.signal.stft(tf.zeros(3000, dtype=tf.float32), 512, 128)
tf.matmul(tf.zeros((2,2,2)), tf.zeros((2,2,2)))
tf.nn.conv2d(tf.zeros((2,20,20,20), dtype=tf.float32), filters=tf.zeros((2,2,20,20), dtype=tf.float32), strides=(1,1,1,1), padding="VALID")

y se estrella. Si cambio el orden de las tres líneas, siempre se bloquea después de estas tres operaciones (ya lo había explicado en mi informe de error).

Solo por diversión, conté los bytes: se requieren <83kB de memoria de datos. La GPU está vacía, no la uso para gráficos y no hay otros procesos ejecutándose en ella. ¡En los distintos sistemas hay 4GB u 11GB disponibles! ¡Además, sé cómo ejecutar nvidia-smi! ¡Entonces la tarjeta está vacía todavía no puedo ejecutar estas 4 líneas que requieren 84kB!

¿Observó cuánta memoria estaba en uso al usar watch en nvidia-smi mientras el proceso se estaba ejecutando con un intervalo de 50 ms?

Vea esta solución que funcionó para otras personas

https://github.com/tensorflow/tensorflow/issues/24496#issuecomment -497202806

Entonces, puede hacer el parche sin tocar el código simplemente modificando su entorno de ejecución.

Another way to enable this option is to set the environmental variable TF_FORCE_GPU_ALLOW_GROWTH to true. This configuration is platform specific.

@sanjoy @odinsbane

¡Buenas noticias!
Siguiendo
https://github.com/tensorflow/tensorflow/issues/24496#issuecomment -561366750

Reconstruí la versión 2.1 usando la receta anaconda tensorflow de aquí
https://github.com/AnacondaRecipes/tensorflow_recipes

Agregué dos impresiones en MinSystemMemory que muestran available_memory y min_system_memory.
En mi sistema con GeForce GTX 1050 Ti deshabilitando el registro estándar de TF
Tengo esto

TF_CPP_MIN_LOG_LEVEL=2 python run_cuda.py 
=========================================================
MinSystemMemory: available_memory::4163764224
MinSystemMemory: min_system_memory::314572800
=========================================================
1 Physical GPUs, 1 Logical GPUs
2020-05-21 09:44:32.143642: E tensorflow/stream_executor/cuda/cuda_fft.cc:223] failed to make cuFFT batched plan:5
2020-05-21 09:44:32.143671: E tensorflow/stream_executor/cuda/cuda_fft.cc:426] Initialize Params: rank: 1 elem_count: 512 input_embed: 512 input_stride: 1 input_distance: 512 output_embed: 257 output_stride: 1 output_distance: 257 batch_count: 20
2020-05-21 09:44:32.143677: F tensorflow/stream_executor/cuda/cuda_fft.cc:435] failed to initialize batched cufft plan with customized allocator: Failed to make cuFFT batched plan.
Aborted

nvidia-smi informa que la GPU tiene 4040MiB, en este sistema hay X ejecutándose en la tarjeta que tiene 13MiB, por lo que los números parecen correctos.

min_system_memory se establece así

    min_system_memory =                                                                                                                        
        std::max(int64{314572800}, static_cast<int64>(available_memory * 0.05));                                                               

Entonces, la cantidad máxima de memoria se elige de todos modos. En su lugar, agregué un mecanismo para forzar min_system_memory mediante la variable de entorno TF_FORCE_MIN_SYSTEM_MEMORY_MB.
Entonces corriendo

TF_FORCE_MIN_SYSTEM_MEMORY_MB=310 TF_CPP_MIN_LOG_LEVEL=2 python run_cuda.py 
=========================================================
MinSystemMemory: available_memory::4163764224
MinSystemMemory: min_system_memory::314572800
MinSystemMemory: forced min_system_memory::325058560
=========================================================
1 Physical GPUs, 1 Logical GPUs
done

¡el problema esta resuelto!

Desafortunadamente, actualmente no tengo un sistema con una tarjeta RTX que funcione y no estoy seguro de cuándo volverán a funcionar. Si alguien estuviera dispuesto a probar esto en una tarjeta de este tipo, podría proporcionar el paquete pip y el contenido del entorno conda para ubuntu linux que debe instalarse para que se ejecute.

¡Bonito @roebel !

Podría valer la pena sugerirlo como una solicitud de extracción y agregarlo a los documentos.

@samhodge @sanjoy @odinsbane

Podría valer la pena sugerirlo como una solicitud de extracción y agregarlo a los documentos.

Seguro, pero el problema es que la solución probablemente no funcione para las otras tarjetas.
Para mi GTX 1050, la memoria total es de 4 GB y la memoria del sistema predeterminada se retiene
por tensorflow es máximo (300 MB, 4 GB * 0,05). Entonces, para GTX1050, serán 300 MB, que aparentemente es demasiado pequeño. Como se mencionó anteriormente, necesito aumentar a 310 MB.

Ahora, para el RTX2080, la memoria total es de 11 GB, que con un máximo (300 MB, 11 GB * 0.05)
seleccionará la memoria del sistema para que sea de 550 MB, que de acuerdo con los hallazgos del 1050
normalmente debería ser suficiente.

Tendré acceso a las GPU RTX2080 nuevamente al final de la semana y veré
lo que consigo allí.

@samhodge @sanjoy @odinsbane

Finalmente pude ejecutar la biblioteca parcheada en las tarjetas rtx 2080.
Como era de esperar, la versión parcheada no pasa. Aquí de nuevo el guión

import tensorflow as tf
tf.signal.stft(tf.zeros(3000, dtype=tf.float32), 512, 128)
tf.matmul(tf.zeros((2,2,2)), tf.zeros((2,2,2)))
tf.nn.conv2d(tf.zeros((2,20,20,20), dtype=tf.float32), filters=tf.zeros((2,2,20,20), dtype=tf.float32), strides=(1,1,1,1), padding="VALID")

Y aquí la matriz de available memory reportada desde gpu_device.cc,
valor predeterminado de Min_system_memory como se seleccionó en gpu_device.cc y el
min value of the min_system_memory Necesito seleccionar para que el script no se anule:

Tarjeta | AvailMem | Def MinSysMem | MinSysMem requerido
: ------- |: ----------- |: ---------- |: --------------- --------
1050 TI | 4163764224 | 314572800 | 325058560
1080 TI | 11567431680 | 578371584 | 335544320
2080 TI | 11381964800 | 569098240 | 618659840

Entonces, mientras 1050 y 1080 ejecutan el script con aproximadamente el mismo tamaño de memoria
el RTX2080 requiere casi el doble de memoria. Esto no suena bien
a mi.

¿Alguna sugerencia de qué intentar para conseguir un valor comparable?

@roebel

He tenido problemas con esto en mi aplicación C ++ durante varias iteraciones.

Lo que se redujo al final fue lo siguiente.

Solo ejecute modelos en la GPU cuando haya suficiente memoria disponible para ejecutar el modelo.

Entonces, la cantidad de memoria que requerirá el modelo es cuantificable.

Por lo tanto, debe tener una memoria GPU como porcentaje que se ajuste a ese modelo.

Luego, también necesita saber cuánta memoria está disponible en la tarjeta exactamente antes de asignar la memoria, que está sujeta a condiciones de carrera, porque no sabe qué más está usando la memoria CUDA al mismo tiempo en el sistema operativo.

Pero aparte de la condición de carrera, también es necesario medir la memoria libre.

Esto se hace usando cudaMemInfo , que en sí mismo usa memoria.

Por lo tanto, con la condición de que tenga suficiente memoria para ejecutar cudaMemInfo una vez para medir y debe asegurarse de que haya suficiente memoria libre para adaptarse al modelo y ejecutar cudaMemInfo una vez más, entonces y solo luego puede asignar suficiente porcentaje del VRAM disponible en esa tarjeta para ejecutar el modelo.

De todos modos, la conclusión de mi balbuceo aleatorio es que se requiere cudaMemInfo para sondear la cantidad de memoria disponible para asignar, que en sí misma también usa parte de esa memoria disponible.

Tal vez de alguna manera la cantidad de memoria utilizada por cudaMemInfo sea ​​diferente en una tarjeta basada en Turing en comparación con una tarjeta basada en Pascal, puedo conseguir que alguien de NVIDIA eche un vistazo si lo desea.

Sí, no puedo encontrar una referencia al cudaMemInfo en absoluto, pero ese parece ser el tipo de huella que sería el máximo de 300 Mb y el 5% de la memoria de la tarjeta.

echando un vistazo a:

https://github.com/tensorflow/tensorflow/blob/r2.2/tensorflow/core/common_runtime/gpu/gpu_process_state.cc

No parece que esté usando esto per se.

No creo que debamos jugar al gato y al ratón con la cantidad de memoria que necesitamos reservar para las bibliotecas del sistema; como ha observado, no hay una forma sistemática de hacerlo bien.

En su lugar, en mi opinión, deberíamos intentar inicializar las bibliotecas del sistema antes de que el asignador BFC haya tenido la oportunidad de asignar el resto de la memoria de la GPU.

CC @chsigg

Probablemente uno debería hacer esto solo si permitir el crecimiento de la memoria está desactivado. De lo contrario, siempre necesitará unos 580 MB para el 2080, incluso si no necesita todos los operadores.

Hice algunas pruebas más sobre los requisitos mínimos de memoria del sistema para ejecutar combinaciones de las tres operaciones de mi caso de prueba. Comparo solo las tarjetas 1080 y 2080. No encuentra conv2d solo porque inicializa blas en cualquier caso. Sale

GPU | MatMul | STFT | Conv2D + MatMUL | MatMul + STFT | MATMUL + STFT + Conv2D |
: --- |: --- |: --- |: --- |: --- |: ---
1080 | 140MB | 130MB | 290MB | 170MB | 320 MB
2080 | 190MB | 190MB | 520MB | 250 MB | 580 MB

Se puede ver que en el 2080 cuda requiere una sobrecarga para cada operación, y que esta sobrecarga aumenta cuando se utilizan más bibliotecas. En la mayoría de los casos, la sobrecarga es <100MB pero se convierte en >220MB una vez que Conv2D está involucrado.

Si @samhodge tiene contacto con NVIDIA, personalmente me

¡Hola a todos!
He resuelto un problema similar con la limitación del crecimiento de la memoria y puedes intentarlo.

Puede encontrar el código en la sección Limitar el crecimiento de la memoria

(Este es mi primer comentario en GitHub)

Tuve un problema similar antes. Limitar la memoria de la GPU ayudó manualmente. https://github.com/tensorflow/tensorflow/issues/25160#issuecomment -643703167

Tengo el mismo problema en Ubuntu 20.04 con una GeForce RTX 2060 SUPER. Un NN con capas densas funciona bien. Pero con las capas de CNN obtengo Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above.
Agregar tf.config.experimental.set_memory_growth(tf.config.list_physical_devices('GPU')[0], True) no hace ninguna diferencia al error.
Seguí la instalación de acuerdo con https://www.tensorflow.org/install/gpu y nvidia-smi muestra:
Driver Version: 440.64.00 CUDA Version: 10.2
Mi conda env tiene:

cudatoolkit               10.1.243             h6bb024c_0  
cudnn                     7.6.5                cuda10.1_0  
tensorflow-gpu            2.1.0                h0d30ee6_0

En un env conda con tf 1.15, obtengo el mismo error. Sería genial si esto pudiera solucionarse.

Actualizar

Después de usar export TF_FORCE_GPU_ALLOW_GROWTH=true todo funciona. Tenía la impresión de que el tf.config.experimental.set_memory_growth(tf.config.list_physical_devices('GPU')[0], True) sería lo mismo, pero ese no es el caso. Creo que esto debería indicarse claramente en la página web de soporte de GPU de TensorFlow.

Amigo, tu solución me salva la vida.

Nvidia acaba de lanzar los controladores de pantalla de Linux 440.100 y 450.51 (Beta).
Probé el 440.100 y no solucionó el problema. ¿Alguien ha probado la beta 450.51?

@eduardoscsouza

Nvidia acaba de lanzar los controladores de pantalla de Linux 440.100 y 450.51 (Beta).
Probé el 440.100 y no solucionó el problema. ¿Alguien ha probado la beta 450.51?

Intenté 450.36.06. consulte https://github.com/tensorflow/tensorflow/issues/25160#issuecomment -643703167.

el código que funcionó para mí:

importar tensorflow como tf
config = tf.compat.v1.ConfigProto ()
config.gpu_options.allow_growth = Verdadero
sesión = tf.compat.v1.InteractiveSession (config = config)

_Por favor, asegúrese de que se trate de un error. Según nuestra Política de GitHub , solo abordamos errores de código / documentación, problemas de rendimiento, solicitudes de funciones y problemas de compilación / instalación en GitHub. etiqueta: bug_template_

Información del sistema

  • ¿He escrito código personalizado (en lugar de usar un script de ejemplo de stock provisto en TensorFlow): Sí y No (descrito a continuación)
  • Plataforma y distribución del sistema operativo (por ejemplo, Linux Ubuntu 16.04): Manjaro
  • Dispositivo móvil (por ejemplo, iPhone 8, Pixel 2, Samsung Galaxy) si el problema ocurre en el dispositivo móvil:
  • TensorFlow instalado desde (fuente o binario): tf-nightly-gpu (19 de diciembre, r1.13)
  • Versión de TensorFlow (use el comando a continuación): 1.13.0-dev20181219
  • Versión de Python: 3.7.1
  • Versión de Bazel (si se compila desde la fuente):
  • Versión de GCC / Compiler (si se compila desde la fuente):
  • Versión CUDA / cuDNN: CUDA 10 con cuDNN 7.4.1
  • Modelo de GPU y memoria: RTX 2070 8GB

Describe el comportamiento actual
Estoy ejecutando el modelo de CNN en MNIST. Cuando estoy corriendo con la GPU, me encuentro
2018-12-20 20:09:13.644176: E tensorflow/stream_executor/cuda/cuda_dnn.cc:334] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR

Investigué un poco y me di cuenta de que es un problema de memoria (que no debería ser el caso, ya que tengo 32 GB de RAM y 64 GB de intercambio. Ejecuté htop cuando ejecuté el modelo y tengo 20 + GB libres, que es más de suficiente para adaptarse a las asignaciones de vRAM de 8 GB.

El uso de gpu_options.allow_growth = True hace que el modelo funcione correctamente, y la configuración os.environ['CUDA_VISIBLE_DEVICES'] = '-1' también funciona. Esto significa que estoy enfrentando un problema de memoria, pero no veo cómo.

Además, usar gpu_options.allow_growth = True no soluciona el mismo problema al intentar ejecutar tensorflow / models / official / mnist / model, que debería tener un comportamiento similar con mi código.

Código para reproducir el problema

import os
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
import math
import time
# Killing optional CPU driver warnings
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
# os.environ['CUDA_VISIBLE_DEVICES'] = '-1'
tf.logging.set_verbosity(tf.logging.ERROR)


class Model:

    def __init__(self, image, label):
        """
        A Model class contains a computational graph that classifies images
        to predictions. Each of its methods builds part of the graph
        on Model initialization. Do not modify the constructor, as doing so
        would break the autograder. You may, however, add class variables
        to use in your graph-building. e.g. learning rate, 

        image: the input image to the computational graph as a tensor
        label: the correct label of an image as a tensor
        prediction: the output prediction of the computational graph,
                    produced by self.forward_pass()
        optimize: the model's optimizing tensor produced by self.optimizer()
        loss: the model's loss produced by computing self.loss_function()
        accuracy: the model's prediction accuracy
        """
        self.image = image
        self.label = label

        # TO-DO: Add any class variables you want to use.

        self.prediction = self.forward_pass()
        self.loss = self.loss_function()
        self.optimize = self.optimizer()
        self.accuracy = self.accuracy_function()

    def forward_pass(self):
        """
        Predicts a label given an image using convolution layers

        :return: the prediction as a tensor
        """
        filter_1 = tf.Variable(tf.truncated_normal([3, 3, 1, 8], stddev=0.1))
        conv_1 = tf.nn.conv2d(self.image, filter_1, [1, 1, 1, 1], "SAME")

        reshaped = tf.reshape(conv_1, shape=[50, -1])

        L1 = reshaped.shape[1].value
        L2 = 500
        W1 = tf.Variable(tf.random_normal([L1, L2], mean=0, stddev=0.01))
        b1 = tf.Variable(tf.random_normal([L2], mean=0, stddev=0.01))
        relu_1 = tf.nn.relu(tf.matmul(reshaped, W1) + b1)

        W2 = tf.Variable(tf.random_normal([L2, 10], mean=0, stddev=0.01))
        b2 = tf.Variable(tf.random_normal([10], mean=0, stddev=0.01))
        logits = tf.nn.relu(tf.matmul(relu_1, W2) + b2)
        return logits

    def loss_function(self):
        """
        Calculates the model cross-entropy loss

        :return: the loss of the model as a tensor
        """
        loss = tf.losses.softmax_cross_entropy(onehot_labels=self.label, logits=self.prediction)
        return loss

    def optimizer(self):
        """
        Optimizes the model loss using an Adam Optimizer

        :return: the optimizer as a tensor
        """
        learning_rate = 0.1
        sgd = tf.train.GradientDescentOptimizer(learning_rate)
        train = sgd.minimize(self.loss)
        return train

    def accuracy_function(self):
        """
        Calculates the model's prediction accuracy by comparing
        predictions to correct labels – no need to modify this

        :return: the accuracy of the model as a tensor
        """
        correct_prediction = tf.equal(tf.argmax(self.prediction, 1),
                                      tf.argmax(self.label, 1))
        return tf.reduce_mean(tf.cast(correct_prediction, tf.float32))


def main():
    t_start = time.time()

    mnist = input_data.read_data_sets("data/mnist/", one_hot=True)
    batch_sz = 50
    batch = 2000

    inputs = tf.placeholder(shape=[batch_sz, 28, 28, 1], dtype=tf.float32)
    labels = tf.placeholder(shape=[batch_sz, 10], dtype=tf.float32)

    model = Model(inputs, labels)

    session_config = tf.ConfigProto(gpu_options=tf.GPUOptions(allow_growth=True))
    sess = tf.Session(config=session_config)

    # sess = tf.Session()

    sess.run(tf.global_variables_initializer())
    for i in range(batch):
        next_image, next_label = mnist.train.next_batch(batch_sz)
        next_image = next_image.reshape((batch_sz, 28, 28, 1))
        sess.run(model.optimize, feed_dict={inputs: next_image, labels: next_label})

    acc, test_images, test_labels = 0, mnist.test.images, mnist.test.labels
    test_batch = math.ceil(len(test_images) / batch_sz)
    for i in range(test_batch):
        batch_images = test_images[i * batch_sz: (i + 1) * batch_sz]
        batch_images = batch_images.reshape((batch_sz, 28, 28, 1))
        batch_labes = test_labels[i * batch_sz: (i + 1) * batch_sz]
        acc += sess.run(model.accuracy, feed_dict={inputs: batch_images, labels: batch_labes})
    acc /= test_batch
    print(acc)

    print(time.time() - t_start, 'seconds')

    return


if __name__ == '__main__':
    main()

Esto funcionó para mí.RTX 2060ubuntu 18.04pitón 3.6

from tensorflow.compat.v1 import ConfigProto
from tensorflow.compat.v1 import InteractiveSession

config = ConfigProto()
config.gpu_options.allow_growth = True
sess = InteractiveSession(config=config)
with sess.as_default():
       process ...

Hola @ bm777

siguiendo mi investigación de hace unos meses, resumo cómo entiendo el problema

Modelo de GPU y memoria: RTX 2070 8GB
... que no debería ser el caso ya que tengo 32 GB de RAM y 64 GB de

El problema no es la memoria del sistema, ¡el problema es la memoria de la GPU!

os.environ ['CUDA_VISIBLE_DEVICES'] = '-1'

funciona porque no usa la GPU!

Algunas explicaciones:

TF tiene dos modos de funcionamiento:

  1. allow memory growth = false : En este caso, TF preasigna algo de memoria para las bibliotecas del sistema usando una estimación aproximada de
    cuánta memoria se necesita. COMO puede leer aquí https://github.com/tensorflow/tensorflow/issues/24496#issuecomment -633953715 TF usa la fórmula max(300MB, GPU-MEM * fac) para esta suposición. Para TF2.1 fac = 0.05 para TF2.2 y si yo
    recuerde bien que es fac=0.07 . Entonces ahora tiene 8GB, lo que le da 400MB para la memoria preasignada de GPU en TF2.1
    y 560 MB en TF2.2.

    He evaluado experimentalmente la memoria preasignada necesaria para algunas GPU y TF21 aquí: https://github.com/tensorflow/tensorflow/issues/24496#issuecomment -637715002 y aquí https://github.com/tensorflow/tensorflow / issues / 24496 # issuecomment -637715002

    Resulta que para las operaciones de Conv2D necesitaba 520 MB allí, tendrías menos que eso con TF21 pero más con TF22. Desafortunadamente, no mencionas tu versión de TF, pero supongo que usas TF2.1. Si usa TF2.2 y aún falla, esto podría deberse a que usa una GPU diferente. De todos modos, el hecho es que falla. Vea abajo

2) allow memory growth = true : TF no usa ninguna memoria preasignada y carga las bibliotecas a medida que vienen. En la documentación de TF, esto se declara como problemático debido a una posible fragmentación de la memoria y, por lo tanto, es off por defecto.

Mi toma:

Dada la amplia gama de memoria requerida para las bibliotecas que depende de las operaciones que realice también en la GPU que tiene, parece muy difícil obtener el modo allow memory growth = false correcto (consulte https://github.com/tensorflow/ tensorflow / issues / 24496 # issuecomment-637950411). La solución actual: aumentar el tamaño de la memoria preasignada, que se hizo para TF2.2, es problemático si su GPU es bastante pequeña. Esto bloquea el uso de la memoria asumiendo que necesitará todas las bibliotecas disponibles (blas, Conv, FFT y no sé si hay otras). En el caso de que no use todos estos, esto resultará en un desperdicio de memoria preasignada, lo que a su vez reducirá el tamaño del modelo que puede cargar para su aplicación. Por otro lado, creo que el problema de la fragmentación de la memoria se puede prevenir cuando se crean modelos antes de forzar la carga de las bibliotecas del sistema antes de comenzar el entrenamiento. Esto parece ser lo que está sucediendo en la mayoría de los casos de todos modos y, por lo tanto, parece beneficioso, especialmente para GPU con poca memoria y especialmente para entrenar un solo modelo, no preasignar sino usar allow memory growth = true .

Personalmente, uso GPU con memoria que va desde 4 GB a 11 GB y, siguiendo el argumento anterior, establecí TF_FORCE_GPU_ALLOW_GROWTH = true para todos ellos. Por el momento no tuve ningún problema con eso.

Hola @roebel

Yo también, estaba pensando en los problemas del error de asignación de memoria. Esto es claramente para mí ahora.
Ahora se ve bien la memoria de la GPU

En el pasado, probé muchas opciones para preasignar memoria 😢:

gpus = tf.config.experimental.list_physical_devices('GPU')
try:
    tf.config.experimental.set_virtual_device_configuration(gpus[0], 
                 tf.config.experimental.VirtualDeviceConfiguration(memory_limit=5044)])
    """process...."""
except Exception as e:
    raise e

Personalmente uso GPU con 6GB de memoria.
Y gracias @roebel , por esta nueva flecha TF_FORCE_GPU_ALLOW_GROWTH=true para forzar la asignación de mi GPU 😊.

Tuve el mismo problema. Puedo decir con certeza que el problema solo ocurre en mi 2070 RTX, y NO en un Titan RTX, que ejecuta exactamente el mismo código.

https://github.com/DeepLabCut/DeepLabCut/issues/837

Simplemente actualice a Tensorflow 2.3 con CUDA 11 y cudnn 8.0. Mágicamente resolvió todos mis problemas y ni siquiera necesito la solución con config.gpu_options.allow_growth = True ahora.

desafortunadamente, necesito ejecutar un código que solo admita tensorflow 1.X

Simplemente actualice a Tensorflow 2.3 con CUDA 11 y cudnn 8.0. Mágicamente resolvió todos mis problemas y ni siquiera necesito la solución con config.gpu_options.allow_growth = True ahora.

Actualizar de 2.2 a 2.3 incluso con TF_FORCE_GPU_ALLOW_GROWTH=false explícito también me resolvió esto (al menos por ahora puedo ejecutar el código de demostración delf ; no he probado con nada más).

Todavía estoy en CUDA 10.1, Cudnn 7.6.5.

¿Hay una solución para este problema con tensorflow 2 y python3?

Tengo un:
RTX 2080

Recibo este mensaje:


2020-08-20 12:38:27.172496: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
2020-08-20 12:38:27.177708: E tensorflow/stream_executor/cuda/cuda_dnn.cc:329] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
Traceback (most recent call last):
  File "/home/anantha/Desktop/RaspiCar/car.py", line 85, in <module>
    tnet.train(x, y)
  File "/home/anantha/Desktop/RaspiCar/car.py", line 65, in train
    self.model.fit(x, y, epochs=epochs)
  File "/home/anantha/.local/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py", line 66, in _method_wrapper
    return method(self, *args, **kwargs)
  File "/home/anantha/.local/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py", line 848, in fit
    tmp_logs = train_function(iterator)
  File "/home/anantha/.local/lib/python3.8/site-packages/tensorflow/python/eager/def_function.py", line 580, in __call__
    result = self._call(*args, **kwds)
  File "/home/anantha/.local/lib/python3.8/site-packages/tensorflow/python/eager/def_function.py", line 644, in _call
    return self._stateless_fn(*args, **kwds)
  File "/home/anantha/.local/lib/python3.8/site-packages/tensorflow/python/eager/function.py", line 2420, in __call__
    return graph_function._filtered_call(args, kwargs)  # pylint: disable=protected-access
  File "/home/anantha/.local/lib/python3.8/site-packages/tensorflow/python/eager/function.py", line 1661, in _filtered_call
    return self._call_flat(
  File "/home/anantha/.local/lib/python3.8/site-packages/tensorflow/python/eager/function.py", line 1745, in _call_flat
    return self._build_call_outputs(self._inference_function.call(
  File "/home/anantha/.local/lib/python3.8/site-packages/tensorflow/python/eager/function.py", line 593, in call
    outputs = execute.execute(
  File "/home/anantha/.local/lib/python3.8/site-packages/tensorflow/python/eager/execute.py", line 59, in quick_execute
    tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name,
tensorflow.python.framework.errors_impl.UnknownError:  Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above.
     [[node sequential/conv2d/Conv2D (defined at /Desktop/RaspiCar/car.py:65) ]] [Op:__inference_train_function_951]

Function call stack:
train_function

En caso de que su problema tenga el mismo origen que los problemas que se tratan en el presente número (que no puedo saber de su informe), hay algunas soluciones que puede encontrar fácilmente leyendo las últimas 10-20 publicaciones en este hilo.

Lo arreglé con esto:

config = tf.compat.v1.ConfigProto()
config.gpu_options.allow_growth = True
sess = tf.compat.v1.Session(config=config)
sess.as_default()

Tuve este mismo problema con RTX 2080. Luego, el siguiente código funcionó para mí.

from tensorflow.compat.v1 import ConfigProto
from tensorflow.compat.v1 import InteractiveSession

config = ConfigProto()
config.gpu_options.allow_growth = True
session = InteractiveSession(config=config)

Gracias a todos

Creo que podemos dejar de publicar el arreglo allow_growth ahora :)

RTX 2070 aquí. Recibía este error, pero ahora se ejecuta con TF_FORCE_GPU_ALLOW_GROWTH=true (como han señalado otros comentaristas, lo soluciona) cambia el mensaje de error a un error de memoria insuficiente (aunque tengo mucha memoria):

2020-10-17 16:35:11.717658: I tensorflow/stream_executor/cuda/cuda_driver.cc:831] failed to allocate 3.87G (4159818752 bytes) from device: CUDA_ERROR_OUT_OF_MEMORY: out of memory

Pero mi GPU tiene 8 GB y solo estaban en uso unos 250 MB antes de comenzar el proceso. Entonces no entiendo, ¿por qué no puede asignar 3.87GB? (la reducción del tamaño del lote no tuvo ningún efecto; el archivo hdf5 de pesos es inferior a 200 MB)

TF_FORCE_GPU_ALLOW_GROWTH = true funcionó para mí.
tf.config.experimental.set_memory_growth (gpu, True) también funcionó.

Aquí está mi configuración:
GPU GTX 1650
cuda-10-1 10.1.243-1
libcudnn7 7.6.5.32-1 + cuda10.1
Ubuntu 18.04.5 LTS

Quien no pueda configurar la variable de entorno, puede intentar esto como se sugiere en https://www.tensorflow.org/guide/gpu :
gpus = tf.config.experimental.list_physical_devices ('GPU')
si gpus:
tratar:
# Actualmente, el crecimiento de la memoria debe ser el mismo en todas las GPU
para gpu en gpus:
tf.config.experimental.set_memory_growth (gpu, True)
Logical_gpus = tf.config.experimental.list_logical_devices ('GPU')
print (len (gpus), "GPU físicas", len (logic_gpus), "GPU lógicas")
excepto RuntimeError como e:
# El crecimiento de la memoria debe configurarse antes de inicializar las GPU
imprimir (e)

Escribir el comando mencionado en la terminal simplemente funcionó para mí.

https://github.com/tensorflow/tfjs/issues/671#issuecomment -494832790

Simplemente actualice a Tensorflow 2.3 con CUDA 11 y cudnn 8.0. Mágicamente resolvió todos mis problemas y ni siquiera necesito la solución con config.gpu_options.allow_growth = True ahora.

Parece que el problema se nota y se resuelve en tensorflow 2.3.0.

  • CUDA 10.1
  • Procesador gráfico: Quadro RTX 6000
  • Tensorflow 2.2.0
  • cudnn 7.6.5

El mismo problema:
tensorflow/stream_executor/cuda/cuda_dnn.cc:328] Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
tensorflow.python.framework.errors_impl.UnknownError: Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above.

Y la solución alternativa allow_growth = True no ayuda.

Después de actualizar tensorflow a 2.3.0, el problema desapareció, incluso sin agregar la línea allow_growth = True .

ok, lo hice funcionar en tf-nightly-gpu-2.0-preview y ipython notebook agregando esto a mi código:

desde tensorflow.compat.v1 importar ConfigProto
de tensorflow.compat.v1 importar InteractiveSession

config = ConfigProto ()
config.gpu_options.allow_growth = Verdadero
sesión = InteractiveSession (config = config)

funciona en mi caso

¿Fue útil esta página
0 / 5 - 0 calificaciones