Tensorflow: Não foi possível criar cudnn handle: CUDNN_STATUS_INTERNAL_ERROR

Criado em 21 dez. 2018  ·  181Comentários  ·  Fonte: tensorflow/tensorflow

Certifique-se de que este é um bug. tag: bug_template

Informação do sistema

  • Escrevi um código personalizado (em vez de usar um script de exemplo de estoque fornecido no TensorFlow): Sim e Não (descrito abaixo)
  • Plataforma e distribuição do sistema operacional (por exemplo, Linux Ubuntu 16.04): Manjaro
  • Dispositivo móvel (por exemplo, iPhone 8, Pixel 2, Samsung Galaxy) se o problema acontecer no dispositivo móvel:
  • TensorFlow instalado de (fonte ou binário): tf-nightly-gpu (19 de dezembro, r1.13)
  • Versão do TensorFlow (use o comando abaixo): 1.13.0-dev20181219
  • Versão Python: 3.7.1
  • Versão do Bazel (se compilando da fonte):
  • Versão do GCC / Compilador (se compilando da fonte):
  • Versão CUDA / cuDNN: CUDA 10 com cuDNN 7.4.1
  • Modelo de GPU e memória: RTX 2070 8 GB

Descreva o comportamento atual
Estou executando o modelo da CNN no MNIST. Quando estou executando com a GPU, estou encontrando
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

Fiz algumas pesquisas e percebi que é um problema de memória (o que não deveria ser o caso, pois tenho 32 GB de RAM e 64 GB de swap. Executei o htop ao executar o modelo e tenho 20 + GB livres, o que é mais do que o suficiente para caber nos mapeamentos de vRAM de 8 GB.

Usar o gpu_options.allow_growth = True faz com que o modelo funcione corretamente, e a configuração os.environ['CUDA_VISIBLE_DEVICES'] = '-1' também funciona. Isso significa que estou enfrentando um problema de memória, mas não vejo como.

Além disso, usar gpu_options.allow_growth = True não corrige o mesmo problema ao tentar executar tensorflow / models / official / mnist / model, que deve ter um comportamento semelhante com meu código.

Código para reproduzir o problema

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


class Model:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

    model = Model(inputs, labels)

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

    # sess = tf.Session()

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

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

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

    return


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

Comentários muito úteis

Eu tentei compilar a partir do código-fonte, mas tive o mesmo problema. Finalmente consegui resolver o meu problema com a definição de config.gpu_options.allow_growth = True .

Todos 181 comentários

Estou tendo o mesmo problema com a mesma GPU: "CUDNN_STATUS_INTERNAL_ERROR".

GPU RTX 2070
CUDA 10
cuDNN 7.4.2
Ubuntu 18.04
tf-nightly-gpu (r1.13, 13 de janeiro)
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.

Tenho o mesmo problema ao correr em

GPU RTX2080
CUDA 10
cudnn 7.4.2

Tentei as seguintes versões tf tf-nightly-gpu e uma versão auto compilada do mestre (060b6e32ad).
Eu descobri que é possível definir as seguintes variáveis ​​de ambiente para obter mais informações de depuração.

CUDNN_LOGINFO_DBG = 1;
CUDNN_LOGDEST_DBG = stdout

Então recebo o seguinte erro:

I0117 14: 11: 24.441819 140433563125568 basic_session_run_hooks.py:594] Salvando pontos de verificação para 0 em /tmp/mnist/model.ckpt.
17-01-2019 14: 11: 25.916269: I tensorflow / stream_executor / platform / default / dso_loader.cc: 154] abri com sucesso a biblioteca CUDA libcublas.so.10.0 localmente

EU! Função CuDNN (v7402) cudnnCreate () chamada:
Eu! Tempo: 2019-01-17T14: 11: 26.079184 (0d + 0h + 0m + 0s desde o início)
Eu! Processo = 29255; Thread = 29356; GPU = NULL; Identificador = NULL; StreamId = NULL.

2019-01-17 14: 11: 26.079151: I tensorflow / stream_executor / platform / default / dso_loader.cc: 154] abri com sucesso a biblioteca CUDA libcudnn.so.7 localmente

EU! Função CuDNN (v7402) cudnnCreate () chamada:
Eu! Tempo: 2019-01-17T14: 11: 26.571897 (0d + 0h + 0m + 0s desde o início)
Eu! Processo = 29255; Thread = 29356; GPU = NULL; Identificador = NULL; StreamId = NULL.

2019-01-17 14: 11: 26.571858: E tensorflow / stream_executor / cuda / cuda_dnn.cc: 493] Não foi possível criar cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
2019-01-17 14: 11: 26.579375: E tensorflow / stream_executor / cuda / cuda_dnn.cc: 493] Não foi possível criar cudnn handle: CUDNN_STATUS_INTERNAL_ERROR

EU! Função CuDNN (v7402) cudnnCreate () chamada:
Eu! Tempo: 2019-01-17T14: 11: 26.579803 (0d + 0h + 0m + 0s desde o início)
Eu! Processo = 29255; Thread = 29356; GPU = NULL; Identificador = NULL; StreamId = NULL.

2019-01-17 14: 11: 26.585818: E tensorflow / stream_executor / cuda / cuda_dnn.cc: 493] Não foi possível criar cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
2019-01-17 14: 11: 26.585850: W ./tensorflow/stream_executor/stream.h:2109] tentando executar operação DNN usando StreamExecutor sem suporte DNN
Traceback (última chamada mais recente):
Arquivo "/usr/local/lib/python3.6/dist-packages/tensorflow/python/client/session.py", linha 1335, em _do_call
return fn (* args)
Arquivo "/usr/local/lib/python3.6/dist-packages/tensorflow/python/client/session.py", linha 1320, em _run_fn
opções, feed_dict, fetch_list, target_list, run_metadata)
Arquivo "/usr/local/lib/python3.6/dist-packages/tensorflow/python/client/session.py", linha 1408, em _call_tf_sessionrun
run_metadata)
tensorflow.python.framework.errors_impl.UnknownError: Falha ao obter o algoritmo de convolução. Isso provavelmente ocorre porque cuDNN falhou ao inicializar, então tente ver se uma mensagem de log de aviso foi impressa acima.
[[{{node Discriminator_1 / Conv / Conv2D}}]]
[[train / discriminator_train / train_op / control_dependency / _569]]

Durante o tratamento da exceção acima, outra exceção ocorreu:

Traceback (última chamada mais recente):
Arquivo "/home/dj/projects/gan/tf_models/research/gan/mnist/train.py", linha 151, em
tf.app.run ()
Arquivo "/usr/local/lib/python3.6/dist-packages/tensorflow/python/platform/app.py", linha 125, em execução
_sys.exit (main (argv))
Arquivo "/home/dj/projects/gan/tf_models/research/gan/mnist/train.py", linha 147, no principal
get_hooks_fn = tfgan.get_joint_train_hooks ())
Arquivo "/usr/local/lib/python3.6/dist-packages/tensorflow/contrib/gan/python/train.py", linha 1200, em gan_train
config = config)
Arquivo "/usr/local/lib/python3.6/dist-packages/tensorflow/contrib/training/python/training/training.py", linha 546, no trem
perda = session.run (train_op, run_metadata = run_metadata)
Arquivo "/usr/local/lib/python3.6/dist-packages/tensorflow/python/training/monitored_session.py", linha 693, em execução
run_metadata = run_metadata)
Arquivo "/usr/local/lib/python3.6/dist-packages/tensorflow/python/training/monitored_session.py", linha 1188, em execução
run_metadata = run_metadata)
Arquivo "/usr/local/lib/python3.6/dist-packages/tensorflow/python/training/monitored_session.py", linha 1287, em execução
raise six.reraise ( original_exc_info)Arquivo "/usr/local/lib/python3.6/dist-packages/six.py", linha 693, em reraiseaumentar o valorArquivo "/usr/local/lib/python3.6/dist-packages/tensorflow/python/training/monitored_session.py", linha 1272, em execuçãoreturn self._sess.run ( args, ** kwargs)
Arquivo "/usr/local/lib/python3.6/dist-packages/tensorflow/python/training/monitored_session.py", linha 1336, em execução
feed_dict, options)
Arquivo "/usr/local/lib/python3.6/dist-packages/tensorflow/python/training/monitored_session.py", linha 1362, em _call_hook_before_run
request = hook.before_run (run_context)
Arquivo "/usr/local/lib/python3.6/dist-packages/tensorflow/contrib/gan/python/train.py", linha 1061, em before_run
run_context.session.run (self._train_ops)
Arquivo "/usr/local/lib/python3.6/dist-packages/tensorflow/python/client/session.py", linha 930, em execução
run_metadata_ptr)
Arquivo "/usr/local/lib/python3.6/dist-packages/tensorflow/python/client/session.py", linha 1153, em _run
feed_dict_tensor, options, run_metadata)
Arquivo "/usr/local/lib/python3.6/dist-packages/tensorflow/python/client/session.py", linha 1329, em _do_run
run_metadata)
Arquivo "/usr/local/lib/python3.6/dist-packages/tensorflow/python/client/session.py", linha 1349, em _do_call
tipo de aumento (e) (node_def, op, mensagem)
tensorflow.python.framework.errors_impl.UnknownError: Falha ao obter o algoritmo de convolução. Isso provavelmente ocorre porque cuDNN falhou ao inicializar, então tente ver se uma mensagem de log de aviso foi impressa acima.
[[node Discriminator_1 / Conv / Conv2D (definido em home / dj / projects / gan / tf_models / research / gan / mnist / networks.py: 152)]]
[[train / discriminator_train / train_op / control_dependency / _569]]

Os erros podem ter se originado de uma operação de entrada.
Operações da fonte de entrada conectadas ao nó Discriminator_1 / Conv / Conv2D:
entradas / lote / n (definido em home / dj / projects / gan / tf_models / research / gan / mnist / data_provider.py: 67)

Rastreamento de pilha original para 'Discriminator_1 / Conv / Conv2D':
Arquivo "home / dj / projects / gan / tf_models / research / gan / mnist / train.py", linha 151, em
tf.app.run ()
Arquivo "usr / local / lib / python3.6 / dist-packages / tensorflow / python / platform / app.py", linha 125, em execução
_sys.exit (main (argv))
Arquivo "home / dj / projects / gan / tf_models / research / gan / mnist / train.py", linha 87, no principal
[FLAGS.batch_size, FLAGS.noise_dims]))
Arquivo "usr / local / lib / python3.6 / dist-packages / tensorflow / contrib / gan / python / train.py", linha 118, em gan_model
discriminator_real_outputs = discriminator_fn (real_data, generator_inputs)
Arquivo "home / dj / projects / gan / tf_models / research / gan / mnist / networks.py", linha 176, em incondicional_discriminator
net = _discriminator_helper (img, False, None, weight_decay)
Arquivo "home / dj / projects / gan / tf_models / research / gan / mnist / networks.py", linha 152, em _discriminator_helper
net = layers.conv2d (img, 64, [4, 4], passo = 2)
Arquivo "usr / local / lib / python3.6 / dist-packages / tensorflow / contrib / framework / python / ops / arg_scope.py", linha 182, em func_with_args
return func ( args, * current_args)
Arquivo "usr / local / lib / python3.6 / dist-packages / tensorflow / contrib / layers / python / layers / layers.py", linha 1155, em convolution2d
conv_dims = 2)
Arquivo "usr / local / lib / python3.6 / dist-packages / tensorflow / contrib / framework / python / ops / arg_scope.py", linha 182, em func_with_args
return func ( args, * current_args)
Arquivo "usr / local / lib / python3.6 / dist-packages / tensorflow / contrib / layers / python / layers / layers.py", linha 1058, em convolução
outputs = layer.apply (entradas)
Arquivo "usr / local / lib / python3.6 / dist-packages / tensorflow / python / keras / engine / base_layer.py", linha 1228, em aplicar
return self .__ call __ (entradas, args, * kwargs)
Arquivo "usr / local / lib / python3.6 / dist-packages / tensorflow / python / layers / base.py", linha 531, em __call__
outputs = super (Layer, self) .__ call __ (inputs, args, * kwargs)
Arquivo "usr / local / lib / python3.6 / dist-packages / tensorflow / python / keras / engine / base_layer.py", linha 564, em __call__
outputs = self.call (entradas, args, * kwargs)
Arquivo "usr / local / lib / python3.6 / dist-packages / tensorflow / python / keras / layers / convolutional.py", linha 196, na chamada
saídas = self._convolution_op (entradas, self.kernel)
Arquivo "usr / local / lib / python3.6 / dist-packages / tensorflow / python / ops / nn_ops.py", linha 966, em __call__
return self.conv_op (inp, filtro)
Arquivo "usr / local / lib / python3.6 / dist-packages / tensorflow / python / ops / nn_ops.py", linha 591, em __call__
return self.call (inp, filtro)
Arquivo "usr / local / lib / python3.6 / dist-packages / tensorflow / python / ops / nn_ops.py", linha 208, em __call__
nome = self.name)
Arquivo "usr / local / lib / python3.6 / dist-packages / tensorflow / python / ops / nn_ops.py", linha 1578, em conv2d
nome = nome)
Arquivo "usr / local / lib / python3.6 / dist-packages / tensorflow / python / ops / gen_nn_ops.py", linha 1040, em conv2d
data_format = data_format, dilations = dilations, name = name)
Arquivo "usr / local / lib / python3.6 / dist-packages / tensorflow / python / framework / op_def_library.py", linha 788, em _apply_op_helper
op_def = op_def)
Arquivo "usr / local / lib / python3.6 / dist-packages / tensorflow / python / util / deprecation.py", linha 501, em new_func
return func ( args, * kwargs)
Arquivo "usr / local / lib / python3.6 / dist-packages / tensorflow / python / framework / ops.py", linha 3300, em create_op
op_def = op_def)
Arquivo "usr / local / lib / python3.6 / dist-packages / tensorflow / python / framework / ops.py", linha 1801, em __init__
self._traceback = tf_stack.extract_stack ()

