Tensorflow: 无法创建cudnn句柄:CUDNN_STATUS_INTERNAL_ERROR

创建于 2018-12-21  ·  181评论  ·  资料来源: tensorflow/tensorflow

请确保这是一个错误。 标记:bug_template

系统信息

  • 我是否编写了自定义代码(与使用TensorFlow中提供的股票示例脚本相对):是和否(如下所述)
  • 操作系统平台和发行版(例如Linux Ubuntu 16.04):Manjaro
  • 如果问题发生在行动装置上,则行动装置(例如iPhone 8,Pixel 2,三星Galaxy):
  • 从(源或二进制)安装的TensorFlow:tf-nightly-gpu(Dec 19,r1.13)
  • TensorFlow版本(使用下面的命令):1.13.0-dev20181219
  • python版本:3.7.1
  • Bazel版本(如果从源代码编译):
  • GCC /编译器版本(如果从源代码编译):
  • CUDA / cuDNN版本:带有cuDNN 7.4.1的CUDA 10
  • GPU型号和内存:RTX 2070 8GB

描述当前行为
我正在MNIST上运行CNN模型。 当我使用GPU运行时,我遇到了
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

我进行了一些挖掘,发现这是一个内存问题(因为我有32GB的RAM和64GB的交换空间,所以不应该这样。运行模型时运行了htop,并且有20 + GB的可用空间,这远远超过了足以适合8GB vRAM映射。

使用gpu_options.allow_growth = True可以使模型正常工作,而设置os.environ['CUDA_VISIBLE_DEVICES'] = '-1'也可以。 这意味着我面临内存问题,但是我不知道如何解决。

此外,尝试运行tensorflow / models / official / mnist / model时,使用gpu_options.allow_growth = True不能解决相同的问题,该行为与我的代码应该具有相似的行为。

重现问题的代码

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

最有用的评论

我确实尝试从源代码进行编译,但是遇到了同样的问题。 我终于能够解决我的问题,设置config.gpu_options.allow_growth = True

所有181条评论

我一直在使用相同的GPU遇到相同的问题:“ CUDNN_STATUS_INTERNAL_ERROR”。

RTX 2070 GPU
CUDA 10
cuDNN 7.4.2
Ubuntu 18.04
TF-nightly-gpu(r1.13,1月13日)
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.

我遇到了同样的问题

RTX2080 GPU
CUDA 10
库顿7.4.2

我尝试了以下tf版本tf-nightly-gpu和来自master(060b6e32ad)的自编译版本。
我发现可以设置以下环境变量来获取更多的调试信息。

CUDNN_LOGINFO_DBG = 1;
CUDNN_LOGDEST_DBG = stdout

然后我得到以下错误:

I0117 14:11:24.441819 140433563125568 basic_session_run_hooks.py:594]将0的检查点保存到/tmp/mnist/model.ckpt中。
2019-01-17 14:11:25.916269:我tensorflow / stream_executor / platform / default / dso_loader.cc:154]在本地成功打开了CUDA库libcublas.so.10.0

一世! CuDNN(v7402)函数cudnnCreate()称为:
一世! 时间:2019-01-17T14:11:26.079184(自启动以来0d + 0h + 0m + 0s)
一世! 处理= 29255; 线程= 29356; GPU = NULL; Handle = NULL; StreamId = NULL。

2019-01-17 14:11:26.079151:我tensorflow / stream_executor / platform / default / dso_loader.cc:154]在本地成功打开了CUDA库libcudnn.so.7

一世! CuDNN(v7402)函数cudnnCreate()称为:
一世! 时间:2019-01-17T14:11:26.571897(自启动以来0d + 0h + 0m + 0s)
一世! 处理= 29255; 线程= 29356; GPU = NULL; Handle = NULL; StreamId = NULL。

2019-01-17 14:11:26.571858:E tensorflow / stream_executor / cuda / cuda_dnn.cc:493]无法创建cudnn句柄:CUDNN_STATUS_INTERNAL_ERROR
2019-01-17 14:11:26.579375:E tensorflow / stream_executor / cuda / cuda_dnn.cc:493]无法创建cudnn句柄:CUDNN_STATUS_INTERNAL_ERROR

一世! CuDNN(v7402)函数cudnnCreate()称为:
一世! 时间:2019-01-17T14:11:26.579803(自启动以来0d + 0h + 0m + 0s)
一世! 处理= 29255; 线程= 29356; GPU = NULL; Handle = NULL; StreamId = NULL。

2019-01-17 14:11:26.585818:E tensorflow / stream_executor / cuda / cuda_dnn.cc:493]无法创建cudnn句柄:CUDNN_STATUS_INTERNAL_ERROR
2019-01-17 14:11:26.585850:W ./tensorflow/stream_executor/stream.h:2109]尝试使用不支持DNN的StreamExecutor执行DNN操作
追溯(最近一次通话):
_do_call中的文件“ /usr/local/lib/python3.6/dist-packages/tensorflow/python/client/session.py”,行1335
返回fn(* args)
_run_fn中的文件“ /usr/local/lib/python3.6/dist-packages/tensorflow/python/client/session.py”,行1320
选项,feed_dict,fetch_list,target_list,run_metadata)
_call_tf_sessionrun中的文件“ /usr/local/lib/python3.6/dist-packages/tensorflow/python/client/session.py”,行1408
run_metadata)
tensorflow.python.framework.errors_impl.UnknownError:无法获取卷积算法。 这可能是因为cuDNN无法初始化,所以请尝试查看上面是否打印了警告日志消息。
[[{{node Discriminator_1 / Conv / Conv2D}}]]
[[train / discriminator_train / train_op / control_dependency / _569]]

在处理上述异常期间,发生了另一个异常:

追溯(最近一次通话):
在第151行的“ /home/dj/projects/gan/tf_models/research/gan/mnist/train.py”文件中
tf.app.run()
运行中的文件“ /usr/local/lib/python3.6/dist-packages/tensorflow/python/platform/app.py”,第125行
_sys.exit(main(argv))
主目录中的文件“ /home/dj/projects/gan/tf_models/research/gan/mnist/train.py”,第147行
get_hooks_fn = tfgan.get_joint_train_hooks())
gan_train中的第1200行的文件“ /usr/local/lib/python3.6/dist-packages/tensorflow/contrib/gan/python/train.py”
config = config)
火车上的文件“ /usr/local/lib/python3.6/dist-packages/tensorflow/contrib/training/python/training/training.py”,第546行
损失= session.run(train_op,run_metadata = run_metadata)
运行中的文件“ /usr/local/lib/python3.6/dist-packages/tensorflow/python/training/monitored_session.py”,第693行
run_metadata = run_metadata)
运行中的文件“ /usr/local/lib/python3.6/dist-packages/tensorflow/python/training/monitored_session.py”,行1188
run_metadata = run_metadata)
运行中的文件“ /usr/local/lib/python3.6/dist-packages/tensorflow/python/training/monitored_session.py”,行1287
加薪六.reraise( original_exc_info)重新增加文件“ /usr/local/lib/python3.6/dist-packages/six.py”的第693行提高价值运行中的文件“ /usr/local/lib/python3.6/dist-packages/tensorflow/python/training/monitored_session.py”,行1272返回self._sess.run( args,** kwargs)
运行中的文件“ /usr/local/lib/python3.6/dist-packages/tensorflow/python/training/monitored_session.py”,行1336
feed_dict,选项)
_call_hook_before_run中的文件“ /usr/local/lib/python3.6/dist-packages/tensorflow/python/training/monitored_session.py”,行1362
request = hook.before_run(run_context)
文件“ /usr/local/lib/python3.6/dist-packages/tensorflow/contrib/gan/python/train.py”,行1061,位于before_run中
run_context.session.run(self._train_ops)
运行中的文件“ /usr/local/lib/python3.6/dist-packages/tensorflow/python/client/session.py”,第930行
run_metadata_ptr)
_run中的文件“ /usr/local/lib/python3.6/dist-packages/tensorflow/python/client/session.py”,行1153
feed_dict_tensor,选项,run_metadata)
_do_run中的文件“ /usr/local/lib/python3.6/dist-packages/tensorflow/python/client/session.py”,行1329
run_metadata)
_do_call中的文件“ /usr/local/lib/python3.6/dist-packages/tensorflow/python/client/session.py”,行1349
提高类型(e)(node_def,op,消息)
tensorflow.python.framework.errors_impl.UnknownError:无法获取卷积算法。 这可能是因为cuDNN无法初始化,所以请尝试查看上面是否打印了警告日志消息。
[[节点Discriminator_1 / Conv / Conv2D(在home / dj / projects / gan / tf_models / research / gan / mnist / networks.py:152中定义)]]
[[train / discriminator_train / train_op / control_dependency / _569]]

错误可能源于输入操作。
连接到节点Discriminator_1 / Conv / Conv2D的输入源操作:
输入/批处理/ n(在home / dj / projects / gan / tf_models / research / gan / mnist / data_provider.py:67定义)

'Discriminator_1 / Conv / Conv2D'的原始堆栈跟踪:
在第151行的“ home / dj / projects / gan / tf_models / research / gan / mnist / train.py”文件中
tf.app.run()
运行中的文件“ usr / local / lib / python3.6 / dist-packages / tensorflow / python / platform / app.py”,第125行
_sys.exit(main(argv))
主目录中的文件“ home / dj / projects / gan / tf_models / research / gan / mnist / train.py”,第87行
[FLAGS.batch_size,FLAGS.noise_dims]))
gan_model中的文件“ usr / local / lib / python3.6 / dist-packages / tensorflow / contrib / gan / python / train.py”,第118行
discriminator_real_outputs = discriminator_fn(real_data,generator_inputs)
文件“ home / dj / projects / gan / tf_models / research / gan / mnist / networks.py”,第176行,位于无条件标识符中
净= _discriminator_helper(img,False,None,weight_decay)
_discriminator_helper中的第152行的文件“ home / dj / projects / gan / tf_models / research / gan / mnist / networks.py”
净= layers.conv2d(img,64,[4,4],步幅= 2)
在func_with_args中的文件182行中的文件“ usr / local / lib / python3.6 / dist-packages / tensorflow / contrib / framework / python / ops / arg_scope.py”
返回func( args,* current_args)
在卷积2d中的文件“ usr / local / lib / python3.6 / dist-packages / tensorflow / contrib / layers / python / layers / layers.py”,行1155
conv_dims = 2)
在func_with_args中的文件182行中的文件“ usr / local / lib / python3.6 / dist-packages / tensorflow / contrib / framework / python / ops / arg_scope.py”
返回func( args,* current_args)
卷起文件“ usr / local / lib / python3.6 / dist-packages / tensorflow / contrib / layers / python / layers / layers.py”,行1058
输出= layer.apply(输入)
在应用中,文件“ usr / local / lib / python3.6 / dist-packages / tensorflow / python / keras / engine / base_layer.py”,第1228行
返回self .__ call __(inputs, args,* kwargs)
__call__中的第531行的文件“ usr / local / lib / python3.6 / dist-packages / tensorflow / python / layers / base.py”
输出=超级(层,自身).__调用__(输入,参数,* kwargs)
__call__中的第564行的文件“ usr / local / lib / python3.6 / dist-packages / tensorflow / python / keras / engine / base_layer.py”
输出= self.call(输入,参数,* kwargs)
呼叫中的文件“ usr / local / lib / python3.6 / dist-packages / tensorflow / python / keras / layers / convolutional.py”,第196行
输出= self._convolution_op(输入,self.kernel)
__call__中的第966行的文件“ usr / local / lib / python3.6 / dist-packages / tensorflow / python / ops / nn_ops.py”,第966行
返回self.conv_op(inp,filter)
__call__中的第591行的文件“ usr / local / lib / python3.6 / dist-packages / tensorflow / python / ops / nn_ops.py”
返回self.call(inp,filter)
__call__中的第208行的文件“ usr / local / lib / python3.6 / dist-packages / tensorflow / python / ops / nn_ops.py”
名称= self.name)
在conv2d中的文件“ usr / local / lib / python3.6 / dist-packages / tensorflow / python / ops / nn_ops.py”,第1578行
名称=名称)
在conv2d中的文件“ usr / local / lib / python3.6 / dist-packages / tensorflow / python / ops / gen_nn_ops.py”,第1040行
data_format = data_format,dilations = dilations,name = name)
_apply_op_helper中的第788行的文件“ usr / local / lib / python3.6 / dist-packages / tensorflow / python / framework / op_def_library.py”
op_def = op_def)
在new_func中的第501行,文件“ usr / local / lib / python3.6 / dist-packages / tensorflow / python / util / deprecation.py”
return func( args,* kwargs)
在create_op中的第3300行中,文件“ usr / local / lib / python3.6 / dist-packages / tensorflow / python / framework / ops.py”
op_def = op_def)
__init__中的文件“ usr / local / lib / python3.6 / dist-packages / tensorflow / python / framework / ops.py”,行1801
self._traceback = tf_stack.extract_stack()

