Asegúrese de que se trata de un error. etiqueta: bug_template
Información del sistema
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()
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.
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, ...)
AttributeError Traceback (última llamada más reciente)
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.
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
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])
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)
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
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é.
Instale Python 3.6.8 de acuerdo con sus pautas.
conda crear -n tf python == 3.6.8
activar tf
conda activar tf
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). 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"
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
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])
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:
conda remove tensorflow
conda remove cudnn
pip install tensorflow
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.1Ademá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 mecanismotf.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:
~/.nv
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
El error se activa cuando intento usar LSTM, GRU, RNN, etc.
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]
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
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
oconda
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:
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)
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:
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
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)
ostd::cerr
líneas aMinSystemMemory
para imprimiravailable_memory
y el valor de retorno deMinSystemMemory
. ¿Estáavailable_memory
acuerdo con lo que imprimenvidia-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.0rtx2070s
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")
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")
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")
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")
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.5El 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.
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
aquí hay una publicación relacionada de hace 4 años.
O puede leer el manual amigable:
https://www.tensorflow.org/guide/gpu#limiting_gpu_memory_growth
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:
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.
Agregartf.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 ynvidia-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 eltf.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ónos.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:
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.
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.
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 InteractiveSessionconfig = ConfigProto ()
config.gpu_options.allow_growth = Verdadero
sesión = InteractiveSession (config = config)
funciona en mi caso
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
.