Alguma idéia de alguém? Estou apenas antes de reinstalar meu ambiente completo :-(

Tente compilar r1.13 da fonte. Isso levaria muito tempo, mas deve resolver seu problema. Pelo menos ele consertou o meu.

Eu tentei compilar a partir do código-fonte, mas tive o mesmo problema. Finalmente consegui resolver o meu problema com a definição de config.gpu_options.allow_growth = True .

Tenho tido o mesmo problema (em um RTX 2060, Ubuntu 18.04, Python 3.6.7, CUDA 10.0.130, cuDNN 7.4.2, Tensorflow 1.13.0-rc0 da fonte). Graças à sugestão de @va-andrew, estou trabalhando com o conjunto de opções allow_growth .

FWIW, no decorrer da busca por soluções para isso, parece que esse problema é um problema comum com a série RTX (embora possa ser um problema geral com CUDA 10.0, já que as novas placas não suportam as versões mais antigas). Seria ótimo se os padrões pudessem ser atualizados na versão 1.13 para que opções especiais não precisassem ser definidas para esses cartões.

Eu também experimentei isso com a seguinte configuração:

Os contêineres de GPU Tensorflow Docker com versões estáveis ​​de tudo também não funcionam (eles direcionam o segfault em vez de reportar CUDNN_STATUS_INTERNAL_ERROR).

Curiosamente, as coisas funcionam bem no Windows 10 com Tensorflow v1.12!

E outros relataram que a configuração de allow_growth permite que as coisas funcionem corretamente.

Mesmo problema aqui.

  • RTX 2070
  • Ubuntu 18.04
  • CudNN 7.4.2 (mas tentei compilar com outras versões mais antigas sem sorte)
  • Tensorflow 1.13.0-dev20190125 (teste também Tensorflow 1.12 compilado com Cuda 10)

E como outros relataram, definir allow_growth = TRUE permite que as coisas sejam executadas.

Fechando este problema desde que foi resolvido. Obrigado!

@ymodak Você pode consultar o PR que corrigiu este bug?

Tenho um problema semelhante com tf-nightly-gpu-2.0-preview no RTX 2080

O mesmo problema com um RTX2080, passei dois dias recompilando e caçando bugs até encontrar essa correção.
(o allow_growth = true o corrigiu)

Você fez meu dia

Como você realmente define allow_growth = true? Eu tenho o tf-nightly-gpu-2.0-preview e tentei:

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

mas receba este erro:

AttributeError Traceback (chamada mais recente, última)
dentro()
1 importação tensorflow como tf
----> 2 config = tf.ConfigProto ()

AttributeError: módulo 'tensorflow' não tem atributo 'ConfigProto'

Como posso definir allow_growth no tensorflow 2.0?

ok, fiz funcionar no tf-nightly-gpu-2.0-preview e notebook ipython adicionando isso ao meu código:

de tensorflow.compat.v1 import ConfigProto
de tensorflow.compat.v1 import InteractiveSession

config = ConfigProto ()
config.gpu_options.allow_growth = True
sessão = InteractiveSession (config = config)

mesmo problema, com gpu_options.allow_growth = True o problema corrigido.

@newhouseb como / onde você definiu isso para todos os benchmarks? Foi uma mudança fácil?

O cobertor permitir o crescimento é uma solução?

Ele está desligado por padrão por um motivo, consulte
https://www.tensorflow.org/guide/using_gpu#allowing_gpu_memory_growth

No meu programa, o gerenciamento de memória é importante

Gostaria de limitar a quantidade de GPU usada pelo TF porque no meu aplicativo gráfico a memória da GPU será usada para outras coisas e colocá-la em um espaço limitado é importante para evitar erros de falta de memória

Estou trabalhando em C ++ no Windows

Adicionar a opção de permitir crescimento resulta em um erro OOM.

Sem essa linha de código, o modelo funciona bem na mesma máquina com o mesmo cartão.

Com erro OOM

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

Sem erro OOM

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

Então, para resolver esse problema com conjunto, permite resultados de crescimento em um segfault.

@ymodak Este bug não foi corrigido. Indiscutivelmente, o uso de qualquer tipo de convnet deve funcionar na configuração padrão. O allow_growth deve ser verdadeiro por padrão, deve ser corrigido para que funcione ou deve haver um erro melhor do que CUDNN_STATUS_INTERNAL_ERROR .

@ymodak Parece que este problema foi

@samhodge você não pode prevenir OOM usando config.gpu_options.per_process_gpu_memory_fraction = 0.4 como sugerido na página de documentação do tensorflow

Estou confuso com este hack booleano para habilitar tensorflow-gpu em meu RTX 2080: este allow_growth = True será um problema se eu usar minha GPU apenas para um script de tensorflow / notebook jupyter por vez? (além do uso de GPU padrão para a tela, etc.)

Pretendo definir uma pilha de ML estática em um computador e gostaria de saber se isso vai acabar em uma bagunça em algum ponto (grande pesquisa em rede, modelos com muitos parâmetros etc). Eu não descobri ainda se definitivamente preciso compilar a partir dos fontes para tentar evitar esse erro interno ou apenas alterar esse booleano.

Ok, acho que encontrei a fonte dos meus problemas antes de criar minha sessão, medi a RAM da GPU livre, então se estou em uma placa de 8 Gb e 6 Gb são livres, uso uma fração de 0,75 e ocasionalmente termina em OOM, mas recentemente tenho tenho experimentado 0,95 * 0,75 e ainda não tenho um OOM. Portanto, se você forçar o limite de alocação do Tensorflow, ele às vezes entra em conflito. Obviamente, se você entradas e saídas para um Op individual não se encaixam, vai OOM, mas eu comparo isso e vai usar GPU ou CPU dependendo de qual se encaixa.

@samhodge ótimo, então, no final, o hack booleano allow_growth fornece uma solução se nenhuma operação GPU principal for iniciada em paralelo e se o que é processado _de uma vez_ por tensorflow (o tamanho do lote seria crítico) não transbordar a memória fornecida pela GPU ...?

Tudo usa a GPU, até mesmo seu navegador

Encontrando o mesmo problema em uma GTX 1050 usando tensorflow-gpu 1.13.1 do pip com CUDA 10.0 / cuDNN 7.4.2.24/Nvidia driver 410 / Ubuntu 16.04.

Ainda tendo o mesmo problema aqui, mas "config.gpu_options.allow_growth = True" não resolve o problema. Acontece em TF-gpu 1.14.1 e TF-gpu 2.0. RTX1070, CUDA 10.0, Ubuntu 18.04, driver Nvidia 430.09.

As descrições dos problemas que você está vendo me fazem acreditar que (uma versão específica do) cuDNN tenta alocar memória GPU ao criar o identificador. Se o TensorFlow já ocupou toda a memória (seja porque config.gpu_options.allow_growth = false ou per_process_gpu_memory_fraction perto de 1.0), não há memória restante para alocar para cuDNN.

Você pode confirmar isso executando o TensorFlow por meio do nvprof e gerar um rastreamento de API para inspecionar a chamada cuMemAlloc com falha.

A edição # 6698 parece discutir o mesmo problema. Algumas pessoas notaram que usaram acidentalmente uma versão cuDNN que não corresponde à sua versão CUDA. Você poderia verificar se está usando cuDNN para CUDA 10 ao executar com CUDA 10?

Acontece que não instalei o cuDNN corretamente porque sou um grande idiota. Peguei, reinstalei o TF2 todas as noites, adicionei as linhas para permitir o crescimento e está tudo bem.

Como excluir cudatoolkit e cudnn de Conda?

Como o cudnn incluído (ou incorporado) do Anaconda apresenta o erro conforme a seguir, desejo remover o cudatoolkit e o cudnn instalados pelo conda e instalar o CUDA e o cudnn independentes do site da Nvidia.

Erro: falha ao obter o algoritmo de convolução. Isso provavelmente ocorre porque cuDNN falhou ao inicializar, então tente ver se uma mensagem de log de aviso foi impressa acima.

No entanto, embora eu use os comandos da seguinte maneira, mas não possa removê-los, não posso removê-los.
conda remove --name cuda --all
conda remove --name cudnn --all

Vejo que dois documentos incluindo cudatoolkit-10.0.130-0 e cudnn-7.3.1-cuda10.0.0_0 no caminho como
segue.

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

Como posso excluir (ou remover) cuda e cudnn incluídos (ou incorporados) no Anaconda.

Desde já, obrigado,

Mike

@ mikechen66 Qual é a saída de conda? Pode ser porque outros pacotes dependem de cuda e cudnn. Por que você deseja excluí-los em primeiro lugar? Se você deseja obter um ambiente personalizado, use o miniconda ao invés do anaconda. O Miniconda vem apenas com conda, e você precisa instalar todos os pacotes de que precisa manualmente.

Olá tydlwav:

Obrigado pelo seu feedback! Depois de verificar a compatibilidade da versão e a data de lançamento das bibliotecas principais, instalei os ambientes de desenvolvimento relacionados, executei o código de teste MNIST simples e obtive as saídas conforme a seguir.

Acho que o Anaconda3 nem mesmo dá suporte às principais bibliotecas de cudnn e TensorFlow Portanto, é um grande problema do Anaconda3. Portanto, quero excluir as bibliotecas cudnn leves do Anaconda e usar as bibliotecas cudnn e cudnn independentes e poderosas para executar o código de teste. Por favor, ajude a dar algumas sugestões.

  1. Ambientes de instalação

Nvidia GeForce RTX 2060
Driver gráfico: NVIDIA-Linux-x86_64-415.27 (15 de janeiro de 2019)
1ª versão compatível com 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
- Notebook Juputer e ipykernel
- padrão por Ananconda3

  1. Código de teste MNIST:

importar keras
de keras.datasets import mnist
de keras.models import Sequential
de keras.layers import Dense, Dropout
de keras.layers import Flatten, MaxPooling2D, Conv2D
de keras.callbacks import 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
X_test / = 255

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

modelo = Sequencial ()
model.add (Conv2D (32, kernel_size = (3,3), activation = 'relu', input_shape = (28,28,1)))
model.add (Conv2D (64, kernel_size = (3,3), ativação = 'relu'))
model.add (MaxPooling2D (pool_size = (2,2)))
model.add (Dropout (0,25))
model.add (Flatten ())
model.add (Denso (128, ativação = 'relu'))
model.add (Dropout (0,5))
model.add (Denso (n_classes, ativação = 'softmax'))

model.compile (loss = 'categorical_crossentropy', optimizer = 'adam', metrics = ['precisão'])

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

model.fit (X_train, y_train, batch_size = 128, epochs = 15, verbose = 1,
validação_data = (X_test, y_test), callbacks = [tensor_board])

  1. Saídas:

Usando o back-end do TensorFlow.

AVISO: 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á obsoleto e será removido em uma versão futura.
Instruções para atualização:
Colocações tratadas automaticamente pelo colocador.
AVISO: tensorflow : From /home/mike/anaconda3/envs/tf-gpu/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py:3445: call dropout (from tensorflow.python.ops.nn_ops) com keep_prob está obsoleto e será removido em uma versão futura.
Instruções para atualização:
Use rate vez de keep_prob . A taxa deve ser definida como rate = 1 - keep_prob .
AVISO: 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á obsoleto e será removido em uma versão futura.
Instruções para atualização:
Em vez disso, use tf.cast.
Treine em 60.000 amostras, valide em 10.000 amostras
Época 1/15

UnknownError Traceback (última chamada mais recente)
dentro
34
35 model.fit (X_train, y_train, batch_size = 128, epochs = 15, verbose = 1,
---> 36 validação_data = (X_test, y_test), callbacks = [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 inicial_epoch = inicial_epoch,
1038 etapas_per_epoch = etapas_per_epoch,
-> 1039 validation_steps = validation_steps)
1040
1041 def avaliar (self, x = None, y = None,

~ / anaconda3 / envs / tf-gpu / lib / python3.7 / site-packages / keras / engine / training_arrays.py em fit_loop (model, 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 outs = f (ins_batch)
200 outs = to_list (outs)
201 para l, o in zip (out_labels, outs):

~ / anaconda3 / envs / tf-gpu / lib / python3.7 / site-packages / keras / backend / tensorflow_backend.py em __call __ (self, inputs)
2713 retornar self._legacy_call (entradas)
2714
-> 2715 retornar self._call (entradas)
2716 mais:
2717 se py_any (is_tensor (x) para x nas entradas):

~ / anaconda3 / envs / tf-gpu / lib / python3.7 / site-packages / keras / backend / tensorflow_backend.py em _call (self, inputs)
2673 fetched = self._callable_fn ( array_vals, run_metadata = self.run_metadata)2674 mais:-> 2675 obtido = self._callable_fn ( array_vals)
2676 retorno obtido [: len (self.outputs)]
2677

~ / anaconda3 / envs / tf-gpu / lib / python3.7 / site-packages / tensorflow / python / client / session.py em __call __ (self, args, * kwargs)
1437 ret = tf_session.TF_SessionRunCallable (
1438 self._session._session, self._handle, args, status,
-> 1439 run_metadata_ptr)
1440 se 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 em __exit __ (self, type_arg, value_arg, traceback_arg)
526 Nenhum, Nenhum,
527 compat.as_text (c_api.TF_Message (self.status.status)),
-> 528 c_api.TF_GetCode (self.status.status))
529 # Exclua o objeto de status subjacente da memória, caso contrário, ele permanecerá ativo
530 # pois há uma referência ao status deste a partir do traceback devido a

UnknownError: Falha ao obter o algoritmo de convolução. Isso provavelmente ocorre porque cuDNN falhou ao inicializar, então tente ver se uma mensagem de log de aviso foi impressa acima.
[[{{nó conv2d_1 / convolução}}]]
[[{{node metrics / acc / Mean}}]]

Olá tydlwav:

Eu uso o seguinte comando para desinstalar o cuda e o cudnn. No entanto, ambas as bibliotecas ainda estão localizadas no Anaconda3, embora não funcionem no momento. Eu acho que o Anaconda3 pretende proteger as bibliotecas centrais para não serem removidas. Pode ser a capacidade principal do Continuum, mesmo que tenha bugs. Vou tentar usar Independent Nvdia cuda (sem incluir nvcc) e cudnn ou encontrar o novo cuda ou cudnn com conda para ser instalado.

Comando de desinstalação:

conda uninstall cudatoolkit

Coletando metadados do pacote: pronto
Resolvendo o ambiente: pronto

Plano de Pacote

localização do ambiente: / home / mike / anaconda3 / envs / tf-gpu

especificações removidas:
- kit cudatool

Os seguintes pacotes serão REMOVIDOS:

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 ([s] / n)? y

Preparando a transação: concluído
Verificando a transação: concluído
Executando a transação: concluído

Notas:

Depois de desinstalar os dois, o Jupyter Notebook mostrou "Nenhum mudule chamado" tensorflow ". Isso significa que a desinstalação foi bem-sucedida. No entanto, tanto o cudatoolkit quanto o cudnn ainda são encontrados no Anaconda3. Acho que o Continuum os padroniza para não excluir, embora ambos eles não funcionam.

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

Você já os removeu. Os arquivos em pkgs são para instalação. Eles são baixados do cache para a instalação. Além disso, este não é o lugar para discutir questões ambientais de conda. Não é relevante para este problema. Você pode querer tentar o estouro de pilha.

Estou um pouco confuso com o estado desse problema. Estou usando um RTX 2080, cuda 10.1, cudnn v7.5.1.10 e tensorflow 1.14.

Usar a solução para permitir crescimento funciona, mas talvez eu tenha uma incompatibilidade de versão diferente?

Haverá uma correção para isso no tensorflow 1.14?

Obrigado

Obrigado. Vejo o problema de compatibilidade entre a série RTX 20XX Turing, TensorFlow e Anaconda. É óbvio que a série RTX 20XX suporta cudnn 7.5.0, TensorFlow só suporta cudnn 7.4, mas o Anaconda inclui um 7.3.1 simplificado, é uma incompatibilidade total entre os três fornecedores. Além disso, a série RTX 20XX tem um grande problema de compatibilidade com o Ubuntu 16.04 LTS. Às vezes, o Ubuntu 16.04 travava. Tive que trazer dois pendrives inicializáveis ​​para reinstalar o SO. Portanto, eu atualizei dois PCs para Ubuntu 18.04 LTS e instalei o Miniconda. Em seguida, tentarei uma versão superior do Tensorflow.

Notas:

A Nvidia tem seu próprio Ubuntu 18.04 LTS personalizado para sua plataforma de GPU Jetson TX1 / TX2 e Jetson Nano Mobile. A Nvidia parece determinar seus novos produtos, como a série RTX 20XX, em compatibilidade com o Ubuntu 18.04 LTS em vez da versão inferior do Ubuntu 16.04. No entanto, não sei se o Continuum tem seu plano de atualização para a série Nvidia RTX 20XX Turing.

A série RTX é bem suportada a partir de agora. Usei tf com RTX 2070 por meio de um ambiente conda em uma distribuição não ubuntu. Este deve ser o pior cenário e ainda está funcionando bem. Cuda e cudnn são compatíveis com as versões anteriores e não deve ser um problema se você usar as versões mais recentes. Você deve simplesmente criar um novo ambiente Python 3.6 com conda create -n tf python==3.6.8 e executar conda install tensorflow-gpu .

Isso é ótimo, eu compilei da fonte e tive clientes trabalhando com Tensorflow 1.12.0 CUDA 10.0 e CUDNN 7.4.2.24 na maioria dos hardwares, mas tive problemas com alguns clientes com placas RTX com CNN com cudnn na GPU. Posso ter acidentalmente empacotado o CUDNN errado para CUDA 9.0 os arquivos são nomeados de forma idêntica.

Alguém pode confirmar se essas versões funcionam em RTX2080 e outras placas baseadas em Turing?

Olá tydlwav:

Eu instalei o Miniconda e o ambiente relacionado ao python e tensorflow de acordo com sua sugestão. Ele ainda contém o erro: Falha ao obter o algoritmo de convolução. Isso ocorre provavelmente porque cuDNN falhou ao inicializar .......
Por favor, ajude a encontrar uma solução.

Por favor, veja as etapas que operei.

  1. Instale o python 3.6.8 de acordo com sua diretriz.
    conda create -n tf python == 3.6.8

  2. ativar tf
    conda ativar tf

  3. instale tensorflow-gpu no ambiente tf de acordo com sua diretriz.
    conda install tensorflow-gpu

O pacote instalado inclui cudatoolkit e cudnn da seguinte forma.
.................................................. ..................................................
cudatoolkit pkgs / main / linux-64 :: cudatoolkit-10.0.130-0
cudnn pkgs / main / linux-64 :: cudnn-7.3.1-cuda10.0_0
.................................................. ..................................................

  1. instale o notebook jupyter, ipykernel e ambiente relacionado na página da web.

1). instalar notebook jupyter
conda instalar notebook jupyter

2). instalar ipykernel baseado em notebook jupyter
conda install ipykernel jupyter

3). criar TensorFlow-GPU na página da Web do notebook jupyter
python -m ipykernel install --user --name tf-gpu --display-name "TensorFlow-GPU"

  1. Bloco de notas jupyter aberto
    1). comando na página da web do caderno jupyter
    caderno jupyter