有任何想法吗? 我只是在重新安装完整的环境之前:-(

尝试从源代码编译r1.13。 这将花费很长时间,但可以解决您的问题。 至少它解决了我的问题。

我确实尝试从源代码进行编译,但是遇到了同样的问题。 我终于能够解决我的问题,设置config.gpu_options.allow_growth = True

我遇到了同样的问题(在RTX 2060,Ubuntu 18.04,Python 3.6.7,CUDA 10.0.130,cuDNN 7.4.2,Tensorflow 1.13.0-rc0上)。 感谢@ va-andrew的建议,我可以将其与allow_growth选项集一起使用。

FWIW,在寻找解决方案的过程中,似乎这个问题是RTX系列的一个普遍问题(尽管对于CUDA 10.0可能是一个普遍的问题,因为新卡不支持较早的版本)。 如果可以在1.13版本中更新默认值,则不必为这些卡设置特殊选项,那就太好了。

请说一下,我在以下配置下也遇到了这种情况:

具有所有版本的稳定版本的Tensorflow Docker GPU容器也不起作用(它们直接出现段错误而不是报告CUDNN_STATUS_INTERNAL_ERROR)。

奇怪的是,在带有Tensorflow v1.12的Windows 10上一切正常。

并有其他人报告,设置allow_growth可使事情正常运行。

这里同样的问题。

  • RTX 2070
  • Ubuntu 18.04
  • CudNN 7.4.2(但我尝试过使用其他较旧的版本进行编译,但是没有运气)
  • Tensorflow 1.13.0-dev20190125(也尝试过使用Cuda 10编译的Tensorflow 1.12)

正如其他人所报道的那样,设置allow_growth = TRUE允许事情运行。

自解决以来,解决此问题。 谢谢!

@ymodak您能否参考修复此错误的PR?

我在RTX 2080上有一个与tf-nightly-gpu-2.0-preview类似的问题

与RTX2080相同的问题,花了两天时间重新编译并寻找错误,直到我找到此修复程序。
(allow_growth = true固定了它)

你让我今天一整天都感觉很好

您实际上如何设置allow_growth = true? 我有tf-nightly-gpu-2.0-preview并尝试过:

将tensorflow作为tf导入
config = tf.ConfigProto()
config.gpu_options.allow_growth =真
会话= tf.Session(config = config,...)

但是得到这个错误:

AttributeError Traceback(最近一次通话)
()
1导入张量流作为tf
----> 2 config = tf.ConfigProto()

AttributeError:模块“ tensorflow”没有属性“ ConfigProto”

如何在Tensorflow 2.0中设置allow_growth?

好的,使其在tf-nightly-gpu-2.0-preview和ipython笔记本中工作,并将其添加到我的代码中:

从tensorflow.compat.v1导入ConfigProto
从tensorflow.compat.v1导入InteractiveSession

config = ConfigProto()
config.gpu_options.allow_growth =真
会话= InteractiveSession(config = config)

相同的问题,gpu_options.allow_growth = True,已解决问题。

@newhouseb您如何/在哪里将所有基准设置为true? 这是一个容易的改变吗?

一揽子增长是解决方案吗?

默认情况下它是关闭的,原因如下
https://www.tensorflow.org/guide/using_gpu#allowing_gpu_memory_growth

在我的程序中,内存管理很重要

我想限制TF使用的GPU数量,因为在我的图形应用程序中,GPU内存将用于其他用途,并且将其放入有限的空间对于防止内存不足错误很重要。

我在Windows下使用C ++工作

添加允许增长选项会导致OOM错误。

如果没有这一行代码,该模型可以在具有相同卡的同一台机器上正常运行。

有OOM错误

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

没有OOM错误

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

因此,使用set来解决此问题会导致段错误。

@ymodak此错误未修复。 可以说,使用任何类型的convnet都可以在默认配置下工作。 默认情况下,allow_growth应该为true,应该对其进行修复以使其正常工作,或者应该有比CUDNN_STATUS_INTERNAL_ERROR更好的错误。

@ymodak看来此问题已过早关闭。 尽管有解决此问题的方法,但它涉及更改应用程序代码。 结果,示例代码在RTX卡上“开箱即用”不起作用,并且在线上的大多数配方也需要修改。

@samhodge不能按照您自己发布的tensorflow文档页面上的建议使用config.gpu_options.per_process_gpu_memory_fraction = 0.4来防止OOM吗?

我对这个布尔型黑客感到困惑,无法在我的RTX 2080上启用tensorflow-gpu:如果我一次只将我的GPU用于一个tensorflow脚本/ jupyter笔记本,这个allow_growth = True是一个问题吗? (除了屏幕的标准GPU使用率等)

我打算在计算机上设置一个静态ML堆栈,并想知道它是否最终会变成一团糟(大型gridsearch,具有大量参数的模型等)。 我还没有弄清楚我是否确实需要从源代码构建,以尝试避免此内部错误或只是更改此布尔值。

好的,我认为在创建会话之前我发现了问题的根源,我免费测量了GPU RAM,因此,如果我使用8Gb卡,而6Gb是空闲的,则使用0.75的一部分,偶尔以OOM结尾,但是最近我有我一直在尝试0.95 * 0.75,但我还没有OOM。 因此,如果您将Tensorflow的分配空间推到极限,则有时会发生冲突。 显然,如果您对单个Op的输入和输出不适合,它将是OOM,但我对此进行了衡量,根据适合的程度,将使用GPU或CPU。

@samhodge很棒,因此最后,如果没有并行启动主要的GPU操作并且一次通过tensorflow处理(批处理大小至关重要),则allow_growth布尔黑客确实提供了解决方案溢出了GPU提供的内存...?

一切都使用GPU,甚至您的浏览器

在GTX 1050上使用来自ip的tensorflow-gpu 1.13.1和CUDA 10.0 / cuDNN 7.4.2.24/Nvidia驱动程序410 / Ubuntu 16.04遇到了相同的问题。

此处仍然存在相同的问题,但“ config.gpu_options.allow_growth = True”不能解决问题。 发生在TF-gpu 1.14.1和TF-gpu 2.0上。 RTX1070,CUDA 10.0,Ubuntu 18.04,Nvidia驱动程序430.09。

您所遇到的问题的描述使我相信cuDNN(的特定版本)在创建句柄时会尝试分配GPU内存。 如果TensorFlow已经占用了所有内存(因为config.gpu_options.allow_growth = false,或者per_process_gpu_memory_fraction接近1.0),则没有剩余的内存可分配给cuDNN。

您可以通过nvprof运行TensorFlow并生成API跟踪以检查失败的cuMemAlloc调用来确认这一点。

问题#6698似乎在讨论相同的问题。 有些人注意到他们不小心使用了与CUDA版本不匹配的cuDNN版本。 当与CUDA 10一起运行时,能否请验证您是否正在将cuDNN用于CUDA 10?

原来我没有正确安装cuDNN,因为我是个傻瓜。 进入,每晚重新安装TF2,添加了允许增长的线路,一切都很好。

如何从Conda删除cudatoolkit和cudnn?

由于包含Anaconda的(或嵌入式)cudnn出现以下错误,因此我想从Nvidia网站上删除conda安装的cudatoolkit和cudnn,并安装独立的CUDA和cudnn。

错误:无法获取卷积算法。 这可能是因为cuDNN无法初始化,所以请尝试查看上面是否打印了警告日志消息。

但是,尽管我按如下方式使用命令但无法删除它们,但无法删除它们。
康达删除--name cuda --all
康达删除--name cudnn --all

我在路径中看到两个文件,包括cudatoolkit-10.0.130-0和cudnn-7.3.1-cuda10.0.0_0
如下。

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

我如何删除(或删除)Anaconda中包含(或嵌入)的cuda和cudnn。

提前致谢,

麦克风

@ mikechen66 conda的输出是什么? 可能是因为其他软件包依赖cuda和cudnn。 您为什么首先要删除它们? 如果要获得自定义环境,请使用miniconda而不是anaconda。 Miniconda仅随附conda,您需要手动安装所有需要的软件包。

tydlwav:

感谢您的反馈意见。 在检查了核心库的版本兼容性和发布日期之后,我安装了相关的dev环境,运行简单的MNIST测试代码,并获得了以下输出。

我认为Anaconda3甚至不能支持cudnn和TensorFlow的核心库。 因此,Anaconda3是一个大问题。 因此,我想从Anaconda中删除轻量级的cudnn库,并使用独立而强大的Nvidia cuda和cudnn库来运行测试代码。 请帮助给出一些建议。

  1. 安装环境

英伟达GeForce RTX 2060
图形驱动程序:NVIDIA-Linux-x86_64-415.27(2019年1月15日)
支持RTX 2060的第一个版本
Anaconda3:Anaconda3-2019.03-Linux-x86_64.sh(2019.04-04)
-cudatoolkit-10.0.130-0
-cudnn-7.3.1-cuda10.0.0_0
-TensorFlow 13.1
-Juputer笔记本和ipykernel
-由Ananconda3默认

  1. MNIST测试代码:

进口喀拉拉邦
从keras.datasets导入mnist
从keras.models导入顺序
从keras.layers导入Dense,Dropout
从keras.layers导入Flatten,MaxPooling2D,Conv2D
从keras.callbacks导入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)

模型= Sequential()
model.add(Conv2D(32,kernel_size =(3,3),激活='relu',input_shape =(28,28,1))))
model.add(Conv2D(64,kernel_size =(3,3),激活='relu'))
model.add(MaxPooling2D(pool_size = {2,2)))
model.add(降落(0.25))
model.add(Flatten())
model.add(密集(128,激活='relu'))
model.add(Dropout(0.5))
model.add(密集(n_classes,激活='softmax'))

model.compile(loss ='categorical_crossentropy',优化程序='adam',指标= ['准确性'])

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

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

  1. 输出:

使用TensorFlow后端

警告:tensorflow :来自/home/mike/anaconda3/envs/tf-gpu/lib/python3.7/site-packages/tensorflow/python/framework/op_def_library.py:263:colocate_with(来自tensorflow.python.framework.ops )已弃用,并将在以后的版本中删除。
更新说明:
托管由托管服务器自动处理。
警告:tensorflow :从/home/mike/anaconda3/envs/tf-gpu/lib/python3.7/site-packages/keras/backend/tensorflow_backend.py:3445:调用dropout(来自tensorflow.python.ops.nn_ops)不推荐使用keep_prob,它将在以后的版本中删除。
更新说明:
请使用rate代替keep_prob 。 费率应设置为rate = 1 - keep_prob
警告:tensorflow :从/home/mike/anaconda3/envs/tf-gpu/lib/python3.7/site-packages/tensorflow/python/ops/math_ops.py:3066:to_int32(来自tensorflow.python.ops.math_ops )已弃用,并将在以后的版本中删除。
更新说明:
请改用tf.cast。
训练60000个样本,验证10000个样本
时代1/15

