Tensorflow 2.0无法使用GPU,在cuDNN中有问题吗? :未能获得卷积算法。这可能是因为cuDNN无法初始化

时间:2019-09-28 05:29:08

标签: tensorflow nvidia tensorflow2.0 cudnn

我尝试在GPU上使用tf2.0 / tf.keras CNN模型进行预测,但得到了这些错误消息。 有人可以帮我修复它吗?

**环境:

python 3.6.8

tensorflow-gpu 2.0.0-rc0

nvidia 418.x

CUDA 10.0

cuDNN 7.6 + **

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

日志:

2019-09-28 13:10:59.833892:我tensorflow / stream_executor / platform / default / dso_loader.cc:44]成功打开动态库libcublas.so.10.0 2019-09-28 13:11:00.228025:我tensorflow / stream_executor / platform / default / dso_loader.cc:44]成功打开了动态库libcudnn.so.7 2019-09-28 13:11:00.957534:E tensorflow / stream_executor / cuda / cuda_dnn.cc:329]无法创建cudnn句柄:CUDNN_STATUS_INTERNAL_ERROR 2019-09-28 13:11:00.963310:E tensorflow / stream_executor / cuda / cuda_dnn.cc:329]无法创建cudnn句柄:CUDNN_STATUS_INTERNAL_ERROR 2019-09-28 13:11:00.963416:W tensorflow / core / common_runtime / base_collective_executor.cc:216] BaseCollectiveExecutor :: StartAbort未知:无法获取卷积算法。这可能是因为cuDNN初始化失败,所以请尝试查看上面是否打印了警告日志消息。      [[{{node mobilenetv2_1.00_192 / Conv1 / Conv2D}}]] mobilenetv2_1.00_192 / block_15_expand_BN / cond / then / _630 / Const:(Const):/ job:localhost / replica:0 / task:0 / device:GPU:0 =====> GPU可用:True =====> 4个物理GPU,1个逻辑GPU

mobilenetv2_1.00_192 / block_15_expand_BN / cond / then / _630 / Const_1:(Const):/ job:localhost /副本:0 / task:0 / device:GPU:0 mobilenetv2_1.00_192 / block_15_depthwise_BN / cond / then / _644 / Const:(Const):/ job:localhost /副本:0 / task:0 / device:GPU:0 mobilenetv2_1.00_192 / block_15_depthwise_BN / cond / then / _644 / Const_1:(Const):/ job:localhost /副本:0 / task:0 / device:GPU:0 mobilenetv2_1.00_192 / block_15_project_BN / cond / then / _658 / Const:(Const):/ job:localhost /副本:0 / task:0 / device:GPU:0 mobilenetv2_1.00_192 / block_15_project_BN / cond / then / _658 / Const_1:(Const):/ job:localhost /副本:0 / task:0 / device:GPU:0 mobilenetv2_1.00_192 / block_16_expand_BN / cond / then / _672 / Const:(Const):/ job:localhost /副本:0 / task:0 / device:GPU:0 mobilenetv2_1.00_192 / block_16_expand_BN / cond / then / _672 / Const_1:(Const):/ job:localhost /副本:0 / task:0 / device:GPU:0 mobilenetv2_1.00_192 / block_16_depthwise_BN / cond / then / _686 / Const:(Const):/ job:localhost /副本:0 / task:0 / device:GPU:0 mobilenetv2_1.00_192 / block_16_depthwise_BN / cond / then / _686 / Const_1:(Const):/ job:localhost /副本:0 / task:0 / device:GPU:0 mobilenetv2_1.00_192 / block_16_project_BN / cond / then / _700 / Const:(Const):/ job:localhost /副本:0 / task:0 / device:GPU:0 mobilenetv2_1.00_192 / block_16_project_BN / cond / then / _700 / Const_1:(Const):/ job:localhost /副本:0 / task:0 / device:GPU:0 mobilenetv2_1.00_192 / Conv_1_bn / cond / then / _714 / Const:(Const):/ job:localhost /副本:0 / task:0 / device:GPU:0 mobilenetv2_1.00_192 / Conv_1_bn / cond / then / _714 / Const_1:(Const):/ job:localhost /副本:0 /任务:0 /设备:GPU:0 追溯(最近一次通话):   文件“ NSFW_Server.py”,第162行,在     model.predict(初始张量)   预测文件“ /usr/local/lib/python3.6/dist-packages/tensorflow_core/python/keras/engine/training.py”,第915行     use_multiprocessing = use_multiprocessing)   预测中的文件“ /usr/local/lib/python3.6/dist-packages/tensorflow_core/python/keras/engine/training_arrays.py”,第722行     回调=回调)   在model_iteration中的第393行,文件“ /usr/local/lib/python3.6/dist-packages/tensorflow_core/python/keras/engine/training_arrays.py”     batch_outs = f(ins_batch)   调用中的文件“ /usr/local/lib/python3.6/dist-packages/tensorflow_core/python/keras/backend.py”,第3625行     输出= self._graph_fn(* converted_inputs)   调用中的文件“ /usr/local/lib/python3.6/dist-packages/tensorflow_core/python/eager/function.py”,第1081行     返回self._call_impl(args,kwargs)   _call_impl中的文件“ /usr/local/lib/python3.6/dist-packages/tensorflow_core/python/eager/function.py”,行1121     返回self._call_flat(args,self.captured_inputs,cancel_manager)   _call_flat中的文件“ /usr/local/lib/python3.6/dist-packages/tensorflow_core/python/eager/function.py”,第1224行     ctx,args,cancelation_manager = cancellation_manager)   调用中的文件“ /usr/local/lib/python3.6/dist-packages/tensorflow_core/python/eager/function.py”,第511行     ctx = ctx)   文件“ /usr/local/lib/python3.6/dist-packages/tensorflow_core/python/eager/execute.py”,第67行,在quick_execute中     six.raise_from(core._status_to_exception(e.code,message),None)   在第三行的“ _”文件“”中 tensorflow.python.framework.errors_impl.UnknownError:无法获取卷积算法。这可能是因为cuDNN初始化失败,所以请尝试查看上面是否打印了警告日志消息。      [[节点mobilenetv2_1.00_192 / Conv1 / Conv2D(在/usr/local/lib/python3.6/dist-packages/tensorflow_core/python/framework/ops.py:1751)中定义)] [Op:__ inference_keras_scratch_graph_10727]