2). Clique em TensorFlow-GPU
Ao clicar no menu "novo" e selecionar "TensorFlow-GPU" na página web, a célula aparece na página da web do notebook jupyter. A página da web é listada da seguinte maneira.
http: // localhost : 8888 / notebooks / Untitled3.ipynb? kernel_name = tf-gpu

  1. Colar Execute o código de teste MNIST simples

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 import 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
X_test / = 255

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

modelo = Sequencial ()
model.add (Conv2D (32, kernel_size = (3,3), activation = 'relu', input_shape = (28,28,1)))
model.add (Conv2D (64, kernel_size = (3,3), ativação = 'relu'))
model.add (MaxPooling2D (pool_size = (2,2)))
model.add (Dropout (0,25))
model.add (Flatten ())
model.add (Denso (128, ativação = 'relu'))
model.add (Dropout (0,5))
model.add (Denso (n_classes, ativação = 'softmax'))

model.compile (loss = 'categorical_crossentropy', optimizer = 'adam', metrics = ['precisão'])

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

model.fit (X_train, y_train, batch_size = 128, epochs = 15, verbose = 1,
validação_data = (X_test, y_test), callbacks = [tensor_board])

  1. Erros iguais aos da última mensagem mencionada:

UnknownError: Falha ao obter o algoritmo de convolução. Isso provavelmente ocorre porque cuDNN falhou ao inicializar, então tente ver se uma mensagem de log de aviso foi impressa acima.
[[{{nó conv2d_1 / convolução}}]]
[[{{node metrics / acc / Mean}}]]

Obrigado,

Mike

HI tydlwav:

A propósito, também instalei o keras com o seguinte comando.
conda instalar keras-gpu

Uma vez que todas as instalações estão corretas, recebo o erro. Portanto, presumo que seja o problema de compatibilidade de versão entre as séries Miniconda e RTX20XX Turing. O erro é o mesmo do Anaconda. Fiquei sabendo que as versões cudnn e cuda no Miniconda e no Anaconda são iguais.

Isso é bastante interessante. Eu tenho cuda 10 e cudnn7.3 trabalhando com conda cerca de um mês e meio atrás. Não usei tensorflow desde então. Se não funcionar para você, você pode construir a partir do código-fonte. Isso sempre funciona para mim. Se você está apenas começando, recomendo usar o pytorch. Você teria muito mais facilidade para instalar e fazer as coisas funcionarem.

Olá tydlwav:

Vou tentar o outro método, como pytorch. Agora que o Google lança tensorflow-gpu 1.14, posso usar o Miniconda para instalar tensorflow-gpu 1.14 independente no site do Google Tensorflow da seguinte maneira.

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

Notas:

Conda tem apenas compilações tensorflow-gpu de 1.0.1 a 1.13.1 como segue. As compilações são tão antigas que não conseguiam alcançar o Google TensorFlow oficial e a série oficial Nvidia GeForce RTX 20XX (2060 ~ 2080) Truing.

Comando:
conda search tensorflow-gpu

Carregando canais: pronto

Canal de criação de versão de nome
tensorflow-gpu 1.0.1 py27_4 pkgs / free
tensorflow-gpu 1.0.1 py35_4 pkgs / free
tensorflow-gpu 1.0.1 py36_4 pkgs / free
tensorflow-gpu 1.1.0 np111py27_0 pkgs / free
tensorflow-gpu 1.1.0 np111py35_0 pkgs / free
tensorflow-gpu 1.1.0 np111py36_0 pkgs / free
tensorflow-gpu 1.1.0 np112py27_0 pkgs / free
tensorflow-gpu 1.1.0 np112py35_0 pkgs / free
tensorflow-gpu 1.1.0 np112py36_0 pkgs / free
tensorflow-gpu 1.2.1 py27cuda7.5cudnn5.1_0 pkgs / free
tensorflow-gpu 1.2.1 py27cuda7.5cudnn6.0_0 pkgs / free
tensorflow-gpu 1.2.1 py27cuda8.0cudnn5.1_0 pkgs / free
tensorflow-gpu 1.2.1 py27cuda8.0cudnn6.0_0 pkgs / free
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 / free
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 / free
tensorflow-gpu 1.3.0 0 pacotes / grátis
tensorflow-gpu 1.4.1 0 pacotes / principal
tensorflow-gpu 1.5.0 0 pacotes / principal
tensorflow-gpu 1.6.0 0 pkgs / main
tensorflow-gpu 1.7.0 0 pacotes / 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

Eles não são antigos, pois usei a versão do conda do tf 1.12 com o RTX 2070. Os novos hardwares geralmente são compatíveis com as versões anteriores, e o RTX não é diferente. É mais provável que haja algum problema de ambiente estranho em jogo. Não tenho acesso a uma máquina RTX até julho, então não posso ajudar com os testes agora. Construir a partir da fonte deve resolver seu problema. Eu nunca falhei em executar convnets do tf construído a partir da fonte (assumindo que você tenha as configurações corretas durante a construção).

Mais uma vez, este não é o lugar certo para discutir a questão da distribuição do tensorflow. Você pode fazer uma postagem sobre estouro de pilha ou reddit e vinculá-la aqui. Mais pessoas poderão ver e ajudá-lo dessa forma.

Seu problema não é um bug e definitivamente não é o que este problema está discutindo.

@chsigg, seu diagnóstico de que este é um problema com CUDNN tentando alocar recursos de memória GPU que o tensorflow já alocou parece correto para mim. Simplesmente definir per_process_gpu_memory_fraction=0.9 vez de 0.95 foi suficiente para resolver meus problemas.

Eu também estava enfrentando esse problema. Corrigido ao atualizar cuDNN para a versão 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

Além disso, o tensorflow e o CuDNN foram instalados pela Conda.
conda list cudnn

cudnn                     7.3.1                cuda10.0_0    anaconda

Coisas que eu fiz:

  1. Conda tensorflow desinstalado.
    conda remove tensorflow
  2. Desinstalar conda cuDNN
    conda remove cudnn
  3. Instale o tensorflow com pip
    pip install tensorflow
  4. Baixe o arquivo deb de tempo de execução cuDNN 7.6 correspondente em https://developer.nvidia.com/cudnn
  5. Instale-o com sudo dpkg -i libcudnn_xxxxx_amd64.deb

@nluehr algum comentário? Podemos tornar MinSystemMemory () cuda / cudnn versão ciente?

É um erro legítimo de memória, se estiver usando tf.keras, faça o seguinte no topo do seu arquivo
config = tf.ConfigProto ()
config.gpu_options.allow_growth = True
tf.keras.backend.set_session (tf.Session (config = config))

Também encontrei esse problema e consegui resolvê-lo usando a solução de @va-andrew e, especificamente, usei a implementação de @colinsteidtmann , já que uso algumas das funções tensorflow.keras em meu código. Passei muito tempo tentando depurar esse problema, então agradeço a ambos por suas contribuições.