UnknownError Traceback(最近一次通话)

34
35 model.fit(X_train,y_train,batch_size = 128,epochs = 15,verbose = 1,
---> 36validation_data =(X_test,y_test),回调= [tensor_board])

〜/ anaconda3 / envs / tf-gpu / lib / python3.7 / site-packages / keras / engine / training.py适合class_weight,sample_weight,initial_epoch,steps_per_epoch,validation_steps,** kwargs)
1037 initial_epoch = initial_epoch,
1038 steps_per_epoch = steps_per_epoch,
-> 1039验证步骤=验证步骤)
1040
1041 def评估(self,x = None,y = None,

〜/ anaconda3 / envs / tf-gpu / lib / python3.7 / site-packages / keras / engine / training_arrays.py in fit_loop(model,f,ins,out_labels,batch_size,epoch,详细,回调,val_f,val_ins,随机播放,callback_metrics,initial_epoch,steps_per_epoch,validation_steps)
197 ins_batch [i] = ins_batch [i] .toarray()
198
-> 199出= f(ins_batch)
200次= to_list(outs)
201 for l,o in zip(out_labels,outs):

〜/ anaconda3 / envs / tf-gpu / lib / python3.7 / site-packages / keras / backend / tensorflow_backend.py在__call__中(自己,输入)
2713返回self._legacy_call(输入)
2714
-> 2715返回self._call(输入)
2716其他:
2717 if py_any(is_tensor(x)for x in input):

_call中的〜/ anaconda3 / envs / tf-gpu / lib / python3.7 / site-packages / keras / backend / tensorflow_backend.py(自己,输入)
第2673章真相大白(二更)2674其他:->提取2675 = self._callable_fn( array_vals)
2676返回已提取[:len(self.outputs)]
2677

〜/ anaconda3 / envs / tf-gpu / lib / python3.7 / site-packages / tensorflow / python / client / session.py在__call__中(self, args,* kwargs)
第1437章真相大白
1438 self._session._session,self._handle,args,status,
-> 1439 run_metadata_ptr)
1440如果run_metadata:
第1441章

〜/ anaconda3 / envs / tf-gpu / lib / python3.7 / site-packages / tensorflow / python / framework / errors_impl.py在__exit__中(自身,type_arg,value_arg,traceback_arg)
526无,无,
(527)第527章
-> 528 c_api.TF_GetCode(self.status.status))
529#从内存中删除基础状态对象,否则它保持活动状态
530#因为回溯中引用了此状态

UnknownError:无法获得卷积算法。 这可能是因为cuDNN无法初始化,所以请尝试查看上面是否打印了警告日志消息。
[[{{node conv2d_1 / convolution}}]]
[[{{nodemetrics / acc / Mean}}]]

tydlwav:

我使用以下命令来卸载cuda和cudnn。 但是,即使它们现在都无法使用,这两个库仍位于Anaconda3中。 我猜想Anaconda3打算保护核心库不被删除。 甚至认为它有bug,这可能是Continuum的核心功能。 我将尝试使用Independent Nvdia cuda(不包括nvcc)和cudnn,或者使用安装的conda查找新的cuda或cudnn。

卸载命令:

conda卸载cudatoolkit

收集包元数据:完成
解决环境:已完成

包装方案

环境位置:/ home / mike / anaconda3 / envs / tf-gpu

删除的规格:
-cudatoolkit

以下软件包将被删除:

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

是否继续([y] / n)? ÿ

准备交易:完成
验证交易:已完成
执行交易:完成

笔记:

卸载它们后,Jupyter Notebook显示“没有名称为“ tensorflow”的混叠。”这意味着取消插入成功。但是,在Anaconda3中仍可以找到cudatoolkit和cudnn。他们不起作用。

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

您已经删除了它们。 pkgs中的文件用于安装。 这些是下载的用于安装的缓存。 另外,这里不是讨论conda环境问题的地方。 与这个问题无关。 您可能要尝试堆栈溢出。

我对此问题的状态有些困惑。 我正在使用RTX 2080,cuda 10.1,cudnn v7.5.1.10和tensorflow 1.14。

使用允许增长的方法来解决问题,但是也许我有不同的版本不匹配?

在Tensorflow 1.14中会对此进行修复吗?

谢谢

谢谢。 我看到了RTX 20XX Turing系列,TensorFlow和Anaconda之间的兼容性问题。 显而易见,RTX 20XX系列支持cudnn 7.5.0,TensorFlow仅支持cudnn 7.4,但是Anaconda包含简化的7.3.1,这在这三个供应商之间完全不匹配。 此外,RTX 20XX系列还存在与Ubuntu 16.04 LTS的较大兼容性问题。 有时,Ubuntu 16.04崩溃了。 我不得不带来两个可启动的USB记忆棒来重新安装操作系统。 因此,我将两台PC升级到Ubuntu 18.04 LTS并安装了Miniconda。 然后,我将尝试更高版本的Tensorflow。

笔记:

英伟达为其Jetson TX1 / TX2和Jetson Nano移动GPU平台提供了自己的自定义Ubuntu 18.04 LTS。 Nvidia似乎决定采用与Ubuntu 18.04 LTS兼容的RTX 20XX系列等新产品,而不是与较低版本的Ubuntu 16.04兼容。 但是,我不知道Continuum是否有针对Nvidia RTX 20XX Turing系列的升级计划。

截至目前,RTX系列已得到很好的支持。 我已经在非Ubuntu发行版的conda环境中将tf与RTX 2070一起使用了。 这应该是最坏的情况,并且仍然可以正常工作。 Cuda和cudnn是向后兼容的,如果您使用较新的版本,则不会有问题。 您只需使用conda create -n tf python==3.6.8创建一个新的Python 3.6环境并运行conda install tensorflow-gpu

我从源代码编译来的很棒,并且让客户端在大多数硬件上都可以使用Tensorflow 1.12.0 CUDA 10.0和CUDNN 7.4.2.24,但是我遇到了一些带有RTX卡且在CNN上带有CNN的客户端的问题。 我可能不小心为CUDA 9.0打包了错误的CUDNN,这些文件的名称相同。

任何人都可以确认这些版本可在RTX2080和其他基于Turing的卡上使用吗?

tydlwav:

我根据您的建议安装了Miniconda以及相关的python和tensorflow环境。 它仍然存在错误:无法获得卷积算法。 这可能是因为cuDNN无法初始化.......
请帮助找到解决方案。

请查看我操作的步骤。

  1. 根据您的指南安装python 3.6.8。
    康达创建-n tf python == 3.6.8

  2. 激活TF
    康达激活TF

  3. 根据您的指南在TF环境中安装tensorflow-gpu。
    康达安装tensorflow-gpu

已安装的软件包包括cudatoolkit和cudnn,如下所示。
................................................... ...................................................
cudatoolkit pkgs / main / linux-64 :: cudatoolkit-10.0.130-0
cudnn pkgs / main / linux-64 :: cudnn-7.3.1-cuda10.0_0
................................................... ...................................................

  1. 安装jupyter笔记本,ipykernel和相关环境的网页。

1)。 安装jupyter笔记本
康达安装jupyter笔记本

2)。 基于jupyter笔记本安装ipykernel
康达安装ipykernel jupyter

3)。 在jupyter Notebook的网页中创建TensorFlow-GPU
python -m ipykernel install --user --name tf-gpu --display-name“ TensorFlow-GPU”

  1. 打开Jupyter笔记本
    1)。 命令进入jupyter笔记本网页
    jupyter笔记本

2)。 点击TensorFlow-GPU
在菜单中单击“新建”并在网页中选择“ TensorFlow-GPU”时,该单元格将显示在jupyter笔记本的网页中。 该网页列出如下。
http:// localhost :8888 / notebooks / Untitled3.ipynb?kernel_name = tf-gpu

  1. 粘贴运行简单的MNIST测试代码

进口喀拉拉邦
从keras.datasets导入mnist
从keras.models导入顺序
从keras.layers导入Dense,Dropout
从keras.layers导入Flatten,MaxPooling2D,Conv2D
从keras.callbacks导入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)

模型= Sequential()
model.add(Conv2D(32,kernel_size =(3,3),激活='relu',input_shape =(28,28,1))))
model.add(Conv2D(64,kernel_size =(3,3),激活='relu'))
model.add(MaxPooling2D(pool_size = {2,2)))
model.add(降落(0.25))
model.add(Flatten())
model.add(密集(128,激活='relu'))
model.add(Dropout(0.5))
model.add(密集(n_classes,激活='softmax'))

model.compile(loss ='categorical_crossentropy',优化程序='adam',指标= ['准确性'])

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

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

  1. 错误与最后提到的消息相同:

UnknownError:无法获得卷积算法。 这可能是因为cuDNN无法初始化,所以请尝试查看上面是否打印了警告日志消息。
[[{{node conv2d_1 / convolution}}]]
[[{{nodemetrics / acc / Mean}}]]

谢谢,

麦克风

嗨tydlwav:

顺便说一句,我还使用以下命令安装了keras。
康达安装keras-gpu

由于安装正确,因此出现了错误。 因此,我认为这是Miniconda和RTX20XX Turing系列之间的版本兼容性问题。 该错误与Anaconda相同。 我知道Miniconda和Anaconda中的cudnn和cuda版本是相同的。

那很有趣。 大约一个半月前,我让cuda 10和cudnn7.3与conda一起工作。 从那时起我就没有使用过tensorflow。 如果对您不起作用,则可以从源代码构建。 那总是对我有用。 如果您只是开始,我建议您使用pytorch。 您将可以轻松得多的时间来安装和使它们正常工作。

tydlwav:

我将尝试其他方法,例如pytorch。 现在Google已发布tensorflow-gpu 1.14,我可以使用Miniconda如下在Google Tensorflow网站上安装独立的tensorflow-gpu 1.14了。

谷歌张量流: https ://www.tensorflow.org/install/source

笔记:

Conda仅具有从1.0.1到1.13.1的tensorflow-gpu构建,如下所示。 这些版本太旧了,以至于无法赶上官方的Google TensorFlow和官方的Nvidia GeForce RTX 20XX(2060〜2080)Truing系列。

命令:
康达搜索tensorflow-gpu

载入频道:完成

名称版本建设渠道
tensorflow-gpu 1.0.1 py27_4 pkgs /免费
tensorflow-gpu 1.0.1 py35_4 pkgs /免费
tensorflow-gpu 1.0.1 py36_4 pkgs /免费
tensorflow-gpu 1.1.0 np111py27_0 pkgs /免费
tensorflow-gpu 1.1.0 np111py35_0 pkgs /免费
tensorflow-gpu 1.1.0 np111py36_0 pkgs /免费
tensorflow-gpu 1.1.0 np112py27_0 pkgs /免费
tensorflow-gpu 1.1.0 np112py35_0 pkgs /免费
tensorflow-gpu 1.1.0 np112py36_0 pkgs /免费
tensorflow-gpu 1.2.1 py27cuda7.5cudnn5.1_0 pkgs /免费
tensorflow-gpu 1.2.1 py27cuda7.5cudnn6.0_0 pkgs /免费
tensorflow-gpu 1.2.1 py27cuda8.0cudnn5.1_0 pkgs /免费
tensorflow-gpu 1.2.1 py27cuda8.0cudnn6.0_0 pkgs /免费
tensorflow-gpu 1.2.1 py35cuda7.5cudnn5.1_0 pkgs /免费
tensorflow-gpu 1.2.1 py35cuda7.5cudnn6.0_0 pkgs /免费
tensorflow-gpu 1.2.1 py35cuda8.0cudnn5.1_0 pkgs /免费
tensorflow-gpu 1.2.1 py35cuda8.0cudnn6.0_0 pkgs /免费
tensorflow-gpu 1.2.1 py36cuda7.5cudnn5.1_0 pkgs /免费
tensorflow-gpu 1.2.1 py36cuda7.5cudnn6.0_0 pkgs /免费
tensorflow-gpu 1.2.1 py36cuda8.0cudnn5.1_0 pkgs /免费
tensorflow-gpu 1.2.1 py36cuda8.0cudnn6.0_0 pkgs /免费
tensorflow-gpu 1.3.0 0 pkgs /免费
tensorflow-gpu 1.4.1 0 pkgs /主要
tensorflow-gpu 1.5.0 0 pkgs /主要
tensorflow-gpu 1.6.0 0 pkgs /主要
tensorflow-gpu 1.7.0 0 pkgs /主要
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

