我尝试在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)
================================================ ===========
请帮助,这困扰了我几天...
答案 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版本进行排序。
NVCC --version
。cudnn64:7.dll
并将其粘贴到 CUDA 的 bin 文件夹中。就我而言,Cuda 的安装位置是 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\bin
。我的系统详细信息:
我还发现这个博客 Installing TensorFlow with CUDA and GPU support on Windows 10. 非常有用。