EDIT: Eu estava apenas olhando a documentação do tensorflow (https://www.tensorflow.org/guide/using_gpu), e você também pode dizer para permitir o crescimento da memória definindo a variável de ambiente TF_FORCE_GPU_ALLOW_GROWTH como true. Também diz que essa configuração é específica da plataforma, então YMMV (funciona para mim com o Ubuntu 18.04).

Para referência, estou executando:
Ubuntu 18.04.2 LTS, Gigabyte GeForce RTX 2080 Turbo, driver NVIDIA 430.26, CUDA 10.0.130, cuDNN 7.4.2.24, tensorflow-gpu 1.13.1, python 3.6. Eu executo o tensorflow de dentro de um ambiente virtual, usando o spyder 3.3.4.

Eu tenho um segundo computador com exatamente o mesmo hardware e o configurei seguindo o mesmo conjunto de instruções, usei os mesmos arquivos para fazer a instalação e tive esse problema nessa máquina também. Nenhuma surpresa nisso.

Eu tenho um terceiro computador com exatamente o mesmo hardware, exceto que tem um 2080 Ti em vez do 2080, e o configurei seguindo o mesmo conjunto de instruções, e novamente usei os mesmos arquivos para fazer a instalação. Mas desta vez, não houve problema.

Então, sou levado a acreditar que não está relacionado a algum conflito de CUDA, cuDNN e versão do driver; não é uma instalação feita incorretamente, etc. Em vez disso, está relacionada ao modelo da placa de vídeo; Só vi menção a esse problema com RTX 2060, 2070 e 2080.

Felizmente, não é um grande inconveniente usar a solução alternativa.

Eu também estava enfrentando esse problema. Corrigido ao atualizar cuDNN para a versão 7.6.

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

Tensorflow: 1.13.1
Cuda: 10,0
CuDNN: 7.3.1

Além disso, o tensorflow e o CuDNN foram instalados pela Conda.
conda list cudnn

cudnn                     7.3.1                cuda10.0_0    anaconda

Coisas que eu fiz:

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 Depois de fazer sua atualização, tem certeza de que está executando em sua GPU, e não na CPU? Parece que você está usando a GPU antes de fazer a atualização (devido à mensagem de erro que faz referência a cuDNN), mas gostaria de saber depois. Você usa "pip install tensorflow", mas deveria ser "pip install tensorflow-gpu", não? Além disso, você disse que está usando CUDA 10, mas o arquivo deb cuDNN que você listou é para cuda9.0, então isso não deve funcionar.

Portanto, acho que pode ser o caso de você não estar realmente usando a GPU e, portanto, não é uma prova de que a atualização para cuDNN 7.6 resolve o problema.

@ synapse8 Você está absolutamente certo sobre as versões tensorflow-gpu e cuDNN. Também estou muito confuso com meu comentário agora, e não me lembro mais dos detalhes. De qualquer forma, abaixo estão as versões atuais do meu sistema.

pip show tensorflow-gpu
Nome: tensorflow-gpu
Versão: 1.13.1

nvidia-smi
Versão do driver NVIDIA-SMI 430.26: 430.26 Versão CUDA: 10.2

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

@ alexforever86 com a configuração que você mencionou agora, você ainda vê esse problema? (Presumo que funcione para você). Recentemente instalei um sistema com driver cuda10, 410, 7.6 cudnn e TF-gpu 1.14 (instalação pip) e não vi o problema.

@ robzor92 Estou usando tensorflow-gpu 1.13 e, por curiosidade, acabei de instalar o 1.14 para testar se isso resolveu o problema (para mim). Ainda estou recebendo o erro e ainda tenho que fazer a solução alternativa 'permitir crescimento' (novamente, não é grande coisa).

Qual placa de vídeo você está usando?

@ synapse8 Tentei com uma GTX 1070.

@ synapse8 Eu também tentei o código de amostra fornecido por este criador de thread agora mesmo, funcionou sem problemas. No entanto, eu não diria que é apenas um problema da linha RTX, pois vi o mesmo problema em uma GTX 1050Ti com TF 1.13.1. Usando a mesma combinação driver / cuda / cudnn que postei antes.

@ robzor92 Duvido que o problema do 1050Ti seja com o tamanho pequeno do VRAM. As placas RTX encontrariam isso nos modelos básicos CNN MNIST. Duvido que seja o ajuste da NVIDIA na alocação de VRAM em placas RTX de alguma forma bagunçado.

Eu tenho o mesmo erro no tensorflow 1.14.0 e RTX2080. Mas, no meu caso, esse erro ocorre apenas quando uso a camada de convolução.

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.

Tentei config.gpu_options.allow_growth = True , mas não resolve este erro.

Eu quero alguém para me ajudar.

Obrigado.

Mesmo problema com RTX 2070

Fiz uma observação interessante sobre isso, que pode ajudar a rastrear esse erro ou encontrar uma solução viável:
Também recebo o erro Failed to get convolution algorithm com referência a Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR .
Sistema: computador laptop com Nvidia Quadro P2000, Ubuntu 18.04, tf 1.13.1, cuda10, cudnn 7.4.2
Como mencionado, posso executar o programa sem problemas usando allow_growth , então obrigado por isso, bom o suficiente para mim.

Interessante: recebo este erro apenas quando uso tf.layers.conv... mas alternar para tf.keras.layers.... permite que o programa seja executado sem allow_growth , então algo no código keras parece funcionar melhor do que no código tf. Talvez alguém possa usar essas informações para rastrear uma solução de keras.
Por enquanto, estou me limitando aos tf.layers, pois eles fornecem um compartilhamento de peso fácil por meio de escopos variáveis, que infelizmente não são suportados pelo keras.

@ DavidS3141 É interessante. No meu caso, a única camada de convolução não funciona em tf.layers e tf.keras.layers ...

Quando eu uso o pytorch, torch.cuda.is_available é True e pode usar a camada de convolução sem nenhum problema, então acredito que a causa seja o tensorflow, mas não sei o que está errado.

Eu concordo com @ Hayashi-Yudai: O mesmo é verdade sobre MXNet. A configuração idêntica funciona bem quando o Tensorflow falha.

Meio Ambiente:
RTX2080
Ubuntu 18.10
Driver 430,26
CUDA 10.0 (também 10.1, que ainda não é compatível com TF)
cuDNN 7.6.1
mxnet-cu100 1.4.1
tensorflow-gpu 1.14.0

Olá pessoal, estou usando os pesos do modelo pré-treinado com backbone ResNet50 no conjunto de dados COCO para treinar no meu conjunto de dados CSV. Estou recebendo este erro: Desconhecido: Falha ao obter o algoritmo de convolução.
--batch-size 7 --etapas 9 --epochs 4
--snapshot-path snapshots --tensorboard-dir tensorboard
csv dataset / train.csv dataset / classes.csv Tentei resolver o problema com o seguinte script na linha de comando no ambiente virtual:
Pitão

importar tensorflow

de tensorflow.compat.v1 import ConfigProto
de tensorflow.compat.v1 import InteractiveSession
config = ConfigProto ()
config.gpu_options.allow_growth = True
sessão = InteractiveSession (config = config)

assim como
importar tensorflow como tf
config = tf.ConfigProto ()
config.gpu_options.allow_growth = True
session = tf.Session (config = config) mas não resolveu meu erro:

Estou usando: -
Ubuntu 16.0
Cuda: 10,0
Tensorflow 1.14.0

Erro:
tensorflow.python.framework.errors_impl.UnknownError: 2 erros de raiz encontrados. │ | Nenhum processo em execução encontrado |
(0) Desconhecido: Falha ao obter o algoritmo de convolução. Provavelmente porque cuDNN falhou ao inicializar, então tente ver se há um aviso │ + ------------------------------- ---------------------------------------------- +
a mensagem de registro foi impressa acima. │
[[{{conv1 / convolução do nó}}]] │
[[perda / adicionar / _2377]] │
(1) Desconhecido: Falha ao obter o algoritmo de convolução. Isso provavelmente ocorre porque cuDNN falhou ao inicializar, então tente ver se um aviso │
a mensagem de registro foi impressa acima. │
[[{{conv1 / convolução do nó}}]] │
0 operações bem-sucedidas. │
0 erros derivados ignorados. │
terminar chamado sem uma exceção ativa │
Abortado (core despejado)
Qualquer ajuda seria apreciada.

Mesmo problema aqui. A solução alternativa Allow_growth funciona. Caso contrário, recebo este erro no conjunto de dados de tensorflow MNIST mais básico.

RTX2060 móvel aqui.

O problema ocorre com tensorflow compilado do branch r2.0, bem como TF 1.4 instalado via conda com conda (tensorflow-gpu).

@ Hayashi-Yudai

Tentei config.gpu_options.allow_growth = True, mas não resolveu o erro.

Quais foram os comandos exatos que você adicionou ao seu código? Tente o seguinte, se for diferente ...

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

@ synapse8 Obrigado pelo seu comentário. Tentei, mas o resultado foi o mesmo.

A propósito, experimentei o nvidia-docker e correu bem, exceto que a versão python é 3.5.
https://docs.nvidia.com/deeplearning/frameworks/tensorflow-release-notes/running.html#running

Uma informação adicional, se você não se importa em usar o python 3.6.8 e tensorflow-gpu 1.12.0, você pode usar o 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

Testei a compilação de tf-2.0.0-beta1 a partir de fontes com CUDA-10.1 e CUDNN-7.6.2.4 e o erro não se manifestou.

Você pode encontrar imagens docker para construir um pacote tf-gpu e um pacote tf-base aqui:
https://github.com/edowson/docker-tensorflow

O canal anaconda não tem cudnn==7.6.2 no momento em que escrevo este comentário.

Windows 7, bati minha cabeça contra a parede sobre Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR por um bom tempo tentando conseguir uma nova máquina.

Reinstalações, muitas outras coisas neste e em outros tópicos não corrigiram.

Ao testar que não ter cudnn64_7.dll causaria um erro diferente do CUDNN_STATUS_INTERNAL_ERROR , renomeei a dll. Confirmando que o erro era, em vez de um erro de tipo CUDNN NOT INSTALLED , desfiz a alteração do nome do arquivo.

Magicamente, tudo começou a funcionar.

Não faço ideia por que ou como, mas faz. Espero que isso ajude mais alguém. Caso contrário, leva apenas alguns segundos para tentar.

Descobri que esse problema foi causado por eu fazer duas chamadas erroneamente para tf.Session

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

# several lines of code later...

sess = tf.Session(config=config)

Provavelmente não é a causa raiz para a maioria das pessoas, mas pode valer a pena dar uma olhada.

Apenas compartilhar "allow_growth = True" resolve o problema para meu sistema abaixo
rtx 2080ti, ubuntu18.04, cuda9.0, cudnn7, tf1.9

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

Tem a ver com a fração de memória disponível para carregar recursos da GPU para criar o cudnn handle, também conhecido como per_process_gpu_memory_fraction .
Reduzir sozinho essa fração de memória resolverá o erro.

> 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])

Use a menor fração que puder caber em sua memória. (No código, eu uso 0,7, você pode começar com 0,3 ou ainda menor, depois aumentar até obter o mesmo erro, esse é o seu limite.)
Passe-o para o seu tf.Session() ou tf.train.MonitoredTrainingSession() ou sv.managed_session() do Supervisor como configuração.

Isso deve permitir que sua GPU crie um identificador cudnn para seu código do TensorFlow.

Conforme explicado aqui , a nova abordagem no TF 2.0 para definir config.gpu_options.allow_growth = True é:

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)

Com este trecho de código e TF 2.0 RC1, o erro não aparece mais.
No entanto, devido ao número de pessoas que têm uma GPU Nvidia 20XX, acho que seria uma boa ideia resolver esse problema nativamente antes do lançamento da versão final do TF 2.0.

Tive o mesmo problema com 1080Ti e TitanX no TF1.4 e as sugestões de @ va-andrew e @oscarlinux salvaram o dia! O que me lembra, em primeiro lugar, por que mudei para o pytorch e nunca mais voltei. Infelizmente, ainda há pessoas usando TF ... então eu ainda tenho que passar por essa dor sempre que uso sua base de código ... talvez seja hora de brincar um pouco com o ONNX.

Para qualquer outra pessoa que descobrir isso após a atualização para o tensorflow 2.0, a API e o código são ligeiramente diferentes.

Ubuntu 18
Tensorflow 2.0
Tensorflow-gpu 2.0
GeForce RTX 2070

Código atualizado 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)

Essa solução funcionou para mim. (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)

Adicione um ponto de dados adicional:
rtx 2080ti, ubuntu18.04, cuda10.0, cudnn7
No meu caso, não funciona com tf1.14 e 1.15rc3

@ w4nderlust , para 1.14 e 1.15 você desejará continuar a definir a opção de configuração de sessão config.gpu_options.allow_growth = True . É isso que você está relatando que não funciona ou apenas o mecanismo tf.config.experimental ?

@ w4nderlust , para 1.14 e 1.15 você desejará continuar a definir a opção de configuração de sessão config.gpu_options.allow_growth = True . É isso que você está relatando que não funciona ou apenas o mecanismo tf.config.experimental ?

Desculpe deveria ter sido mais preciso, estou relatando que sem config.gpu_options.allow_growth = True ainda não funciona na minha configuração com 1.14 e 1.15rc3.

Acho que encontrei uma solução alternativa melhor do que config.gpu_options.allow_growth = True .

Para minha configuração (_RTX 2070_, docker image _tensorflow: 1.15.0-gpu-py3_), definir config conforme mostrado abaixo evita o _CUDNN_STATUS_INTERNAL_ERROR_ enquanto ainda aloca toda a memória GPU .
Isso é muito útil para modelos grandes que não caberiam na memória no modo allow_growth , mas cabem apenas quando toda a memória é alocada.