它们还不算老,因为我在conda的tf 1.12版本中使用了RTX2070。新硬件通常是向后兼容的,而RTX也不例外。 很可能有一些奇怪的环境问题在起作用。 直到七月份,我才可以使用RTX机器,所以我现在无法进行测试。 从源代码构建应该可以解决您的问题。 我从未失败过从源代码构建的tf运行convnets(假设您在构建过程中具有正确的配置)。

再一次,这里不是讨论张量流分布问题的正确地方。 您可以在堆栈溢出或reddit上发表文章并在此处链接。 更多的人将能够看到它并通过这种方式为您提供帮助。

您的问题不是错误,而且绝对不是此问题正在讨论的内容。

@chsigg您正在诊断这是w / CUDNN尝试分配tensorflow已分配的GPU内存资源的问题,对我来说似乎是正确的。 只需设置per_process_gpu_memory_fraction=0.9而不是0.95就可以解决我的问题。

我也面临这个问题。 通过将cuDNN更新到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

此外,Conda安装了tensorflow和CuDNN。
conda list cudnn

cudnn                     7.3.1                cuda10.0_0    anaconda

我所做的事情:

  1. 卸载的conda tensorflow。
    conda remove tensorflow
  2. 卸载conda cuDNN
    conda remove cudnn
  3. 用pip安装tensorflow
    pip install tensorflow
  4. https://developer.nvidia.com/cudnn下载相应的cuDNN 7.6运行时deb文件
  5. sudo dpkg -i libcudnn_xxxxx_amd64.deb

@nluehr有何评论? 我们可以让MinSystemMemory() cuda / cudnn版本知道吗?

如果使用tf.keras,那么这是合法的内存错误,然后在文件顶部执行以下操作
config = tf.ConfigProto()
config.gpu_options.allow_growth =真
tf.keras.backend.set_session(tf.Session(config = config))

我也遇到了这个问题,并且能够通过使用@ va-andrew的解决方案来解决它,特别是,我使用@colinsteidtmann的实现,因为我在代码中使用了一些tensorflow.keras函数。 我花了很长时间尝试调试此问题,因此谢谢你们的贡献。

编辑:我只是在看tensorflow文档(https://www.tensorflow.org/guide/using_gpu),您还可以通过将环境变量TF_FORCE_GPU_ALLOW_GROWTH设置为true来告诉它允许内存增长。 它还表示此配置是特定于平台的,因此YMMV(适用于Ubuntu 18.04)。

供参考,我正在运行:
Ubuntu 18.04.2 LTS,技嘉GeForce RTX 2080 Turbo,NVIDIA驱动程序430.26,CUDA 10.0.130,cuDNN 7.4.2.24,tensorflow-gpu 1.13.1,python 3.6。 我使用spyder 3.3.4在虚拟环境中运行tensorflow。

我有一台具有完全相同硬件的第二台计算机,我按照相同的指令集进行设置,使用相同的文件进行安装,并且在该计算机上也遇到了此问题。 毫不奇怪。

我有一台具有完全相同硬件的第三台计算机,只是它具有2080 Ti而不是2080 Ti,并且我按照相同的说明进行了设置,然后再次使用相同的文件进行安装。 但这一次没有问题。

因此,我被认为与CUDA,cuDNN和驱动程序版本的某些冲突无关。 这不是错误的安装等。而是与视频卡的型号有关;它与视频卡的型号有关。 我只看到过有关RTX 2060、2070和2080的问题。

幸运的是,使用变通办法并不是很大的麻烦。

我也面临这个问题。 通过将cuDNN更新到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

此外,Conda安装了tensorflow和CuDNN。
conda list cudnn

cudnn                     7.3.1                cuda10.0_0    anaconda

我所做的事情:

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更新后,确定要在GPU上运行,而不是在CPU上运行吗? 似乎您在进行更新之前就在使用GPU(由于引用cuDNN的错误消息),但是我不知道之后如何。 您使用“ pip install tensorflow”,但应该是“ pip install tensorflow-gpu”,不是吗? 另外,您说您正在使用CUDA 10,但您列出的cuDNN deb文件适用于cuda9.0,因此该方法不起作用。

因此,我认为您可能没有使用GPU,因此不能证明升级到cuDNN 7.6可以解决问题。

@ synapse8您对tensorflow-gpu和cuDNN版本绝对正确。 我现在也很困惑我的评论,而且我已经不记得详细了。 无论如何,下面给出的是我系统中的当前版本。

pip show tensorflow-gpu
名称:tensorflow-gpu
版本:1.13.1

nvidia-smi
NVIDIA-SMI 430.26驱动程序版本:430.26 CUDA版本:10.2

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

@ alexforever86使用您现在提到的配置,您仍然看到此问题吗? (我认为它对您有用)。 我最近安装了带有cuda10、410驱动程序,7.6 cudnn和TF-gpu 1.14(点安装)的系统,但没有看到此问题。

@ robzor92我一直在使用tensorflow-gpu 1.13,出于好奇,我刚刚安装了1.14来测试是否可以解决问题(对我来说)。 我仍然遇到错误,并且仍然必须执行“允许增长”的解决方法(再次,没什么大不了的)。

您正在使用什么视频卡?

@ synapse8与GTX 1070进行了尝试。

@ synapse8我现在也尝试了该线程创建者提供的示例代码,它可以正常工作。 但是,我不会声称这只是RTX线路的问题,因为我在TF 1.13.1的GTX 1050Ti上看到了相同的问题。 使用我之前发布的相同驱动程序/ cuda / cudnn组合。

@ robzor92我怀疑1050Ti的问题在于较小的VRAM。 RTX卡会在基本的CNN MNIST型号上遇到此问题。 我怀疑这是NVIDIA对RTX卡上VRAM分配的调整,以某种方式弄乱了事情。

我在tensorflow 1.14.0和RTX2080上有相同的错误。 但就我而言,仅当使用卷积层时才会发生此错误。

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.

我尝试了config.gpu_options.allow_growth = True ,但是它不能解决此错误。

我要有人帮我。

谢谢。

RTX 2070同样的问题

我对此进行了有趣的观察,这可能有助于跟踪该错误或找到可行的解决方案:
我还参考Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR得到了错误Failed to get convolution algorithm Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
系统:配备Nvidia Quadro P2000的笔记本电脑,Ubuntu 18.04,TF 1.13.1,cuda10,cudnn 7.4.2
如前所述,我可以使用allow_growth顺利运行​​该程序,因此,对我来说已经足够了。

有趣的是:仅在使用tf.layers.conv...时出现此错误,但切换到tf.keras.layers....允许程序在没有allow_growth情况下运行,因此keras代码中的某些内容似乎比在
我现在仍坚持使用tf.layers,因为它们通过可变范围提供了轻松的权重分配,可悲的是,keras不支持这些范围。

@ DavidS3141这很有趣。 就我而言,唯一的卷积层在tf.layers和tf.keras.layers中均不起作用...

当我使用pytorch时, torch.cuda.is_available是True并且可以使用卷积层而没有任何麻烦,因此我相信原因是tensorflow,但我不知道这是什么错误。

我同意@ Hayashi-Yudai:MXNet也是如此。 Tensorflow失败时,相同的配置可以正常工作。

环境:
RTX2080
Ubuntu 18.10
驱动程式430.26
CUDA 10.0(也是10.1,TF还不支持)
cuDNN 7.6.1
mxnet-cu100 1.4.1
张量流gpu 1.14.0

大家好,我在COCO数据集上使用来自ResNet50主干的预训练模型权重在CSV数据集上进行训练。 我收到此错误:未知:无法获得卷积算法。
-批量大小7-步骤9-纪元4
--snapshot-path快照--tensorboard-dir tensorboard
我尝试通过以下脚本在虚拟环境中的命令行中解决以下问题:csv数据集/train.csv数据集/classes.csv
蟒蛇

导入张量流

从tensorflow.compat.v1导入ConfigProto
从tensorflow.compat.v1导入InteractiveSession
config = ConfigProto()
config.gpu_options.allow_growth =真
会话= InteractiveSession(config = config)

以及
将tensorflow作为tf导入
config = tf.ConfigProto()
config.gpu_options.allow_growth =真
session = tf.Session(config = config),但是它没有解决我的错误:

我正在使用:-
Ubuntu 16.0
CUDA:10.0
Tensorflow 1.14.0

错误:
tensorflow.python.framework.errors_impl.UnknownError:找到2个根错误。 │| 找不到正在运行的进程|
(0)未知:无法获得卷积算法。 这可能是因为cuDNN无法初始化,所以请尝试查看是否有警告│+ ------------------------------- ---------------------------------------------- +
日志消息已打印在上方。 │
[[{{node conv1 / convolution}}]]│
[[loss / add / _2377]]│
(1)未知:无法获得卷积算法。 这可能是因为cuDNN无法初始化,所以请尝试查看是否有警告│
日志消息已打印在上方。 │
[[{{node conv1 / convolution}}]]│
0次成功操作。 │
忽略0个派生错误。 │
在没有活动异常的情况下终止调用│
中止(核心已弃用)
任何帮助,将不胜感激。

这里同样的问题。 Allow_growth解决方法有效。 否则,我会在最基本的MNIST张量流数据集上收到此错误。

RTX2060移动在这里。

从r2.0分支编译的tensorflow以及通过conda和conda(tensorflow-gpu)安装的TF 1.4出现问题。

@早矢悠

我尝试config.gpu_options.allow_growth = True,但是它不能解决此错误。

您添加到代码中的确切命令是什么? 如果不同,请尝试以下操作...

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

@ synapse8谢谢您的评论。 我尝试过,但是结果是一样的。

顺便说一句,我尝试了nvidia-docker并运行良好,但是python版本是3.5。
https://docs.nvidia.com/deeplearning/frameworks/tensorflow-release-notes/running.html#running

其他信息,如果您不介意使用python 3.6.8和tensorflow-gpu 1.12.0,则可以使用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

我用CUDA-10.1和CUDNN-7.6.2.4从源代码测试了tf-2.0.0-beta1的构建,并且错误没有显现出来。

您可以在此处找到用于构建tf-gpu软件包和tf-base软件包的docker映像:
https://github.com/edowson/docker-tensorflow

撰写此评论时,anaconda频道没有cudnn==7.6.2

Windows 7在试图启动新计算机的过程中将我的头撞到Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR上方。

重新安装后,此线程和其他线程中的许多其他内容均未解决。

测试不具有cudnn64_7.dll会导致与CUDNN_STATUS_INTERNAL_ERROR不同的错误,我重命名了dll。 确认错误是CUDNN NOT INSTALLED类型错误,我撤消了文件名更改。

神奇的是,一切开始起作用。

不知道为什么或如何,但是确实如此。 希望这可以帮助其他人。 如果没有,则只需几秒钟即可尝试。

我发现此问题是由我错误地两次调用tf.Session引起的

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

# several lines of code later...

sess = tf.Session(config=config)

可能不是大多数人的根本原​​因,但值得一提。

只需共享“ allow_growth = True”即可解决以下系统问题
rtx 2080ti,ubuntu18.04,cuda9.0,cudnn7,tf1.9

config = tf.ConfigProto()
config.gpu_options.allow_growth =真
会话= tf.Session(config = config)

它与可用于加载GPU资源以创建cudnn句柄(也称为per_process_gpu_memory_fraction的内存部分有关。
自己减少此内存份额将解决该错误。

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

使用尽可能小的内存。 (在代码中,我使用0.7,您可以从0.3甚至更小开始,然后增加直到出现相同的错误,这就是您的极限。)
将其作为配置传递给您的tf.Session()tf.train.MonitoredTrainingSession()或主管的sv.managed_session()

这应该允许您的GPU为TensorFlow代码创建一个cudnn句柄。

正如解释在这里,新的方法在TF 2.0设置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)

使用此代码段和TF 2.0 RC1,该错误不再出现。
但是,由于拥有20XX Nvidia GPU的人数众多,我认为在发布TF 2.0的最终版本之前本地解决此问题是一个好主意。

我在TF1.4上使用1080Ti和TitanX遇到了同样的问题,@ va-andrew和@oscarlinux的建议为

对于在升级到tensorflow 2.0之后发现此问题的其他人,API和代码略有不同。

Ubuntu 18
Tensorflow 2.0
Tensorflow-GPU 2.0
GeForce RTX 2070

此系统的更新代码。

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

这个解决方案对我有用。 (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)

添加其他数据点。:
rtx 2080ti,ubuntu18.04,cuda10.0,cudnn7
就我而言,它不适用于tf1.14和1.15rc3

@ w4nderlust ,对于1.14和1.15,您将要继续设置会话配置选项config.gpu_options.allow_growth = True 。 是您要报告的内容不起作用,还是只是tf.config.experimental机制不起作用?

@ w4nderlust ,对于1.14和1.15,您将要继续设置会话配置选项config.gpu_options.allow_growth = True 。 是您要报告的内容不起作用,还是只是tf.config.experimental机制不起作用?

抱歉,应该更精确一些,我报告说,如果没有config.gpu_options.allow_growth = True那么在1.14和1.15rc3下我的配置仍然无法使用。

我认为我找到了比config.gpu_options.allow_growth = True更好的解决方法。

对于我的设置(_RTX 2070_,docker image _tensorflow:1.15.0-gpu-py3_),按如下所示设置config可以避免_CUDNN_STATUS_INTERNAL_ERROR_,同时仍然分配整个GPU内存
这对于在allow_growth模式下无法放入内存但仅在分配了全部内存时才可用的大型模型非常有用。

要在RTX上分配整个内存:
config.gpu_options.per_process_gpu_memory_fraction = 1.0

要在RTX上分配整个内存:
config.gpu_options.per_process_gpu_memory_fraction = 1.0

@PoloShock
我使用TF 2.0进行了尝试,但似乎无法正常工作。
Ubuntu18.04,RTX 2080,CUDA10,cudnn 7.6。

对于TF 2.0,用于限制GPU内存使用的API已更改。

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您知道为什么这个问题只出现在RTX上吗? 可能是因为我们还有其他应用程序与TensorFlow同时使用它作为显示GPU吗?

我无法直接调试它,因为我无法访问RTX GPU。

@sanjoy我正在集成GPU上运行显示。 运行TensorFlow时,我的单个RTX GPU上没有其他应用程序。

我尝试将其用于tensorflow 2.0:

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

它修复了rtx2080上的cudnn错误,但培训与笔记本电脑上的1050Ti一样快!
训练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 |
+-----------------------------------------------------------------------------+

新增中

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

没有allow_growth并没有解决问题,我遇到了cudnn错误,无论如何我的RTX只使用了3Gb或内存之类的东西。

任何想法 ?

我试过了

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

但是cudnn仍然抛出错误

我也在带有两个Titan V GPU(@sanjoy)而不是RTX的tensorflow 1.15.0-py3-gpu Docker映像(Ubuntu 18.04)中工作时遇到此错误。 但是,这个错误似乎只发生在我的GPU0上,该GPU0具有使用GPU0内存的Xorg和gnome-shell,而GPU1仅具有使用GPU mem的python,并且不会引发此错误。 不幸的是,错误也是间歇性的-有时我将能够删除docker容器,使用相同的设置和相同的代码重新创建它,然后错误就会消失。 或不。

我可以使用Keras后端界面来修复它:

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)