函数调用堆栈: keras_scratch_graph

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

相关代码:

如果名称 ==“ 主要”:

print("=====>GPU Available: ", tf.test.is_gpu_available())
tf.debugging.set_log_device_placement(True)

gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus:
    try:
        # Currently, memory growth needs to be the same across GPUs

        tf.config.experimental.set_visible_devices(gpus[0], 'GPU')
        tf.config.experimental.set_memory_growth(gpus[0], True)
        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)

paras_path = "./paras/{}".format(int(2011))
model = tf.keras.experimental.load_from_saved_model(paras_path)
initial_tensor = np.zeros((1, INPUT_SHAPE, INPUT_SHAPE, 3))
model.predict(initial_tensor)

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

请帮助,这困扰了我几天...

3 个答案:

答案 0 :(得分:2)

您必须检查CUDA + CUDNN + TensorFlow的版本是否正确(还要确保已安装所有版本。

下面提供了两个运行配置的示例

例如。 Cuda 10.0 + CuDNN 7.6.3 + / TensorFlow 1.13 / 1.14 / TensorFlow 2.0。

Eg2 Cuda 9 + CuDNN 7.0.5 + TensorFlow 1.10有效

通常,当您安装了不兼容的TensorFlow / CuDNN版本时,会出现此错误。就我而言,这是当我尝试使用较旧的TensorFlow和较新版本的CuDNN时出现的。

答案 1 :(得分:0)

检查此TensorFlow GPU指令page上适用于您的操作系统的指令。它在Ubuntu 16.04.6 LTS和Tensorflow 2.0上为我解决了问题

答案 2 :(得分:0)

对于那些遇到上述错误问题的人(对于Windows平台),我只是通过安装与系统中已安装的CUDA兼容的CuDNN版本进行排序。

    • 要检查 CUDA 版本,请运行 NVCC --version
    • 下载合适的版本后,从 zip 文件中提取文件夹。
    • 转到解压文件夹的 bin 文件夹。复制 cudnn64:7.dll 并将其粘贴到 CUDA 的 bin 文件夹中。就我而言,Cuda 的安装位置是 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\bin
    • 这很可能会解决问题。

我的系统详细信息:

  1. Windows 10
  2. CUDA 10.0
  3. TensorFlow 2.0
  4. GPU - Nvidia GTX 1060

我还发现这个博客 Installing TensorFlow with CUDA and GPU support on Windows 10. 非常有用。