Para alocar toda a memória em RTX:
config.gpu_options.per_process_gpu_memory_fraction = 1.0

Para alocar toda a memória em RTX:
config.gpu_options.per_process_gpu_memory_fraction = 1.0

@PoloShock
Tentei fazer isso com o TF 2.0 e não parece funcionar.
Ubuntu18.04, RTX 2080, CUDA10, cudnn 7.6.

Para TF 2.0, a API para limitar o uso de memória da GPU mudou.

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 , você entende por que esse problema só aparece no RTX? Pode ser porque temos outros aplicativos usando-o como uma GPU de exibição simultaneamente com o TensorFlow?

É difícil para mim depurar isso diretamente porque não tenho acesso a uma GPU RTX.

@sanjoy Estou executando o display no GPU integrado. Nenhum outro aplicativo em meu único RTX gpu durante a execução do TensorFlow.

Tentei usar isso para o Tensorflow 2.0:

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

Ele corrige o erro cudnn no meu RTX2080, mas o treinamento é tão rápido quanto o meu 1050Ti no meu laptop!
Durante o treinamento de um 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 |
+-----------------------------------------------------------------------------+

Adicionando

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

Não resolveu o problema, sem allow_growth estou recebendo o erro cudnn e, de qualquer maneira, meu RTX está usando apenas algo como 3Gb ou memória.

Qualquer ideia ?

eu tentei

    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)])

mas cudnn ainda está dando um erro

Também recebo este erro ao trabalhar na imagem do Docker do tensorflow 1.15.0-py3-gpu (Ubuntu 18.04) com duas GPUs Titan V (@sanjoy) - não RTXs. No entanto, esse erro só parece ocorrer para mim no meu GPU0 que tem Xorg e gnome-shell usando memória GPU0, enquanto o GPU1 só tem python usando GPU mem e não lança esse erro. O erro também é intermitente, infelizmente - às vezes consigo remover o contêiner do docker, recriá-lo com as mesmas configurações e o mesmo código, então o erro irá embora. Ou não.

Consegui corrigi-lo usando a interface de back-end do Keras com:

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 seguir está minha nvidia-smi em ambas as GPUs

+-----------------------------------------------------------------------------+
| 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 |
+-----------------------------------------------------------------------------+

Estou tendo o mesmo problema que @clementpoiret com TF 2.0 instalado via conda. Usando o sinalizador allow_growth o problema desaparece, mas isso também torna o treinamento muito, muito lento, mais lento do que o que eu tinha no TF 1.x ... Ansioso primeiro, hein?

@clementpoiret e @EKami , isso acelera seu treinamento se você substituir config.gpu_options.allow_growth = True por config.gpu_options.per_process_gpu_memory_fraction = 0.8 ? Você pode experimentar para ver qual fração faz mais uso de sua gpu.

@ synapse8 Não vejo algo equivalente na documentação do tensorflow 2.0, alguma forma de fazer isso com tf.config.experimental?

Edit: Vou tentar definir a memória desta forma, para ver se está resolvendo o 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)

Desta forma, podemos simplesmente chamar setup_gpus(True, .9)

@clementpoiret : Observe que a chamada tf.config.experimental.set_memory_growth é desnecessária, já que tf.config.experimental.set_virtual_device_configuration substitui esse sinalizador, pois divide a memória da GPU e pré-aloca a memória alocada.

Este problema não se limita ao RTX. Ou TF 2.0.

Adicionando:
_from tensorflow.compat.v1 import ConfigProto
de tensorflow.compat.v1 import InteractiveSession
config = ConfigProto ()
config.gpu_options.allow_growth = True
sessão = InteractiveSession (config = config) _

Resolve o problema "Não foi possível criar o identificador de cudnn: CUDNN_STATUS_INTERNAL_ERROR" com o ambiente da seguinte maneira:

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
Isso poderia ser um problema de alocação de bloco contíguo máximo com os drivers NVIDIA? Onde está tudo bem alocar a mesma quantidade total de memória, mas em blocos menores?

Oi,

Não consigo reproduzir isso na minha máquina, então vou precisar de ajuda para causar o root. Temos alguém aqui que pode reproduzir o problema e está disposto a fazer alguma depuração prática?

Como ponto de partida, gostaria de entender por que MinSystemMemory não preserva memória suficiente para cuDNN. Se alguém com uma configuração que reproduz este problema puder adicionar algum registro (como um patch local) para descobrir a quantidade de memória retornada por MinSystemMemory isso seria ótimo. E aumentar o número mágico 0.05 em MinSystemMemory ajuda a situação?

@sanjoy Tenho uma versão que apresenta esse problema. Como eu faria para acessar MinSystemMemory ou "definir o número mágico 0,05"? Voltei a usar o cuda 9.1 na maior parte do tempo, mas não me importo de tentar algumas coisas.

@odinsbane, você terá que construir o TensorFlow a partir da fonte para fazer o que sugiro abaixo.

O primeiro passo é adicionar LOG(INFO) ou std::cerr linhas a MinSystemMemory para imprimir available_memory e o valor de retorno de MinSystemMemory . available_memory concorda com o que nvidia-smi imprime? Quanta memória estamos deixando para o sistema?

Em segundo lugar, aumentar o número mágico 0.05 para, digamos, 0.07 ajuda em tudo?

Este funciona! Obrigada galera!

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)

estamos enfrentando um problema semelhante em nosso RTX 2070 (Ubuntu 18.04, TF2). Tentamos diferentes combinações das versões CUDA 10.0 e libcudnn7.xxx, mas o erro continua aparecendo novamente.
Em outra máquina temos uma GTX 1080ti e esta roda sem problemas.
O driver nvidia é 430,50 em ambos os casos.

Não é causado por tf.keras.utils.plot_model , eu o removo e esse erro ainda aparece, mas com menos frequência.
Atualização: acho que isso só acontece quando uso tf.keras.utils.plot_model . Vou continuar tentando.

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

Tenho um problema semelhante com RTX 2080 Ti no Ubuntu 18.04.3 LTS, tf 1.15, cuda 10.0.

O que é estranho no meu caso é que isso só acontece muito ocasionalmente e, uma vez que acontece, vai durar de minutos a horas e depois simplesmente desaparecer .

Tentei todas as soluções acima e nenhuma pode consertar imediatamente. Tentei não fazer nada e apenas esperar, ele finalmente desaparecerá.

O que também tentei e não mencionei acima:

  1. Remover diretório ~/.nv
  2. Simplesmente reinicie

Para sua informação, logs de erro

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.

Estamos enfrentando problemas relevantes

Especificações do sistema

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

O erro é acionado quando tento usar LSTM, GRU, RNN etc.

Erro real

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

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

Problema aparente

Parece que toda a minha memória foi consumida muito rápido. Os problemas parecem surgir apenas no modo gpu, o mesmo código funciona bem com cpu

Ensaios

  • permitir o crescimento da memória
  • criar um dispositivo virtual com memória limitada

Ambas as tentativas produzem o mesmo erro.

Alguma ideia?

Não posso fazer progresso neste problema porque não posso reproduzi-lo. Se você consegue reproduzir isso de forma confiável em sua máquina, você pode ajudar; veja como: https://github.com/tensorflow/tensorflow/issues/24496#issuecomment -560963770, https://github.com/tensorflow/tensorflow/issues/24496#issuecomment -561366750

Não posso fazer progresso neste problema porque não posso reproduzi-lo. Se você consegue reproduzir isso de forma confiável em sua máquina, você pode ajudar; veja como: # 24496 (comentário)

Olá @sanjoy , estou muito disposto a ajudar, mas infelizmente não posso construir tf da fonte porque estou usando as propriedades da minha universidade para fazer meus experimentos e meu laptop pessoal não está equipado com uma GPU. Existe alguma outra maneira de obter o log de que precisamos?

Encontrei o seguinte código sobre estouro de pilha , pode ajudar?

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))

Existe alguma outra maneira de obter o log de que precisamos?

Vou verificar uma instrução VLOG para obter essas informações. Uma vez feito isso, você será capaz de instalar e reproduzir isso com tf-nightly (com alguns sinalizadores extras, vou deixar você saber exatamente quais)?

Certamente, posso instalar um pacote nesse computador se estiver disponível em pip ou conda e usar um ambiente virtual. Vou tentar reproduzir o erro.

Certamente, posso instalar um pacote nesse computador se estiver disponível em pip ou conda e usar um ambiente virtual. Vou tentar reproduzir o erro.

Você pode instalar o tf-nightly (de modo que pegue o commit que adiciona o registro) e execute com a variável de ambiente TF_CPP_VMODULE definida como gpu_device=5 ? Isso deve imprimir duas linhas 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                                              

Você pode relatar esses números aqui?

Desculpe, meu código atual não é compatível com tf 2.0 (eu uso 1.15), estou tentando atualizá-lo. Por favor me dê algum tempo.

Este problema parece relacionado com meu RTX2080, eu tenho um desktop GTX1080, tudo parece ok, então eu uso conda clone o ambiente conda para meu notebook RTX2080, eu uso tensorflow2.0.0-gpu. uma vez que o código do aplicativo usa Conv2d, LSTM, GRU, esse problema surge.
antes de usar os seguintes códigos para resolver este problema:
gpus = tf.config.experimental.list_physical_devices ('GPU')
se gpus:
experimentar:

Atualmente, o crescimento da memória precisa ser o mesmo nas GPUs

    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:

O crescimento da memória deve ser definido antes que as GPUs sejam inicializadas

    print(e)

mas desde alguns dias atrás, o método acima não funciona mais

Estou tendo o mesmo problema com gtx 960m

Olá @sanjoy , acabei de receber 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

Olá @sanjoy , acabei de receber 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

Obrigado!

Infelizmente, isso não ajudou tanto quanto eu pensava. Se eu fixar MinSystemMemory em uma compilação local para 542015488 (ou seja, min_system_memory = std::min(min_system_memory, 542015488ll) ), o resnet (por exemplo) parece funcionar bem e não recebo nenhum erro de cuDNN .

@sanjoy Consigo reproduzir o problema (de forma consistente).

Mensagens relevantes da última noite:

Com o crescimento da memória permitido explicitamente

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

Sem qualquer alteração na configuração do dispositivo GPU

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



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



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

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

EDIT: Informações do modelo, se ajudar.

__________________________________________________________________________________________________
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

Um exemplo mínimo usando TF 1.15, e recebo este erro. Em RTX 2070 e NVIDIA 440.44 e CUDA versão 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.

Quero salientar em um problema separado https://github.com/tensorflow/tensorflow/issues/36501 que, embora o uso dessas opções permita que o código seja executado, observar o uso real da memória das GPUs mostra que nem mesmo é fazendo uso de memória incremental. Portanto, a opção acima corrige o erro, mas na verdade não faz o que afirma estar fazendo. Eu costumava usar o mesmo modelo em versões mais antigas do TF, como 1.2 ... etc, e esses faziam alocação incremental de memória real.

Tenho os mesmos problemas que todos aqui! Depois de instalar o tf 2.1, não consegui executar um exemplo simples de MNIST sem adicionar aumento de memória à GPU. Eu uso um 2080 ti .

O principal problema que enfrento é que não posso executar tensorflow-Probability junto com o tf 2.1 sem obter o maldito erro interno CUDNN, mesmo com o aumento da memória adicionado ao código. Tentei instalar o tf 2.0, CUDA 10.0 e CUDA 10.1, versões CUDNN diferentes. Consegui consertar o exemplo simples de MNIST para funcionar sem o crescimento depois de reinstalar completamente meu ubuntu, mas não o exemplo de probabilidade de tensorflow. Finalmente tentei usar um tensorflow nightly docker oficial e ainda obtive o mesmo erro ao usar a probabilidade de tensorflow (tf 2.2 dentro do contêiner). Tudo funciona bem na CPU. Eu também tentei rodar o mesmo docker em uma máquina com 1080 ti e funcionou ... Há definitivamente algo errado com a série RTX que sinto.

erro com exemplo de tf docker e tensorflow-probabilidade e informações extras de depuração 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 Tenho o mesmo problema com o RTX 2080 e posso criar a partir da fonte, se necessário.

@odinsbane, você terá que construir o TensorFlow a partir da fonte para fazer o que sugiro abaixo.

O primeiro passo é adicionar LOG(INFO) ou std::cerr linhas a MinSystemMemory para imprimir available_memory e o valor de retorno de MinSystemMemory . available_memory concorda com o que nvidia-smi imprime? Quanta memória estamos deixando para o sistema?

Em segundo lugar, aumentar o número mágico 0.05 para, digamos, 0.07 ajuda em tudo?

pode confirmar que construir a partir da fonte alterando o número mágico 0.05 número mágico para 0.1 parece ter resolvido o problema (pelo menos para 1.15.2)!

Em um oceano de mensagens barulhentas, o número mágico mínimo da memória do sistema parece totalmente lógico. Obrigado por compartilhar!

@chsigg Alguma sugestão? Talvez possamos tentar inicializar cuDNN, cuBLAS e outras bibliotecas NVIDIA _antes_ de reservarmos toda a memória GPU?

Também podemos tentar habilitar allow_growth por padrão, mas isso vai levar algum tempo.