以下是我在两个GPU上的nvidia-smi

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

我有与@clementpoiret相同的问题,通过allow_growth标志,问题消失了,但是这也使训练非常非常慢,比我在TF 1.x上所经历的要慢。。。

@clementpoiret@EKami ,如果将config.gpu_options.allow_growth = True替换config.gpu_options.per_process_gpu_memory_fraction = 0.8 ,是否可以加快培训速度? 您可以进行实验,看看有多少分数可以充分利用您的GPU。

@ synapse8我在tensorflow 2.0的文档中看不到任何等效的东西,用tf.config.experimental可以做到吗?

编辑:我将尝试以这种方式设置内存,以查看是否可以解决问题:

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)

这样,我们可以方便地调用setup_gpus(True, .9)

@clementpoiret :请注意, tf.config.experimental.set_memory_growth调用是不必要的,因为tf.config.experimental.set_virtual_device_configuration会覆盖该标志,因为它会切片GPU内存并预分配已分配的内存。

此问题不仅限于RTX。 或TF 2.0。

新增:
_from tensorflow.compat.v1导入ConfigProto
从tensorflow.compat.v1导入InteractiveSession
config = ConfigProto()
config.gpu_options.allow_growth =真
会话= InteractiveSession(config = config)_

解决环境的“无法创建cudnn句柄:CUDNN_STATUS_INTERNAL_ERROR”问题,如下所示:

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
这可能是NVIDIA驱动程序最大的连续块分配问题吗? 可以在较小的块中分配相同的总内存量吗?

你好

我无法在我的机器上重现此内容,因此需要一些帮助来解决此问题。 我们这里有人可以重现该问题并愿意进行一些实际调试吗?

首先,我想了解为什么MinSystemMemory不能为cuDNN保留足够的内存。 如果某个人的安装程序可以重现此问题,则可以添加一些日志记录(作为本地补丁程序)以发现MinSystemMemory返回的内存量,这会很棒。 而且确实增加了神奇的0.05数量MinSystemMemory帮助的情况呢?

@sanjoy我有一个显示此问题的版本。 我将如何访问MinSystemMemory或“设置魔术0.05数值”? 我大部分时间已恢复使用CUDA 9.1,但我不介意尝试一些操作。

@odinsbane,您必须从源代码构建TensorFlow,然后执行我在下面建议的操作。

第一步是将LOG(INFO)std::cerr行添加到MinSystemMemory以打印available_memoryMinSystemMemory的返回值。 available_memory与打印的nvidia-smi是否一致? 我们为系统留下多少内存?

其次,将0.05幻数增加到0.07根本没有帮助吗?

这个作品! 感谢大伙们!

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)

我们在RTX 2070(Ubuntu 18.04,TF2)上遇到了类似的问题,我们尝试了CUDA 10.0和libcudnn7.xxx版本的不同组合,但该错误再次出现。
在另一台机器上,我们有一台GTX 1080ti,该机器可以正常运行。
在两种情况下,nvidia驱动程序均为430.50。

它不是由tf.keras.utils.plot_model ,我将其删除,此错误仍然出现,但出现的频率较低。
更新:我发现只有在使用tf.keras.utils.plot_model时才会发生这种情况。 我会继续努力。

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

我在Ubuntu 18.04.3 LTS,tf 1.15,cuda 10.0上的RTX 2080 Ti有类似的问题。

在我的情况下,很奇怪的是,这种情况仅偶尔发生,一旦发生,将持续几小时甚至几小时,然后消失

我尝试了上述所有解决方案,但没有一个可以立即解决。 我什么也不做,只是等待,它最终消失了。

我也尝试过但上面没有提到的内容:

  1. 删除~/.nv目录
  2. 只需重启

仅供参考,错误日志

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.

我们面临相关问题

系统规格

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

当我尝试使用LSTM,GRU,RNN等时,会触发错误。

实际错误

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]

明显的问题

似乎我所有的记忆都很快耗尽了。 问题似乎只在gpu模式下出现,相同的代码在cpu上工作正常

试用版

  • 允许内存增长
  • 创建内存有限的虚拟设备

两次尝试都会产生相同的错误。

有任何想法吗?

由于无法复制,因此无法在此问题上取得进展。 如果您能够在机器上可靠地重现此内容,则可以提供帮助。 方法如下: https : https: //github.com/tensorflow/tensorflow/issues/24496#issuecomment -561366750

由于无法复制,因此无法在此问题上取得进展。 如果您能够在机器上可靠地重现此内容,则可以提供帮助。 方法如下: #24496(评论)#24496(评论)

@sanjoy ,您好:我非常愿意提供帮助,但是很遗憾,我可能无法从源代码构建tf,因为我正在使用大学的属性进行实验,而我的个人笔记本电脑没有配备GPU。 还有其他方法可以获取我们需要的日志吗?

我在堆栈溢出时发现了以下代码,这有帮助吗?

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

还有其他方法可以获取我们需要的日志吗?

我将签入VLOG语句以获取此信息。 完成后,您将能够每晚使用tf进行安装和复制(带有一些额外的标志,我会让您确切知道哪些标志)?

如果可以在pipconda使用我使用的虚拟环境,当然可以在该计算机上安装软件包。 我将尝试重现该错误。

如果可以在pipconda使用我使用的虚拟环境,当然可以在该计算机上安装软件包。 我将尝试重现该错误。

您能否每晚安装tf(以便它选择添加日志记录的提交)并在环境变量TF_CPP_VMODULE设置为gpu_device=5 ? 那应该打印出两行

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                                              

您能在这里报告这些数字吗?

抱歉,我当前的代码与tf 2.0不兼容(我使用1.15),我正在尝试对其进行更新。 请给我一点时间。

这个问题似乎与我的RTX2080有关,我有台式机GTX1080,一切似乎都还可以,然后我使用conda将conda环境克隆到我的RTX2080笔记本电脑中,使用tensorflow2.0.0-gpu。 一旦应用程序代码使用Conv2d,LSTM,GRU,那么这个麻烦就来了。
在使用以下代码解决此问题之前:
gpus = tf.config.experimental.list_physical_devices('GPU')
如果是gpus:
尝试:

当前,各个GPU的内存增长必须相同

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

必须在初始化GPU之前设置内存增长

    print(e)

但由于几天前,上述方法不再起作用

我与gtx 960m有相同的问题

@sanjoy ,您好,我刚得到以下输出:

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

@sanjoy ,您好,我刚得到以下输出:

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

谢谢!

不幸的是,这并没有我想的那么有用。 如果我在本地版本中将MinSystemMemory固定为542015488 (例如min_system_memory = std::min(min_system_memory, 542015488ll) ),则resnet(例如)似乎工作正常,并且cuDNN没有任何错误。

@sanjoy我可以(基本上始终)重现此问题。

最近每晚的相关消息:

明确允许内存增长

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

无需更改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

编辑:模型信息,如果有帮助。

__________________________________________________________________________________________________
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

一个使用TF 1.15的最小示例,出现此错误。 在RTX 2070和NVIDIA 440.44和CUDA版本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.

我想在一个单独的问题中指出https://github.com/tensorflow/tensorflow/issues/36501 ,使用这些选项可以使代码运行,但观察GPU的实际内存使用情况表明它甚至不是真的进行增量内存使用。 因此,以上选项可修复该错误,但实际上并没有执行它声称要执行的操作。 我以前在较早的TF版本(例如1.2 ...等)中使用相同的模型,但它们确实进行了实际的增量内存分配。

我和这里的每个人都有同样的问题! 安装tf 2.1之后,如果不增加GPU的内存增长就无法运行一个简单的MNIST示例。 我用的是2080 ti

我面临的主要问题是,即使在代码中添加了内存增长的情况下,我也无法在无法获得CUDNN内部错误的情况下与tf 2.1一起运行tensorflow-probability。 我尝试安装tf 2.0,CUDA 10.0和CUDA 10.1(不同的CUDNN版本)。 在完全重新安装我的ubuntu之后,我设法修复了简单的MNIST示例,使其在没有增长的情况下正常工作,但是没有张量流概率示例。 我最终尝试使用tensorflow官方每晚泊坞窗,使用tensorflow概率(容器内部tf 2.2)时仍然遇到相同的错误。 在CPU上一切正常。 我还尝试过在具有1080 ti的计算机上运行相同的docker,并且可以正常工作...我感觉RTX系列肯定存在问题。