Este problema parece relacionado com meu RTX2080, eu tenho um desktop GTX1080, tudo parece ok, então eu uso conda clone o ambiente conda para meu notebook RTX2080, eu uso tensorflow2.0.0-gpu. uma vez que o código do aplicativo usa Conv2d, LSTM, GRU, esse problema surge.
antes de usar os seguintes códigos para resolver este problema:
gpus = tf.config.experimental.list_physical_devices ('GPU')
se gpus:
experimentar:

Atualmente, o crescimento da memória precisa ser o mesmo nas GPUs

    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:

O crescimento da memória deve ser definido antes que as GPUs sejam inicializadas

    print(e)

mas desde alguns dias atrás, o método acima não funciona mais

Tenho tentado executar o código de classificação de imagem básica lambda Tensorflow2-tutorial por dias e recebo o mesmo erro de manipulação de cudnn até tentar sua solução. Ele finalmente está rodando agora no RTX 2070 Max Q e usando memória GPU mínima.

Eu também encontro esse problema
anacondacloud install tensorflow-gpu2.0

rtx2070s
tensorflow-gpu.2.0.0
cuda 10.0.13
cudnn 7.6.5
Não foi possível criar cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
Falha ao obter algoritmo de convolução. Isso provavelmente ocorre porque cuDNN falhou ao inicializar, então tente ver se uma mensagem de log de aviso foi impressa acima.

Eu também encontro esse problema
anacondacloud install tensorflow-gpu2.0

rtx2070s
tensorflow-gpu.2.0.0
cuda 10.0.13
cudnn 7.6.5
Não foi possível criar cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
Falha ao obter algoritmo de convolução. Isso provavelmente ocorre porque cuDNN falhou ao inicializar, então tente ver se uma mensagem de log de aviso foi impressa acima.

Você inseriu:

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)

no topo do seu código de entrada?

Depois de algum tempo experimentando um problema aparentemente diferente falhando com tf.signal.stft
Finalmente encontrei este tópico e tentei a solução que permitia o crescimento da memória. Também resolveu meu problema.
Eu instalei tensorflow-gpu = 2.1 com cudatoolkit = 10.1 do anaconda, mas tentei instalar também
tensorflow-gpu via pip com exatamente o mesmo resultado. Posso reproduzir isso no linux-ubuntu 18.04 e debian 9.12 com os cartões

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

Eu também tentei dois outros cartões em nosso laboratório

  GeForce GTX 1080 Ti
  TITAN Xp COLLECTORS EDITION

onde o código funciona bem com e sem permitir o crescimento da memória

Meu problema mínimo está abaixo. Curiosamente, o problema não é convencido. Posso mudar a ordem desses três comandos e é sempre o terceiro que falha.

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")

Eu também encontrei este problema
anacondacloud install tensorflow-gpu2.0
rtx2070s
tensorflow-gpu.2.0.0
cuda 10.0.13
cudnn 7.6.5
Não foi possível criar cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
Incapaz de obter o algoritmo de convolução. Isso pode ocorrer porque cuDNN falhou ao inicializar, portanto, tente ver se a mensagem de log de aviso é impressa acima.

Você inseriu:

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)

No topo do código que você inseriu?

sim, eu resolvi esse problema desse jeito. Obrigado !!

Eu tive o mesmo problema e allow_growth = True era a solução. MAS, para TensorFlow 2, para fazer isso, você precisa adicionar as seguintes linhas:

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

Obrigado ao usuário @opcecco nesta edição: https://github.com/tensorflow/tensorflow/issues/25446

Curiosamente, o problema não é convencido. Posso mudar a ordem desses três comandos e é sempre o terceiro que falha.

@roebel Você pode anexar logs para algumas seis permutações diferentes?

E o que acontece se você alterar o programa para (dizer):

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")

A falha ainda ocorre no conv2d ou no terceiro stft ?

@sanjoy aqui três variações do script acima mudando a ordem dos comandos e uma quarta variante que começa com 4 stft e termina com conv2d

Os quatro registros diferentes usam o script de
https://github.com/tensorflow/tensorflow/issues/24496#issuecomment -593098386
substituindo as últimas quatro linhas.

Resumindo, os resultados dependem da ordem:

stft-> blas-> conv2d falha ao executar conv2d
conv2d-> stft-> blas falha ao executar stft (não o terceiro, mas o blas parece já estar carregado para conv2d
matmul-> conv2d-> stft falha ao executar STFT
stft -> - stft -> - stft-> stft-> matmul-> conv2d falha quando conv2d é executado. Por favor, veja os logs abaixo.

Não se importe em pedir outras variantes, se necessário.

conv2d último:

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

log.conv2d.last.txt

último matmul

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

log.matmul.last.txt

stft último

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

log.stft.last.txt

4 stft primeiro conv2d último:

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

log.multi_stft.first.txt

Muito Obrigado

Tive o mesmo problema com a seguinte configuração:
TensorFlow instalado de (fonte ou binário): r1.13.1, r.1.13.2, r1.14
Versão Python: 3.6.1
Versão do Bazel (se compilando da fonte):
Versão do GCC / Compilador (se compilando da fonte):
Versão CUDA / cuDNN: CUDA 10 com cuDNN 7.4.1
Modelo de GPU e memória: RTX 2070 8GB.

Resolvi este problema com:
TensorFlow instalado de (fonte ou binário): r1.12.0
Versão Python: 3.6.9
Versão do GCC / Compilador: 4.8
Versão CUDA / cuDNN: CUDA 9.0 com cuDNN 7.1.4
Modelo de GPU e memória: RTX 2070 8GB.
Espero que seja útil para você

Eu também enfrentei esse problema, que foi resolvido adicionando uma variável de ambiente TF_FORCE_GPU_ALLOW_GROWTH = true.

A configuração é a seguinte:
Windows 10
Tensorflow compilado da fonte r2.0
Bazel: 0,26,1
Compilador C ++: MSVC 2017
CUDA: 10
cuDNN: 7.6.5

cpu intel4930, nvidia titan XP pascal
Ubuntu 18.04.4, miniconda mais recente,
`! lista conda | grep "cud" dá

    cudatoolkit               10.1.243             h6bb024c_0  
    cudnn                     7.6.5                cuda10.1_0  

`! lista conda | grep "tensor" `` dá

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  

a primeira célula no notebook jupyter é:

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)

modelo é um autoencoder variacional com Parâmetros totais: 112.269
x_train.shape, y_train.shape, x_test.shape, y_test.shape dá
((106496, 32, 32, 1), (106496,), (12288, 32, 32, 1), (12288,))

o código inclui:

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))

e ele falha. shows de console

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

I f em vez da primeira célula, conforme observado acima, eu 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)

então eu recebo este erro


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 minhas lutas, recebi uma mensagem de um sinal vermelho 'sem entrada' em minha barra de menus que dizia 'erro quebrado contagem você não atendeu dependência'
Eu executei a atualização de software e ele deseja remover libcudnn7-dev e libcudnn7-doc
bem como atualizar 57 outras bibliotecas relacionadas ao Linux

EDIT: Após reiniciar, o modelo parece treinar com sucesso usando este:

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)

ou isto:

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)

a utilização de memória no GPU é <700 MB com tamanho de lote 16 e
~ 1 gigabyte com tamanho de lote 256 (que treina 3x mais rápido)

Eu tentei compilar a partir do código-fonte, mas tive o mesmo problema. Finalmente consegui resolver o meu problema com a definição de config.gpu_options.allow_growth = True .

Mas se eu encontrar esse problema na linha de comando, como adicionar esses códigos?

Eu também encontro esse problema
anacondacloud install tensorflow-gpu2.0
rtx2070s
tensorflow-gpu.2.0.0
cuda 10.0.13
cudnn 7.6.5
Não foi possível criar cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
Falha ao obter algoritmo de convolução. Isso provavelmente ocorre porque cuDNN falhou ao inicializar, então tente ver se uma mensagem de log de aviso foi impressa acima.

Você inseriu:

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)

no topo do seu código de entrada?

Eu tive exatamente o mesmo problema acima. Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR

A solução do @robosmith resolveu meu problema completamente!

Minhas especificações:
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
python 3.7.7

Construído via conda install tensorflow-gpu keras

Muito obrigado! Esta é a primeira vez que faço o TF-2 funcionar! E o TF-1 parou de funcionar completamente, por isso decidi fazer um upgrade e 'ver o que acontece'!

Obrigado!

config.gpu_options.allow_growth = True

quando você usa o tensorflow 2.0, você pode usar
tf.config.experimental.set_memory_growth(tf.config.list_physical_devices('GPU')[0], True)
este código está depois de import tensorflow as tf mas antes do seu código.

Eu tentei compilar a partir do código-fonte, mas tive o mesmo problema. Finalmente consegui resolver o meu problema com a definição de config.gpu_options.allow_growth = True .

Este código é compartilhado para torná-lo mais rápido disponível para usuários de tensorflow e keras.
fonte daqui

# 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

Só queria intervir e dizer que o problema ainda existe;

Minhas especificações:
Ubuntu 20.04
NVIDIA RTX 2070
Nvidia_driver 440.64
Tensorflow-gpu 2.0.1 (instalado por meio do conda, que instala automaticamente o Cudatoolkit e o CuDNN no mesmo ambiente)
cudatoolkit 10.1.243
cudnn 7.6.5

O problema foi resolvido por tf.config.experimental.set_memory_growth(tf.config.list_physical_devices('GPU')[0], True)

No entanto, isso parece mais uma solução alternativa do que uma correção real, e muitas pessoas têm cartões 20XX atualmente. Provavelmente deve haver uma atualização na qual esse problema seja abordado.

Atualização: como estou inicializando duas vezes, tentei verificar se há janelas também. O problema persiste aí.
Windows 10
Driver Nvidia 445.87
Fora isso tudo é semelhante

Instalar o driver mais recente (445,87) para meu RTX 2080 resolveu esse problema para mim.

@NBouman Isso é interessante, mas para mim no Ubuntu 18.04 com GeForce GTX 1050 TI, acabei de atualizar para o último driver disponível 440.82. Ainda é necessário permitir o crescimento da memória para fazer funcionar

Instalar o driver mais recente (445,87) para meu RTX 2080 resolveu esse problema para mim.

@NBouman Qual sistema operacional você está usando? Estou no Ubuntu 20.40 e o driver mais recente disponível que consegui encontrar é 440.82 e, como @roebel , o problema persiste.

@roebel @eduardoscsouza Estou no Windows 10 com a máquina que tinha esse problema anteriormente.

Só queria intervir e dizer que o problema ainda existe;

Minhas especificações:
Ubuntu 20.04
NVIDIA RTX 2070
Nvidia_driver 440.64
Tensorflow-gpu 2.0.1 (instalado por meio do conda, que instala automaticamente o Cudatoolkit e o CuDNN no mesmo ambiente)
cudatoolkit 10.1.243
cudnn 7.6.5

O problema foi resolvido por tf.config.experimental.set_memory_growth(tf.config.list_physical_devices('GPU')[0], True)

No entanto, isso parece mais uma solução alternativa do que uma correção real, e muitas pessoas têm cartões 20XX atualmente. Provavelmente deve haver uma atualização na qual esse problema seja abordado.

Atualização: como estou inicializando duas vezes, tentei verificar se há janelas também. O problema persiste aí.
Windows 10
Driver Nvidia 445.87
Fora isso tudo é semelhante

Para tensorflow 2.0.0 trabalhou com:
tf.config.experimental.set_memory_growth(tf.config.experimental.list_physical_devices('GPU')[0],True)

Obrigado!!! milhares de obrigado !!!!!!!!!!!!!!!

SO: ubuntu 18,04 lts

Versão do driver: 435,21

CUDA: cudatoolkit 10.1

CUDNN: cudnn-7.6.5-cuda10.1_0

Eu usei o Anaconda install tensorflow

conda create -n tf-gpu tensorflow-gpu

o cudatoolkit e cudnn são auto-instalados pelo anaconda através do comando anterior.

Eu tenho a mesma pergunta, o erro:

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}}]]

Portanto, temos aqui um problema que não foi resolvido (além de uma solução alternativa que vai contra as recomendações oficiais de não usar o crescimento da memória para um tratamento mais eficiente da memória). Não houve muito feedback da equipe de desenvolvimento. Eu quero saber porque?

Este bug parece afetar uma variedade de versões de tensorflow (1.13, 2.0, 2.1), se eu vi corretamente todos os problemas são relatados para acontecer com cuda 10. O código funciona bem em muitas placas, mas não em outras.
Alguém da equipe de desenvolvimento poderia nos dizer se isso sugere um problema no driver cuda mais do que na camada tensorflow? Nesse caso, certamente seria útil transmitir o relatório do bug para as páginas de suporte da NVIDIA. Não é?

Alguém da equipe de desenvolvimento do tensorflow poderia comentar sobre como eles vêem esse bug? Alguém está investigando isso?

As pessoas têm verificado se há duas bibliotecas compartilhadas CuDNN 7 no caminho ou no caminho da biblioteca LD. Não há números secundários ou de patch nesta biblioteca, mas incompatibilidades de versão podem levar a esta mensagem de erro.

Abri um relatório de bug na NVIDIA, vou informá-lo sobre o que sai disso.

@samhodge
Na verdade, existem muitas versões do libcudnn instaladas, cada env anaconda tem sua própria versão.
Normalmente, o anaconda é instalado com o rpath devidamente configurado, por isso é bastante difícil não obter as bibliotecas certas.