tf docker和tensorflow-probability示例错误以及额外的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我与RTX 2080有相同的问题,可以根据需要从源代码进行构建。

@odinsbane,您必须从源代码构建TensorFlow,然后执行我在下面建议的操作。

第一步是将LOG(INFO)std::cerr行添加到MinSystemMemory以打印available_memoryMinSystemMemory的返回值。 available_memory与打印的nvidia-smi是否一致? 我们为系统留下多少内存?

其次,将0.05幻数增加到0.07根本没有帮助吗?

可以确认将魔术数字0.05魔术数字更改0.1从源构建似乎可以解决此问题(至少对于1.15.2)!

在喧闹的海洋中,最小的系统内存魔数完全合乎逻辑。 感谢分享!

@chsigg有什么建议吗? 也许我们可以尝试初始化cuDNN,cuBLAS和其他NVIDIA库_before_我们保留所有GPU内存?

我们还可以尝试默认情况下启用allow_growth ,但这将需要一些时间。

这个问题似乎与我的RTX2080有关,我有台式机GTX1080,一切似乎都还可以,然后我使用conda将conda环境克隆到我的RTX2080笔记本电脑中,使用tensorflow2.0.0-gpu。 一旦应用程序代码使用Conv2d,LSTM,GRU,那么这个麻烦就来了。
在使用以下代码解决此问题之前:
gpus = tf.config.experimental.list_physical_devices('GPU')
如果是gpus:
尝试:

当前,各个GPU的内存增长必须相同

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

必须在初始化GPU之前设置内存增长

    print(e)

但由于几天前,上述方法不再起作用

几天来一直在尝试运行

我也遇到这个问题
anacondacloud安装tensorflow-gpu2.0

rtx2070s
tensorflow-gpu.2.0.0
CUDA 10.0.13
库顿7.6.5
无法创建cudnn句柄:CUDNN_STATUS_INTERNAL_ERROR
无法获得卷积算法。 这可能是因为cuDNN无法初始化,所以请尝试查看上面是否打印了警告日志消息。

我也遇到这个问题
anacondacloud安装tensorflow-gpu2.0

rtx2070s
tensorflow-gpu.2.0.0
CUDA 10.0.13
库顿7.6.5
无法创建cudnn句柄:CUDNN_STATUS_INTERNAL_ERROR
无法获得卷积算法。 这可能是因为cuDNN无法初始化,所以请尝试查看上面是否打印了警告日志消息。

您是否插入:

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)

在您输入代码的顶部?

经过一段时间的尝试,尝试通过tf.signal.stft尝试解决一个明显不同的问题
我终于遇到了这个线程,并尝试了允许内存增加的解决方案。 它也解决了我的问题。
我已经从anaconda安装了tensorflow-gpu = 2.1和cudatoolkit = 10.1,但是尝试安装
tensorflow-gpu通过pip具有完全相同的结果。 我可以用卡在linux-ubuntu 18.04和debian 9.12下重现它

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

我也在实验室里尝试了另外两张卡片

  GeForce GTX 1080 Ti
  TITAN Xp COLLECTORS EDITION

在允许和不允许内存增长的情况下,代码可以正常运行

我的最小问题如下。 有趣的是问题不是conv2d。 我可以更改这三个命令的顺序,而这始终是第三个失败的命令。

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

我也遇到这个问题
anacondacloud install tensorflow-gpu2.0
rtx2070s
tensorflow-gpu.2.0.0
cuda 10.0.13
cudnn 7.6.5
无法创建cudnn句柄:CUDNN_STATUS_INTERNAL_ERROR
无法获取卷积算法。这可能是因为cuDNN初始化失败,所以请尝试查看上面是否打印了警告日志消息。

您是否插入:

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)

在您输入代码的顶部?

yeah,I solved this problem like this way.Thanks!!

我有同样的问题, allow_growth = True是解决方案。 但是,对于TensorFlow 2,要执行此操作,您需要添加以下行:

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

感谢用户@opcecco在这个问题上: https :

有趣的是问题不是conv2d。 我可以更改这三个命令的顺序,而这始终是第三个失败的命令。

@roebel您可以为几个不同的六个排列附加日志吗?

如果将程序更改为(例如),会发生什么:

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

失败是否仍在conv2d发生,还是在第三个stft

@sanjoy确保这里的脚本的三个变体是上面更改命令顺序的变体,第四个变体是从4 stft开始并以conv2d结尾

四个不同的日志使用以下脚本
https://github.com/tensorflow/tensorflow/issues/24496#issuecomment -593098386
替换最后四行。

简而言之,结果取决于顺序:

执行conv2d时stft-> blas-> conv2d失败
执行stft时conv2d-> stft-> blas失败(因此不是第三个,但是blas似乎已经为conv2d加载了
执行STFT时matmul-> conv2d-> stft失败
执行conv2d时,stft->-stft->-stft-> stft-> matmul-> conv2d失败。 请查看下面的日志。

如果需要,不要介意要求其他变体。

conv2d最后:

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

log.conv2d.last.txt

matmul最后

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

最后一个

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首先conv2d最后:

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

非常感谢

我在以下配置中遇到了相同的问题:
从(源或二进制)安装的TensorFlow:r1.13.1,r.1.13.2,r1.14
python版本:3.6.1
Bazel版本(如果从源代码编译):
GCC /编译器版本(如果从源代码编译):
CUDA / cuDNN版本:带有cuDNN 7.4.1的CUDA 10
GPU型号和内存:RTX 2070 8GB。

我用以下方法解决了这个问题:
从(源或二进制)安装的TensorFlow:r1.12.0
Python版本:3.6.9
GCC /编译器版本:4.8
CUDA / cuDNN版本:带有cuDNN 7.1.4的CUDA 9.0
GPU型号和内存:RTX 2070 8GB。
希望对您有所帮助

我也遇到过这样的问题,可以通过添加环境变量TF_FORCE_GPU_ALLOW_GROWTH = true来解决。

配置如下:
Windows 10
从源r2.0编译的Tensorflow
边框:0.26.1
C ++编译器:MSVC 2017
CUDA:10
cuDNN:7.6.5

intel4930 cpu,nvidia titan XP帕斯卡
Ubuntu 18.04.4,miniconda最新,
`!conda列表| grep“ cud”给

    cudatoolkit               10.1.243             h6bb024c_0  
    cudnn                     7.6.5                cuda10.1_0  

`!conda列表| grep“张量”``给

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  

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)

模型是总参数为112,269的变体自动编码器
x_train.shape,y_train.shape,x_test.shape,y_test.shape给出
((106496, 32, 32, 1), (106496,), (12288, 32, 32, 1), (12288,))

代码包括:

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

它失败了。 控制台显示

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

如果不是上述第一个单元格,我使用

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)

然后我得到这个错误


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?

有趣的是,在我奋斗的过程中,我的菜单栏中出现了一个红色的“禁止进入”标志,上面写着“错误计数,您的依存度未得到满足”。
我运行了软件更新,它想删除libcudnn7-dev和libcudnn7-doc
以及升级与Linux有关的其他57个库

编辑:重新启动后,该模型似乎可以使用以下方法成功训练:

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)

或这个:

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)

gpu上的内存利用率小于700 MB,批处理大小为16,
批量大小为256时约为1 GB(训练速度快3倍)

我确实尝试从源代码进行编译,但是遇到了同样的问题。 我终于能够解决我的问题,设置config.gpu_options.allow_growth = True

但是,如果我在命令行中遇到了此问题,如何添加这些代码?

我也遇到这个问题
anacondacloud安装tensorflow-gpu2.0
rtx2070s
tensorflow-gpu.2.0.0
CUDA 10.0.13
库顿7.6.5
无法创建cudnn句柄:CUDNN_STATUS_INTERNAL_ERROR
无法获得卷积算法。 这可能是因为cuDNN无法初始化,所以请尝试查看上面是否打印了警告日志消息。

您是否插入:

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)

在您输入代码的顶部?

我遇到了与上述完全相同的问题。 Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR

@robosmith的解决方案完全解决了我的问题!

我的规格:
RTX 2070
Ubuntu 18.04 LTE
Tensorflow 2.1.0
Keras 2.3.0
库顿7.6.5
cuda10.1.0
康达4.8.3
python 3.7.7

通过conda install tensorflow-gpu keras构建

非常感谢! 这是我一次完全使用TF-2! TF-1完全停止工作,这就是为什么我决定升级并“看看会发生什么”的原因!

谢谢!

config.gpu_options.allow_growth =真

当您使用tensorflow 2.0时,您可以使用
tf.config.experimental.set_memory_growth(tf.config.list_physical_devices('GPU')[0], True)
此代码在import tensorflow as tf但在您的代码之前。

我确实尝试从源代码进行编译,但是遇到了同样的问题。 我终于能够解决我的问题,设置config.gpu_options.allow_growth = True

共享此代码可使其更快地供tensorflow和keras用户使用。
这里来

# 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

只是想插话说问题仍然存在。

我的规格:
Ubuntu 20.04
NVIDIA RTX 2070
Nvidia_driver 440.64
Tensorflow-gpu 2.0.1(通过conda安装,它将在同一环境中自动安装Cudatoolkit和CuDNN)
cudatoolkit 10.1.243
库顿7.6.5

问题由tf.config.experimental.set_memory_growth(tf.config.list_physical_devices('GPU')[0], True)

但是,这似乎更像是一种变通方法,而不是实际的解决方法,并且如今很多人都拥有20XX卡。 可能应该有解决此问题的更新。

更新:由于我是双重引导,因此我也尝试检查Windows。 问题仍然存在。
Windows 10
Nvidia驱动程序445.87
除此之外,一切都相似

为我的RTX 2080安装最新的驱动程序(445.87)为我解决了此问题。

@NBouman这很有趣,但对于在配备GeForce GTX 1050 TI的Ubuntu 18.04上的我而言,我刚刚更新为最新的可用驱动程序440.82。 仍需要允许内存增长才能使其正常运行。

为我的RTX 2080安装最新的驱动程序(445.87)为我解决了此问题。

@NBouman您正在使用什么操作系统? 我在Ubuntu 20.40上,我可以找到的最新可用驱动程序是440.82,并且像@roebel一样,问题仍然存在。

@roebel @eduardoscsouza我在Windows 10上,并且该计算机之前存在此问题。

只是想插话说问题仍然存在。

我的规格:
Ubuntu 20.04
NVIDIA RTX 2070
Nvidia_driver 440.64
Tensorflow-gpu 2.0.1(通过conda安装,它将在同一环境中自动安装Cudatoolkit和CuDNN)
cudatoolkit 10.1.243
库顿7.6.5

问题由tf.config.experimental.set_memory_growth(tf.config.list_physical_devices('GPU')[0], True)

但是,这似乎更像是一种变通方法,而不是实际的解决方法,并且如今很多人都拥有20XX卡。 可能应该有解决此问题的更新。

更新:由于我是双重引导,因此我也尝试检查Windows。 问题仍然存在。
Windows 10
Nvidia驱动程序445.87
除此之外,一切都相似

对于tensorflow 2.0.0,使用了:
tf.config.experimental.set_memory_growth(tf.config.experimental.list_physical_devices('GPU')[0],True)

谢谢!!! 成千上万的谢谢!!!!!!!!!!!!!!!

作业系统:ubuntu 18.04 lts

驱动程序版本:435.21

CUDA:cudatoolkit 10.1

CUDNN:cudnn-7.6.5-cuda10.1_0

我用anaconda安装tensorflow

conda create -n tf-gpu tensorflow-gpu

anaconda会通过之前的命令自动安装cudatoolkit和cudnn。

我有同样的问题,错误:

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

因此,我们这里有一个未解决的问题(一种针对官方建议的解决方法,即不使用内存增长来提高内存处理效率)。 开发团队没有太多反馈。 我想知道为什么?

这个错误似乎影响了很多种tensorflow版本(1.13、2.0、2.1),如果我没看错的话,据说所有问题都发生在cuda 10上。该代码在许多卡上运行都很好,但在其他卡上却没有。
开发团队中的某人能否告诉我们,这是否暗示了cuda驱动程序中的问题,而不是tensorflow层中的问题? 在这种情况下,将错误报告传输到NVIDIA支持页面肯定会有所帮助。 不是吗

tensorflow开发团队的某人能否评论他们如何看待此bug? 有人在调查吗?

人们是否一直在检查路径或LD库路径上是否有两个CuDNN 7共享库。 该库中没有次要编号或补丁编号,但是版本不匹配可能导致此错误消息。

我在NVIDIA上打开了一个错误报告,让您知道结果。

@samhodge
实际上,已经安装了许多版本的libcudnn,每个anaconda env都有其自己的版本。
通常,anaconda会正确安装rpath进行安装,因此很难获得正确的库。

我做了一个strace并grepped失败时打开的库
它们始终来自托管tensorflow软件包的anaconda env目录(请参见下文)。
除了libcuda,它是版本440.82,并且我已经使用NVIDIA安装程序进行了编译。

我可以将LD_LIBRARY_PATH设置为具有不同cudatoolkits和不同libcudnn的其他anaconda env lib dirs之一,跟踪保持不变。
还要注意,不是lbcudnn引起了问题。 它始终是第三个libcuxyz库
只能在特定的GPU上使用(我在具有不同GPU的不同机器上使用了相同的安装脚本,有些确实可以工作,有些则无法工作),并且在启用内存增长的情况下它们都可以正常工作。