Eu fiz um strace e grep as bibliotecas que são abertas quando falha
Eles vêm consistentemente do diretório env anaconda que hospeda o pacote tensorflow (veja abaixo).
Além da libcuda, essa é a versão 440.82 e que compilei com o instalador da NVIDIA.

Posso definir o LD_LIBRARY_PATH para um dos outros dirs de env lib do anaconda com diferentes cudatoolkits e diferentes libcudnn, o traço permanece o mesmo.
Observe também que não é lbcudnn que apresenta o problema. É sempre a terceira biblioteca libcuxyz que é
usado e isso apenas em GPUs específicas (usei o mesmo script de instalação em máquinas diferentes com GPUs diferentes, alguns funcionam, outros não) e funcionam todos se o crescimento da memória estiver 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

Eu tenho o mesmo problema no Ubuntu 20.04 com uma GeForce RTX 2060 SUPER. Um NN com camadas densas funciona bem. Mas com camadas da CNN estou recebendo 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.
Adicionar tf.config.experimental.set_memory_growth(tf.config.list_physical_devices('GPU')[0], True) não faz diferença no erro.
Acompanhei a instalação de acordo com https://www.tensorflow.org/install/gpu e nvidia-smi programas:
Driver Version: 440.64.00 CUDA Version: 10.2
Meu env conda tem:

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

Em um env conda com tf 1.15 estou recebendo o mesmo erro. Seria ótimo se isso pudesse ser corrigido.

Atualizar

Depois de usar export TF_FORCE_GPU_ALLOW_GROWTH=true , tudo funciona. Fiquei com a impressão de que tf.config.experimental.set_memory_growth(tf.config.list_physical_devices('GPU')[0], True) daria no mesmo, mas não é o caso. Acho que isso deve ser declarado claramente na página de suporte da GPU do TensorFlow.

@samhodge
Na verdade, existem muitas versões do libcudnn instaladas, cada env anaconda tem sua própria versão.
Normalmente, o anaconda é instalado com o rpath devidamente configurado, por isso é bastante difícil não obter as bibliotecas certas.

Eu fiz um strace e grep as bibliotecas que são abertas quando falha
Eles vêm consistentemente do diretório env anaconda que hospeda o pacote tensorflow (veja abaixo).
Além da libcuda, essa é a versão 440.82 e que compilei com o instalador da NVIDIA.

Posso definir o LD_LIBRARY_PATH para um dos outros dirs de env lib do anaconda com diferentes cudatoolkits e diferentes libcudnn, o traço permanece o mesmo.
Observe também que não é lbcudnn que apresenta o problema. É sempre a terceira biblioteca libcuxyz que é
usado e isso apenas em GPUs específicas (usei o mesmo script de instalação em máquinas diferentes com GPUs diferentes, alguns funcionam, outros não) e funcionam todos se o crescimento da memória estiver 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

Então você está meio que ilustrando meu ponto de vista libcudnn.so.7 não diz 7.XXX.YYY além de que 7.XXX.YYY tem uma dependência adicional de CUDA 10.2 10.1 10.0 9.2 9.1 9.0 etc

Não vi o erro desde que comecei a gerenciar bem o caminho e a gerenciar a quantidade de memória disponível antes de inicializar um gráfico de tamanho conhecido e me certificar de que a GPU de destino usava apenas memória suficiente para o gráfico e memória suficiente para consultar a quantidade de CUDA a memória está disponível.

Acho que é um problema de recursos. Quanta memória está disponível quando você inicia o processo e quanta memória seu gráfico usa?

@ kognat-docs

Então, você está ilustrando meu ponto de vista libcudnn.so.7 não diz 7.XXX.YYY além disso 7.XXX.YYY tem uma dependência adicional do CUDA 10.2 10.1 10.0 9.2 9.1 9.0 etc.

A pergunta que você fez foi "As pessoas têm verificado se há duas bibliotecas compartilhadas CuDNN 7 no caminho ou no caminho da biblioteca LD" E minha resposta foi: eu verifiquei isso, há apenas um.
Enviei-lhe o rastreamento.

Não vi o erro desde que comecei a gerenciar o caminho

O que você quer dizer com gerenciar o caminho?
Sempre administro meus caminhos! Instalei um ambiente conda que verifiquei ser consistente! Tudo está como foi embalado pelo anaconda, eu verifiquei isso.

De qualquer forma, você pode acreditar que sou muito estúpido para montar anaconda. Bem
Agora fiz o download da imagem oficial do docker

tensorflow / t ensorflow: 2.1.0-gpu-py3

e executar meu script lá. Ele trava se eu não tiver

export TF_FORCE_GPU_ALLOW_GROWTH = true

Posso gerenciar caminhos melhor?

e gerenciar a quantidade de memória disponível antes de inicializar um gráfico de um tamanho conhecido e certificar-se de que a GPU de destino usou apenas memória suficiente para o gráfico e memória suficiente para consultar quanta memória CUDA está disponível.

Acho que é um problema de recursos. Quanta memória está disponível quando você inicia o processo e quanta memória seu gráfico usa?

Como escrevi acima em meu relatório, não há gráfico (ou melhor, quase não há gráfico)! Acabei de executar essas quatro linhas

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")

e ele trava. Se eu mudar a ordem das três linhas, ele sempre trava após essas três operações (eu havia explicado isso em meu relatório de bug).

Só por diversão, contei os bytes: são necessários <83kB de memória de dados. A GPU está vazia, não a uso para gráficos e não há outros processos em execução. Nos vários sistemas, existem 4 GB ou 11 GB disponíveis! Além disso, sei como rodar nvidia-smi! Portanto, o cartão está vazio ainda não consigo executar essas 4 linhas que requerem 84kB!

Apenas para sua informação, um erro devido à memória esgotada parece bem diferente, eu também tenho. Para meus gráficos reais, sou muito capaz de detectá-los e reagir de acordo.

Obrigado por seus esforços de qualquer maneira.

@roebel Você viu o comentário de @sanjoy sobre a depuração do cpp https://github.com/tensorflow/tensorflow/issues/24496#issuecomment -561366750?

Eu não tive tempo de recompilar o tensorflow e testá-lo. Suas versões se movem tão rápido que demoraria um pouco para configurar e compilar tudo. Além disso, 1.15 abandonou o suporte para a versão gcc que eu uso e 1.13 não recebe nenhuma atualização, então era um pouco inútil depurar isso de qualquer maneira.

@roebel Não me lembro o que desencadeou o problema para você.

veja este https://github.com/tensorflow/tensorflow/issues/24496#issuecomment -480549043

Por isso pensei que fosse relacionado à memória, esse problema não me afetava há algum tempo, nem aos usuários do meu software em várias plataformas.

@samhodge

Sim, entendo que, se houver um bug, ele parece ser acionado apenas por uma situação bastante particular.

@odinsbane

obrigado, não eu não tinha percebido isso. Vou ver se consigo compilar a versão mais recente tf2.2.0.

Na verdade tentei o docker com tensorflow 2.2, ele usa a mesma versão do cuda 10.1 e tem o mesmo problema.

Pensei que fosse um problema apenas do Windows, então instalei um ambiente ubuntu do zero, apenas para descobrir que o problema é minha placa de vídeo (RTX 2080). Infelizmente, acho que vou selecionar uma plataforma de aprendizado de máquina diferente devido a esse problema, uma vez que parece ter sido um problema desde 2018.

@ kognat-docs

e gerenciar a quantidade de memória disponível antes de inicializar um gráfico de um tamanho conhecido e certificar-se de que a GPU de destino usou apenas memória suficiente para o gráfico e memória suficiente para consultar quanta memória CUDA está disponível.

Acho que é um problema de recursos. Quanta memória está disponível quando você inicia o processo e quanta memória seu gráfico usa?

Como escrevi acima em meu relatório, não há gráfico (ou melhor, quase não há gráfico)! Acabei de executar essas quatro linhas

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")

e ele trava. Se eu mudar a ordem das três linhas, ele sempre trava após essas três operações (eu havia explicado isso em meu relatório de bug).

Só por diversão, contei os bytes: são necessários <83kB de memória de dados. A GPU está vazia, não a uso para gráficos e não há outros processos em execução. Nos vários sistemas, existem 4 GB ou 11 GB disponíveis! Além disso, sei como rodar nvidia-smi! Portanto, o cartão está vazio ainda não consigo executar essas 4 linhas que requerem 84kB!

Você observou quanta memória estava em uso usando o relógio no nvidia-smi enquanto seu processo estava em execução com um intervalo de 50 ms?

Veja esta correção que funcionou para outras pessoas

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

Portanto, você pode fazer o patch sem tocar no código, apenas alterando seu ambiente de execução.

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

Boas notícias!
Segue
https://github.com/tensorflow/tensorflow/issues/24496#issuecomment -561366750

Eu reconstruí a versão 2.1 usando a receita do anaconda tensorflow daqui
https://github.com/AnacondaRecipes/tensorflow_recipes

Adicionei duas impressões em MinSystemMemory mostrando available_memory e min_system_memory.
No meu sistema com GeForce GTX 1050 Ti desativando o log padrão do TF
Eu tenho isso

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 relata que a GPU tem 4040 MiB, neste sistema há X rodando na placa que tem 13 MiB então os números parecem bons.

min_system_memory é definido assim

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

Portanto, a quantidade máxima de memória é escolhida de qualquer maneira. Em vez disso, adicionei um mecanismo para forçar a min_system_memory por meio da variável de ambiente TF_FORCE_MIN_SYSTEM_MEMORY_MB.
Então correndo

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

o problema está resolvido!

Infelizmente, atualmente não tenho um sistema com uma placa RTX funcionando e não tenho certeza de quando elas voltarão a funcionar. Se alguém estiver disposto a testar isso em tal placa, eu poderia fornecer o pacote pip e o conteúdo do ambiente conda para ubuntu linux que precisa ser instalado para ser executado.

Legal, @roebel !

Pode valer a pena sugerir isso como uma solicitação de pull e adicionar aos documentos.

@samhodge @sanjoy @odinsbane

Pode valer a pena sugerir isso como uma solicitação de pull e adicionar aos documentos.

Claro, mas o problema é que a solução provavelmente não funcionará com as outras placas.
Para minha GTX 1050, a memória total é de 4 GB e a memória padrão do sistema retida
por tensorflow é máximo (300 MB, 4 GB * 0,05). Então, para GTX1050, isso terá 300 MB, o que aparentemente é muito pequeno. Conforme mencionado acima, preciso aumentar para 310 MB.

Agora, para o RTX2080, a memória total é de 11 GB, com no máximo (300 MB, 11 GB * 0,05)
irá selecionar a memória do sistema para ser 550 MB, o que de acordo com as descobertas no 1050
normalmente deve ser o suficiente.

Terei acesso às GPUs RTX2080 novamente no final da semana e verei
o que eu recebo lá.

@samhodge @sanjoy @odinsbane

Finalmente, consegui executar a biblioteca corrigida nos cartões rtx 2080.
Como esperado, a versão corrigida não foi aprovada. Aqui novamente o roteiro

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")

E aqui a matriz de available memory relatada por gpu_device.cc,
valor padrão de Min_system_memory conforme selecionado em gpu_device.cc e o
min value of the min_system_memory Preciso selecionar o script para não abortar:

Cartão | AvailMem | Def MinSysMem | Requer MinSysMem
: ------- |: ----------- |: ---------- |: --------------- --------
1050 TI | 4163764224 | 314572800 | 325058560
1080 TI | 11567431680 | 578371584 | 335544320
2080 TI | 11381964800 | 569098240 | 618659840

Enquanto 1050 e 1080 executam o script com aproximadamente o mesmo tamanho de memória
o RTX2080 requer quase o dobro de memória. Isso não parece bom
para mim.

Alguma sugestão de como tentar obter um valor comparável?

@roebel

Lutei com isso em meu aplicativo C ++ por várias iterações.

O que aconteceu no final foi o seguinte.

Execute modelos na GPU apenas quando houver memória suficiente disponível para executar o modelo.

Portanto, a quantidade de memória que o modelo exigirá é quantificável.

Portanto, você precisa ter uma memória GPU como uma porcentagem que se encaixará nesse modelo.

Então você também precisa saber exatamente quanta memória está disponível no cartão antes de alocar a memória, que está sujeita a condições de corrida, porque você não sabe o que mais está usando a memória CUDA ao mesmo tempo no sistema operacional.

Mas deixando de lado a condição de corrida, você também precisa medir a memória livre.

Isso é feito usando cudaMemInfo , que por si só usa memória.

Portanto, desde que você tenha memória suficiente para executar cudaMemInfo uma vez para medir e você precisa ter certeza de que memória suficiente está livre para caber no modelo e executar cudaMemInfo mais uma vez, então e somente então você pode alocar o suficiente da porcentagem de VRAM disponível nessa placa para executar o modelo.

De qualquer forma, a conclusão do meu balbucio aleatório é que cudaMemInfo é necessário para pesquisar a quantidade de memória disponível para alocar, que por si só também usa um pouco dessa memória disponível.

Talvez de alguma forma a quantidade de memória usada por cudaMemInfo seja diferente em uma placa baseada em Turing comparada em uma placa baseada em Pascal, posso pedir a alguém da NVIDIA para dar uma olhada, se desejar.

Sim, não consigo encontrar nenhuma referência ao cudaMemInfo , mas parece o tipo de pegada que seria o máximo de 300 MB e 5% da memória do cartão.

dando uma olhada em:

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

Não parece que está usando isso por si só.