(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

在带有GeForce RTX 2060 SUPER的Ubuntu 20.04上,我遇到了同样的问题。 具有密集层的NN效果很好。 但是有了CNN图层,我得到了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.
添加tf.config.experimental.set_memory_growth(tf.config.list_physical_devices('GPU')[0], True)对错误没有影响。
我按照https://www.tensorflow.org/install/gpu进行了安装, nvidia-smi显示:
Driver Version: 440.64.00 CUDA Version: 10.2
我的conda env具有:

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

在带有tf 1.15的conda env中,我遇到了相同的错误。 如果可以解决此问题,那就太好了。

更新资料

在使用export TF_FORCE_GPU_ALLOW_GROWTH=true ,一切正常。 我给人的印象是tf.config.experimental.set_memory_growth(tf.config.list_physical_devices('GPU')[0], True)会发生同样的事情,但事实并非如此。 我认为应该在TensorFlow GPU支持网页上明确说明这一点。

@samhodge
实际上,已经安装了许多版本的libcudnn,每个anaconda env都有其自己的版本。
通常,anaconda会正确安装rpath进行安装,因此很难获得正确的库。

我做了一个strace并grepped失败时打开的库
它们始终来自托管tensorflow软件包的anaconda env目录(请参见下文)。
除了libcuda,它是版本440.82,并且我已经使用NVIDIA安装程序进行了编译。

我可以将LD_LIBRARY_PATH设置为具有不同cudatoolkits和不同libcudnn的其他anaconda env lib dirs之一,跟踪保持不变。
还要注意,不是lbcudnn引起了问题。 它始终是第三个libcuxyz库
只能在特定的GPU上使用(我在具有不同GPU的不同机器上使用了相同的安装脚本,有些确实可以工作,有些则无法工作),并且在启用内存增长的情况下它们都可以正常工作。

(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

因此,您有点说明了我的观点, libcudnn.so.7并没有说7.XXX.YYY最重要的是7.XXX.YYY进一步依赖CUDA 10.2 10.1 10.0 9.2 9.1 9.0

自从我开始好好管理路径并管理可用内存量之后,再初始化一个已知大小的图形,并确保目标GPU仅使用该图形的足够内存和足够的内存来查询多少CUDA,就没有看到此错误。内存可用。

我认为这是资源问题。 启动该过程时有多少可用内存,图形使用多少内存?

@ kognat-docs

因此,您在某种程度上说明了我的观点libcudnn.so.7在该7.XXX.YYY之上没有说7.XXX.YYY进一步依赖于CUDA 10.2 10.1 10.0 9.2 9.1 9.0等

您提出的问题是“人们是否正在检查路径或LD库路径上是否有两个CuDNN 7共享库”。 我的回答是:我已经检查过这一点,只有一个。
我已将跟踪信息发送给您。

自从我开始管理路径以来,我还没有看到错误

您管理路径是什么意思?
我总是管理自己的道路! 我已经安装了一个conda环境,并证明它是一致的! 一切都像蟒蛇包装的一样,我对此进行了验证。

无论如何,您可能会认为我太愚蠢了,无法设置anaconda。 好
我现在已经下载了官方docker镜像

张量/吨ensorflow:2.1.0-gpu-py3

并在其中运行我的脚本。 如果没有的话,它会崩溃

出口TF_FORCE_GPU_ALLOW_GROWTH = true

我可以更好地管理路径吗?

并在初始化已知大小的图形之前管理可用的内存量,并确保目标GPU仅为图形使用了足够的内存,并有足够的内存来查询有多少CUDA内存可用。

我认为这是资源问题。 启动该过程时有多少可用内存,图形使用多少内存?

正如我在报告中上面所写的那样,没有图(或者最好说几乎没有图)! 我只跑这四行

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

它崩溃了。 如果我更改了三行的顺序,那么在执行这三个操作后,它总是会崩溃(我在错误报告中对此进行了解释)。

只是为了好玩,我计算了字节数:需要的数据存储量小于83kB。 GPU是空的,我不将其用于图形,并且没有其他进程在运行。 在各种系统上都有4GB或11GB可用! 另外我知道如何运行nvidia-smi! 因此,该卡还是空的,我无法运行这4条需要84kB的线路!

仅供参考,由于内存耗尽而导致的错误看起来大不相同,我也有这些错误。 对于我的真实图形,我能够很好地检测到它们并做出相应的反应。

无论如何,谢谢您的努力。

@roebel您是否看到@sanjoy的有关从cpp进行调试的评论https://github.com/tensorflow/tensorflow/issues/24496#issuecomment -561366750?

我还没有绕过重新编译tensorflow并尝试一下。 它们的版本运行得如此之快,以至于我花了一些时间来设置和编译所有内容。 另外,1.15删除了对我使用的gcc版本的支持,而1.13没有收到任何更新,因此无论如何我都无法调试它。

@roebel我不记得是什么引发了您的问题。

看到这个https://github.com/tensorflow/tensorflow/issues/24496#issuecomment -480549043

这就是为什么我认为这与内存有关,这个问题一段时间以来都没有影响我,也没有影响我的软件在各种平台上的用户。

@samhodge

是的,我知道是否有错误似乎仅是由一种相当特殊的情况触发的。

@odinsbane

谢谢,不,我没有注意到。 我将查看是否可以编译最新版本的tf2.2.0。

实际上我尝试过使用tensorflow 2.2的docker,它使用相同版本的cuda 10.1并存在相同的问题。

以为这是Windows的唯一问题,所以我从头开始安装了ubuntu环境,才发现问题出在我的显卡(RTX 2080)上。 不幸的是,由于这个问题,我认为我将选择一个不同的机器学习平台,因为自2018年以来这似乎一直是一个问题。

@ kognat-docs

并在初始化已知大小的图形之前管理可用的内存量,并确保目标GPU仅为图形使用了足够的内存,并有足够的内存来查询有多少CUDA内存可用。

我认为这是资源问题。 启动该过程时有多少可用内存,图形使用多少内存?

正如我在报告中上面所写的那样,没有图(或者最好说几乎没有图)! 我只跑这四行

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

它崩溃了。 如果我更改了三行的顺序,那么在执行这三个操作后,它总是会崩溃(我在错误报告中对此进行了解释)。

只是为了好玩,我计算了字节数:需要的数据存储量小于83kB。 GPU是空的,我不将其用于图形,并且没有其他进程在运行。 在各种系统上都有4GB或11GB可用! 另外我知道如何运行nvidia-smi! 因此,该卡还是空的,我无法运行这4条需要84kB的线路!

在进程以50毫秒的间隔运行时,您是否通过在nvidia-smi上使用watch观察到正在使用多少内存?

查看适用于其他人的此修复程序

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

因此,您只需更改您的运行时环境就可以进行修补而无需接触代码。

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

好消息!
以下
https://github.com/tensorflow/tensorflow/issues/24496#issuecomment -561366750

我从这里使用anaconda tensorflow配方重建了2.1版
https://github.com/AnacondaRecipes/tensorflow_recipes

我在MinSystemMemory中添加了两个打印,分别显示available_memory和min_system_memory。
在我的系统上,使用GeForce GTX 1050 Ti禁用TF标准日志
我有这个

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报告说GPU具有4040MiB,在该系统上,具有13MiB的卡上运行有X,因此数字似乎不错。

min_system_memory设置如下

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

因此,无论如何选择最大的内存量。 相反,我添加了一种通过环境变量TF_FORCE_MIN_SYSTEM_MEMORY_MB强制min_system_memory的机制。
然后跑步

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

问题已经解决了!

不幸的是,我目前没有带有RTX卡的系统,并且不确定何时能恢复正常。 如果有人愿意在这样的卡上进行测试,我可以为需要运行的ubuntu linux提供pip程序包和conda环境的内容。

不错@roebel

可能值得建议,作为拉取请求并添加到文档中。

@samhodge @sanjoy @odinsbane

可能值得建议,作为拉取请求并添加到文档中。

可以,但是问题是该解决方案可能不适用于其他卡。
对于我的GTX 1050,总内存为4GB,并保留了默认系统内存
张量流最大为(300MB,4GB * 0.05)。 因此对于GTX1050,这将是300MB,显然太小了。 如上所述,我需要增加到310MB。

现在RTX2080的总内存为11GB,最大内存为(300MB,11GB * 0.05)
将选择系统内存为550MB,这取决于1050上的发现
通常应该足够。

我将在本周结束前再次使用RTX2080 GPU,并且将会看到
我到那里去了。

@samhodge @sanjoy @odinsbane

最终,我能够在rtx 2080卡上运行修补的库。
如预期的那样,补丁版本未通过。 再次在这里脚本

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

这是gpu_device.cc报告的available memory矩阵,
默认值Min_system_memory在gpu_device.cc和
min value of the min_system_memory我需要选择脚本以使其不中止:

卡 AvailMem | Def MinSysMem | 必需的MinSysMem
:------- |:-------------- |:---------- |:--------------- --------
1050 TI | 4163764224 | 314572800 | 325058560
1080 TI | 11567431680 | 578371584 | 335544320
2080 TI | 11381964800 | 569098240 | 618659840

因此,虽然1050和1080以大约相同的内存大小运行脚本
RTX2080需要几乎两倍的内存。 这听起来不好
对我来说。

有什么建议可以尝试使其达到可比的价值吗?

@roebel

我在C ++应用程序中为此苦苦挣扎了许多迭代。

最终归结为以下几点。

仅当有足够的内存来运行模型时,才在GPU上运行模型。

因此,模型所需的内存量是可量化的。

因此,您需要具有一定比例的GPU内存,以适合该型号。

然后,您还需要在分配内存之前确切地知道卡上有多少可用内存,这取决于竞争状况,因为您不知道操作系统上同时使用CUDA内存的其他原因。

但是除了竞争条件之外,您还需要测量可用内存。

这是通过使用cudaMemInfo ,它本身使用内存。

因此,假设您有足够的内存来运行cudaMemInfo一次以进行测量,并且您需要确保有足够的内存可用以适合模型并再运行一次cudaMemInfo ,然后并且仅那么您可以在该卡上分配足够的可用VRAM百分比来运行模型。

无论如何,从我的随机胡言乱语中得出的结论是,需要cudaMemInfo来轮询可分配的内存量,该内存本身也使用了一些可用的内存。

基于Turing的卡上cudaMemInfo所使用的内存量可能与基于Pascal的卡上的内存量有所不同,如果您愿意,我可以请NVIDIA的人来看看。

是的,我根本找不到对cudaMemInfo引用,但这似乎是一种占位面积,即最大300Mb和卡内存的5%。

看一下:

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

看来它本身并没有使用它。

我认为我们不应该在为系统库保留的内存量上费尽心思-正如您所观察到的那样,没有系统的方法可以实现这一目标。

取而代之的是,IMO应该尝试在BFC分配器有机会分配其余GPU内存之前初始化系统库。

CC @chsigg

可能只有在允许内存增长关闭的情况下才应该这样做。 否则,即使您不需要所有运营商,您对于2080总是需要约580MB的内存。

我针对测试案例中运行这三种操作的组合的最低系统内存要求进行了一些测试。 我只比较1080和2080卡。 您找不到单独的conv2d,因为无论如何它都会初始化blas。 出来了

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

可以看出,在2080年,CUDA的每个操作都需要开销,而使用更多库时,开销会增加。 在大多数情况下,开销为<100MB但是一旦包含Conv2D,它就会变成>220MB

如果@samhodge与NVIDIA有联系,我个人会很有趣地听到这是否有意。

大家好!
我已经通过限制内存增长解决了类似的问题,您可以尝试。

您可以在限制内存增长部分中找到代码

(这是我在GitHub上的第一条评论)

我以前也有类似的问题。 手动限制GPU内存有帮助。 https://github.com/tensorflow/tensorflow/issues/25160#issuecomment -643703167

在带有GeForce RTX 2060 SUPER的Ubuntu 20.04上,我遇到了同样的问题。 具有密集层的NN效果很好。 但是有了CNN图层,我得到了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.
添加tf.config.experimental.set_memory_growth(tf.config.list_physical_devices('GPU')[0], True)对错误没有影响。
我按照https://www.tensorflow.org/install/gpu进行了安装, nvidia-smi显示:
Driver Version: 440.64.00 CUDA Version: 10.2
我的conda env具有:

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

在带有tf 1.15的conda env中,我遇到了相同的错误。 如果可以解决此问题,那就太好了。

更新资料

在使用export TF_FORCE_GPU_ALLOW_GROWTH=true ,一切正常。 我给人的印象是tf.config.experimental.set_memory_growth(tf.config.list_physical_devices('GPU')[0], True)会发生同样的事情,但事实并非如此。 我认为应该在TensorFlow GPU支持网页上明确说明这一点。

杜德,您的解决方案可以挽救我的生命。

Nvidia刚刚发布了440.100和450.51(Beta)Linux显示驱动程序。
我尝试了440.100,但没有解决问题。 有人尝试过Beta 450.51吗?

@eduardoscsouza

Nvidia刚刚发布了440.100和450.51(Beta)Linux显示驱动程序。
我尝试了440.100,但没有解决问题。 有人尝试过Beta 450.51吗?

我尝试了450.36.06。 检查https://github.com/tensorflow/tensorflow/issues/25160#issuecomment -643703167。

对我有用的代码:

将tensorflow作为tf导入
config = tf.compat.v1.ConfigProto()
config.gpu_options.allow_growth =真
会话= tf.compat.v1.InteractiveSession(config = config)

_请确保这是一个错误。 根据我们的GitHub政策,我们仅解决标记:bug_template_

系统信息

  • 我是否编写了自定义代码(与使用TensorFlow中提供的股票示例脚本相对):是和否(如下所述)
  • 操作系统平台和发行版(例如Linux Ubuntu 16.04):Manjaro
  • 如果问题发生在行动装置上,则行动装置(例如iPhone 8,Pixel 2,三星Galaxy):
  • 从(源或二进制)安装的TensorFlow:tf-nightly-gpu(Dec 19,r1.13)
  • TensorFlow版本(使用下面的命令):1.13.0-dev20181219
  • python版本:3.7.1
  • Bazel版本(如果从源代码编译):
  • GCC /编译器版本(如果从源代码编译):
  • CUDA / cuDNN版本:带有cuDNN 7.4.1的CUDA 10
  • GPU型号和内存:RTX 2070 8GB

描述当前行为
我正在MNIST上运行CNN模型。 当我使用GPU运行时,我遇到了
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

我进行了一些挖掘,发现这是一个内存问题(因为我有32GB的RAM和64GB的交换空间,所以不应该这样。运行模型时运行了htop,并且有20 + GB的可用空间,这远远超过了足以适合8GB vRAM映射。

使用gpu_options.allow_growth = True可以使模型正常工作,而设置os.environ['CUDA_VISIBLE_DEVICES'] = '-1'也可以。 这意味着我面临内存问题,但是我不知道如何解决。

此外,尝试运行tensorflow / models / official / mnist / model时,使用gpu_options.allow_growth = True不能解决相同的问题,该行为与我的代码应该具有相似的行为。

重现问题的代码

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

这对我有用。RTX 2060Ubuntu的04.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 ...

你好@ bm777

在几个月前进行调查之后,我总结了我对问题的理解

GPU型号和内存:RTX 2070 8GB
...不应该这样,因为我有32GB的RAM和64GB的

问题不是系统内存,问题是GPU内存!

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

之所以有效,是因为它不使用GPU!

一些解释:

TF有两种操作模式:

  1. allow memory growth = false :在这种情况下,TF使用以下粗略猜测为系统库预分配了一些内存
    需要多少内存。 正如您可以在这里阅读的那样https://github.com/tensorflow/tensorflow/issues/24496#issuecomment -633953715 TF为此猜测使用了公式max(300MB, GPU-MEM * fac) 。 对于TF2.1,如果是TF2.2, fac = 0.05
    请记住,它是fac=0.07 。 因此,现在您有8GB的空间,可以在TF2.1下为GPU预分配400MB的内存
    在TF2.2下为560MB。

    我已经在这里通过实验评估了一些GPU和TF21的必要预分配内存: https : https://github.com/tensorflow/tensorflow / issues / 24496#issuecomment -637715002

    事实证明,对于Conv2D操作,我在那里需要520MB,在TF21下您将比在TFMB下少,但在TF22下则更多。 不幸的是您没有提到您的TF版本,但我假设您使用的是TF2.1。 如果您使用TF2.2,但仍然失败,则可能是因为您使用了其他GPU。 无论如何,事实是它失败了。 见下文

2) allow memory growth = true :TF不使用任何预分配的内存,并在它们来时加载库。 在TF文档中,由于潜在的内存碎片,这被声明为有问题的,因此默认情况下为off

我的看法:

鉴于库所需的内存范围很大,这取决于您在GPU上执行的操作,因此您很难正确获得模式allow memory growth = false (请参阅https://github.com/tensorflow/ tensorflow /问题/ 24496#issuecomment-637950411)。 当前的解决方案:如果GPU很小,则增加针对TF2.2进行的预分配内存的大小是有问题的。 假设您需要所有可用的库(blas,Conv,FFT,但我不知道是否还有其他库),这将阻止使用内存。 如果您不使用所有这些,这将导致浪费预分配的内存,从而减少您可能为应用程序加载的模型大小。 另一方面,我相信当您创建模型并尽早强制系统库在训练之前加载时,可以避免内存碎片问题。 无论如何,这似乎在大多数情况下都是正在发生的事情,因此似乎是有益的,特别是对于内存较小的GPU,尤其是对于训练单个模型,不预分配而是使用allow memory growth = true

我个人使用的GPU的内存范围为4GB到11GB,并按照上面的参数设置了TF_FORCE_GPU_ALLOW_GROWTH = true。 目前,我对此没有任何问题。

你好@roebel

我也是,我也在考虑内存分配错误的问题。 这显然对我来说现在。
现在看起来不错的GPU内存

过去,我测试了许多用于预分配内存的选项:

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

我个人使用具有6GB内存的GPU。
谢谢@roebel ,因为TF_FORCE_GPU_ALLOW_GROWTH=true强制我的GPU进行分配😊。

我有同样的问题。 我可以肯定地说,问题仅发生在运行完全相同的代码的2070 RTX上,而并非在Titan RTX上。

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

只需使用CUDA 11和cudnn 8.0升级到Tensorflow 2.3。 它神奇地解决了我所有的问题,现在我什至不需要config.gpu_options.allow_growth = True的解决方法。

不幸的是,我需要运行仅支持tensorflow 1.X的代码

只需使用CUDA 11和cudnn 8.0升级到Tensorflow 2.3。 它神奇地解决了我所有的问题,现在我什至不需要config.gpu_options.allow_growth = True的解决方法。

即使使用显式的TF_FORCE_GPU_ALLOW_GROWTH=false也可以从2.2升级到2.3也解决了这个问题(至少到目前为止,我能够运行delf演示代码;没有进行任何其他测试)。

我仍在使用CUDA 10.1,Cudnn 7.6.5。

张量流2和python3是否有针对此问题的修复程序?

我有一个:
RTX 2080

我收到此消息:


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

如果您的问题与本期中所处理的问题具有相同的起源(我无法从您的报告中得知),那么可以通过阅读本文档中的前10-20个帖子轻松找到一些解决方案线。

我用这个解决了:

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

我在RTX 2080上遇到了同样的问题。然后以下代码为我工作。

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

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

谢谢大家

我认为我们现在可以停止发布allow_growth修复程序了:)

RTX 2070在这里。 正在收到此错误,但是现在运行TF_FORCE_GPU_ALLOW_GROWTH=true (正如其他评论者指出的那样,已为他们修复),将错误消息更改为内存不足错误(即使我有足够的内存):

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

但是我的GPU有8GB,在开始执行此过程之前,只有约250MB的内存正在使用。 所以我不明白,为什么它不能分配3.87GB? (减小批次大小无效;权重hdf5文件小于200MB)

TF_FORCE_GPU_ALLOW_GROWTH = true对我有用。
tf.config.experimental.set_memory_growth(gpu,True)也起作用。

这是我的配置:
GPU GTX 1650
CUDA-10-1 10.1.243-1
libcudnn7 7.6.5.32-1 + cuda10.1
Ubuntu 18.04.5 LTS

谁不能设置环境变量,可以按照https://www.tensorflow.org/guide/gpu中的建议尝试:
gpus = tf.config.experimental.list_physical_devices('GPU')
如果是gpus:
尝试:
#目前,各GPU的内存增长必须相同
对于GPU中的GPU:
tf.config.experimental.set_memory_growth(gpu,True)
logical_gpus = tf.config.experimental.list_logical_devices('GPU')
打印(len(gpus),“物理GPU”,len(logical_gpus),“逻辑GPU”)
除了RuntimeError为e:
#必须在初始化GPU之前设置内存增长
打印(e)

键入终端上提到的命令对我来说只是工作。

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

只需使用CUDA 11和cudnn 8.0升级到Tensorflow 2.3。 它神奇地解决了我所有的问题,现在我什至不需要config.gpu_options.allow_growth = True的解决方法。

似乎在tensorflow 2.3.0中注意到并解决了该问题。

  • CUDA 10.1
  • 显卡:Quadro RTX 6000
  • Tensorflow 2.2.0
  • 库顿7.6.5

同样的问题:
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.

解决方法allow_growth = True没有帮助。

将tensorflow升级到2.3.0之后,即使没有添加行allow_growth = True ,问题也消失

好的,使其在tf-nightly-gpu-2.0-preview和ipython笔记本中工作,并将其添加到我的代码中:

从tensorflow.compat.v1导入ConfigProto
从tensorflow.compat.v1导入InteractiveSession

config = ConfigProto()
config.gpu_options.allow_growth =真
会话= InteractiveSession(config = config)

在我的情况下有效

此页面是否有帮助?
0 / 5 - 0 等级