Não acho que devamos brincar de gato e rato com a quantidade de memória que precisamos reservar para as bibliotecas do sistema - como você observou, não há uma maneira sistemática de fazer isso direito.

Em vez disso, devemos tentar inicializar as bibliotecas do sistema antes que o alocador BFC tenha a chance de alocar o restante da memória da GPU.

CC @chsigg

Provavelmente, só se deve fazer isso se permitir crescimento de memória estiver desativado. Caso contrário, você sempre precisará de 580 MB para o 2080, mesmo se não precisar de todos os operadores.

Fiz mais alguns testes sobre os requisitos mínimos de memória do sistema para executar combinações das três operações do meu caso de teste. Eu comparo apenas os cartões 1080 e 2080. Você não encontra o conv2d sozinho porque ele inicializa o blas em qualquer caso. Resultados

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

Pode-se ver que em 2080 o cuda requer uma sobrecarga para cada operação, e que essa sobrecarga aumenta ao usar mais bibliotecas. Na maioria dos casos, a sobrecarga é <100MB mas torna-se >220MB uma vez que Conv2D está envolvido.

Se @samhodge tiver contato com a NVIDIA, pessoalmente, acharia interessante saber se isso é intencional.

Olá a todos!
Resolvi problema semelhante com a limitação do crescimento da memória e você pode tentar.

Você pode encontrar o código na seção Limitar o crescimento da memória

(Este é meu primeiro comentário no GitHub)

Eu tive um problema semelhante antes. limitar a memória da GPU manualmente ajudou. https://github.com/tensorflow/tensorflow/issues/25160#issuecomment -643703167

Eu tenho o mesmo problema no Ubuntu 20.04 com uma GeForce RTX 2060 SUPER. Um NN com camadas densas funciona bem. Mas com camadas da CNN estou recebendo 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.
Adicionar tf.config.experimental.set_memory_growth(tf.config.list_physical_devices('GPU')[0], True) não faz diferença no erro.
Acompanhei a instalação de acordo com https://www.tensorflow.org/install/gpu e nvidia-smi programas:
Driver Version: 440.64.00 CUDA Version: 10.2
Meu env conda tem:

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

Em um env conda com tf 1.15 estou recebendo o mesmo erro. Seria ótimo se isso pudesse ser corrigido.

Atualizar

Depois de usar export TF_FORCE_GPU_ALLOW_GROWTH=true , tudo funciona. Fiquei com a impressão de que tf.config.experimental.set_memory_growth(tf.config.list_physical_devices('GPU')[0], True) daria no mesmo, mas não é o caso. Acho que isso deve ser declarado claramente na página de suporte da GPU do TensorFlow.

Cara, sua solução salva minha vida.

A Nvidia acaba de lançar os drivers de vídeo 440.100 e 450.51 (Beta) Linux.
Experimentei o 440.100 e não resolveu o problema. Alguém já experimentou o beta 450.51?

@eduardoscsouza

A Nvidia acaba de lançar os drivers de vídeo 440.100 e 450.51 (Beta) Linux.
Experimentei o 440.100 e não resolveu o problema. Alguém já experimentou o beta 450.51?

Tentei 450.36.06. verifique https://github.com/tensorflow/tensorflow/issues/25160#issuecomment -643703167.

o código que funcionou para mim:

importar tensorflow como tf
config = tf.compat.v1.ConfigProto ()
config.gpu_options.allow_growth = True
session = tf.compat.v1.InteractiveSession (config = config)

_Certifique-se de que é um bug. De acordo com nossa política do GitHub , abordamos apenas bugs de código / doc, problemas de desempenho, solicitações de recursos e problemas de construção / instalação no GitHub. tag: bug_template_

Informação do sistema

  • Escrevi um código personalizado (em vez de usar um script de exemplo de estoque fornecido no TensorFlow): Sim e Não (descrito abaixo)
  • Plataforma e distribuição do sistema operacional (por exemplo, Linux Ubuntu 16.04): Manjaro
  • Dispositivo móvel (por exemplo, iPhone 8, Pixel 2, Samsung Galaxy) se o problema acontecer no dispositivo móvel:
  • TensorFlow instalado de (fonte ou binário): tf-nightly-gpu (19 de dezembro, r1.13)
  • Versão do TensorFlow (use o comando abaixo): 1.13.0-dev20181219
  • Versão Python: 3.7.1
  • Versão do Bazel (se compilando da fonte):
  • Versão do GCC / Compilador (se compilando da fonte):
  • Versão CUDA / cuDNN: CUDA 10 com cuDNN 7.4.1
  • Modelo de GPU e memória: RTX 2070 8 GB

Descreva o comportamento atual
Estou executando o modelo da CNN no MNIST. Quando estou executando com a GPU, estou encontrando
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

Fiz algumas pesquisas e percebi que é um problema de memória (o que não deveria ser o caso, pois tenho 32 GB de RAM e 64 GB de swap. Executei o htop ao executar o modelo e tenho 20 + GB livres, o que é mais do que o suficiente para caber nos mapeamentos de vRAM de 8 GB.

Usar o gpu_options.allow_growth = True faz com que o modelo funcione corretamente, e a configuração os.environ['CUDA_VISIBLE_DEVICES'] = '-1' também funciona. Isso significa que estou enfrentando um problema de memória, mas não vejo como.

Além disso, usar gpu_options.allow_growth = True não corrige o mesmo problema ao tentar executar tensorflow / models / official / mnist / model, que deve ter um comportamento semelhante com meu código.

Código para reproduzir o 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()

Isso funcionou para mim.RTX 2060ubuntu 18,04python 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 ...

Olá @ bm777

após minha investigação de alguns meses atrás, resumi como entendo o problema

Modelo de GPU e memória: RTX 2070 8 GB
... o que não deveria ser o caso, pois tenho 32 GB de RAM e 64 GB de

O problema não é a memória do sistema, o problema é a memória da GPU!

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

funciona porque não usa a GPU!

Algumas explicações:

TF tem dois modos de operação:

  1. allow memory growth = false : Neste caso, o TF pré-aloca alguma memória para as bibliotecas do sistema usando uma estimativa aproximada de
    quanta memória é necessária. Como você pode ler aqui https://github.com/tensorflow/tensorflow/issues/24496#issuecomment -633953715 TF usa a fórmula max(300MB, GPU-MEM * fac) para esta estimativa. Para TF2.1 fac = 0.05 para TF2.2 e se eu
    lembre-se de que é fac=0.07 . Então agora você tem 8 GB, o que dá 400 MB para memória pré-alocada de GPU no TF2.1
    e 560 MB em TF2.2.

    Avaliei experimentalmente a memória pré-alocada necessária para algumas GPUs e TF21 aqui: https://github.com/tensorflow/tensorflow/issues/24496#issuecomment -637715002 e aqui https://github.com/tensorflow/tensorflow / issues / 24496 # issuecomment -637715002

    Acontece que para operações Conv2D eu precisava de 520 MB lá, você teria menos do que no TF21, mas mais no TF22. Infelizmente você não mencionou sua versão do TF, mas presumo que você use o TF2.1. Se você usar o TF2.2 e ele ainda falhar, pode ser porque você usa uma GPU diferente. De qualquer forma, ele falha. Ver abaixo

2) allow memory growth = true : TF não usa nenhuma memória pré-alocada e carrega as bibliotecas conforme elas vêm. Na documentação do TF isso é declarado como problemático devido à potencial fragmentação da memória e, portanto, é off por padrão.

Minha vez:

Dada a grande variedade de memória necessária para as bibliotecas que depende das operações que você executa na GPU que você tem, parece muito difícil obter o modo allow memory growth = false certo (consulte https://github.com/tensorflow/ tensorflow / issues / 24496 # issuecomment-637950411). A solução atual: aumentar o tamanho da memória pré-alocada, o que foi feito para o TF2.2, é problemático se sua GPU for bastante pequena. Isso bloqueia o uso da memória, presumindo que você precisará de todas as bibliotecas disponíveis (blas, Conv, FFT e não sei se há outras). No caso de você não usar todos eles, isso resultará no desperdício de memória pré-alocada, reduzindo o tamanho do modelo que você pode carregar para o seu aplicativo. Por outro lado, acredito que o problema de fragmentação de memória pode ser evitado ao criar modelos antecipadamente, forçando o carregamento das bibliotecas do sistema antes de iniciar o treinamento. Isso parece o que está acontecendo na maioria dos casos e, portanto, parece benéfico, especialmente para GPUs com pouca memória e especialmente para treinar um único modelo, não pré-alocar, mas usar allow memory growth = true .

Pessoalmente, eu uso GPUs com memória variando de 4 GB a 11 GB e, seguindo o argumento acima, configurei TF_FORCE_GPU_ALLOW_GROWTH = true para todos eles. No momento, não tive problemas com isso.

Ola @roebel

Eu também estava pensando nas questões de erro de alocação de memória. Isso é claramente para mim agora.
Agora parece uma boa memória GPU

No passado, testei muitas opções para pré-alocar memória 😢:

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

Pessoalmente, uso GPU com 6 GB de memória.
E obrigado @roebel , por esta nova seta TF_FORCE_GPU_ALLOW_GROWTH=true para forçar minha GPU para alocação 😊.

Eu tive esse mesmo problema. Posso dizer com certeza que o problema ocorre apenas no meu 2070 RTX, e NÃO no Titan RTX, rodando exatamente o mesmo código.

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

Basta atualizar para Tensorflow 2.3 com CUDA 11 e cudnn 8.0. Ele resolveu todos os meus problemas magicamente e eu nem preciso da solução alternativa com config.gpu_options.allow_growth = True agora.

infelizmente, preciso executar um código que suporte apenas tensorflow 1.X

Basta atualizar para Tensorflow 2.3 com CUDA 11 e cudnn 8.0. Ele resolveu todos os meus problemas magicamente e eu nem preciso da solução alternativa com config.gpu_options.allow_growth = True agora.

Atualizar de 2.2 para 2.3 mesmo com TF_FORCE_GPU_ALLOW_GROWTH=false explícito também resolveu isso para mim (pelo menos por agora sou capaz de executar o código demo delf ; não testei com mais nada).

Ainda estou no CUDA 10.1, Cudnn 7.6.5.

Existe uma correção para este problema com tensorflow 2 e python3 ???

Eu tenho um:
RTX 2080

Estou recebendo esta mensagem:


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

No caso de o seu problema ter a mesma origem dos problemas que são tratados no presente número (que não posso saber a partir do seu relatório), então existem algumas soluções que você pode encontrar facilmente por meio da leitura dos últimos 10-20 posts neste fio.

Eu consertei com o seguinte:

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

Tive o mesmo problema com o RTX 2080. O código a seguir funcionou para mim.

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

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

Obrigado a todos

Acho que podemos parar de postar a correção allow_growth agora :)

RTX 2070 aqui. Estava recebendo este erro, mas agora executando com TF_FORCE_GPU_ALLOW_GROWTH=true (como outros comentadores apontaram, corrige para eles) muda a mensagem de erro para um erro de falta de memória (embora eu tenha muita memória):

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

Mas minha GPU tem 8 GB e apenas cerca de 250 MB estavam em uso antes de eu iniciar o processo. Então, eu não entendo, por que não pode alocar 3,87 GB? (reduzir o tamanho do lote não teve efeito; o arquivo hdf5 de pesos tem menos de 200 MB)

TF_FORCE_GPU_ALLOW_GROWTH = true funcionou para mim.
tf.config.experimental.set_memory_growth (gpu, True) também funcionou.

Aqui está minha configuração:
GPU GTX 1650
cuda-10-1 10.1.243-1
libcudnn7 7.6.5.32-1 + cuda10.1
Ubuntu 18.04.5 LTS

Quem não consegue definir a variável de ambiente pode tentar conforme sugerido em https://www.tensorflow.org/guide/gpu :
gpus = tf.config.experimental.list_physical_devices ('GPU')
se gpus:
experimentar:
# Atualmente, o crescimento da memória precisa ser o mesmo nas GPUs
para gpu em gpus:
tf.config.experimental.set_memory_growth (gpu, True)
logic_gpus = tf.config.experimental.list_logical_devices ('GPU')
print (len (gpus), "GPUs físicas,", len (logical_gpus), "GPUs lógicas")
exceto RuntimeError como e:
# O crescimento da memória deve ser definido antes que as GPUs sejam inicializadas
imprimir (e)

Digitar o comando mencionado no terminal funcionou para mim.

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

Basta atualizar para Tensorflow 2.3 com CUDA 11 e cudnn 8.0. Ele resolveu todos os meus problemas magicamente e eu nem preciso da solução alternativa com config.gpu_options.allow_growth = True agora.

Parece que o problema foi percebido e resolvido no tensorflow 2.3.0.

  • CUDA 10.1
  • GPU: Quadro RTX 6000
  • Tensorflow 2.2.0
  • cudnn 7.6.5

Mesmo 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.

E a solução alternativa allow_growth = True não ajuda.

Depois de atualizar o tensorflow para 2.3.0, o problema desapareceu, mesmo sem adicionar a linha allow_growth = True .

ok, fiz funcionar no tf-nightly-gpu-2.0-preview e notebook ipython adicionando isso ao meu código:

de tensorflow.compat.v1 import ConfigProto
de tensorflow.compat.v1 import InteractiveSession

config = ConfigProto ()
config.gpu_options.allow_growth = True
sessão = InteractiveSession (config = config)

funciona no meu caso

Esta página foi útil?
0 / 5 - 0 avaliações