如何使用 CUDNN 5.0 构建 Tensorflow 1.4?

How to build Tensorflow 1.4 with CUDNN 5.0?

我正在尝试在 Centos 7 上使用 CUDA 8.0 和 CUDNN 5.0.5 从源安装 Tensorflow 1.4。文档中指出它应该与 CUDNN 3 及更高版本一起使用。我在 Python 3.4.5 的虚拟环境中工作,使用 Bazel 0.7.0,GCC 4.9。在配置过程中,我将 CUDNN 版本设置为 5.0.5,并且找到了库。

不幸的是,它不起作用并以错误结束,该错误似乎表明需要 CUDNN v6(我可能对错误原因有误)。

这是我正在使用的命令:

bazel build --config=opt --config=cuda --config=mkl //tensorflow/tools/pip_package:build_pip_packag

这是错误:

ERROR: /home/localuser/tensorflow/tensorflow/stream_executor/BUILD:52:1: C++ compilation of rule '//tensorflow/stream_executor:cuda_platform' failed (Exit 1).
tensorflow/stream_executor/cuda/cuda_dnn.cc: In member function 'cudnnStatus_t perftools::gputools::cuda::wrap::WrapperShim__cudnnSetRNNDescriptor_v6::operator()(perftools::gputools::cuda::CUDAExecutor*, Args ...)':
tensorflow/stream_executor/cuda/cuda_dnn.cc:140:30: error: '::cudnnSetRNNDescriptor_v6' has not been declared
       cudnnStatus_t retval = ::__name(args...);                    \
                              ^
tensorflow/stream_executor/cuda/cuda_dnn.cc:235:3: note: in expansion of macro 'PERFTOOLS_GPUTOOLS_CUDNN_WRAP'
   __macro(cudnnSetRNNDescriptor_v6)                           \
   ^
tensorflow/stream_executor/cuda/cuda_dnn.cc:240:1: note: in expansion of macro 'CUDNN_DNN_ROUTINE_EACH_R5'
 CUDNN_DNN_ROUTINE_EACH_R5(PERFTOOLS_GPUTOOLS_CUDNN_WRAP)

这里是配置的结果 (.tf_configure.bazelrc):

build --action_env PYTHON_BIN_PATH="/home/localuser/venvs/tensorflow14-opt/bin/python"
build --action_env PYTHON_LIB_PATH="/home/localuser/venvs/tensorflow14-opt/lib/python3.4/site-packages"
build --define PYTHON_BIN_PATH="/home/localuser/venvs/tensorflow14-opt/bin/python"
build --define PYTHON_LIB_PATH="/home/localuser/venvs/tensorflow14-opt/lib/python3.4/site-packages"
build --force_python=py3
build --host_force_python=py3
build --python_path="/home/localuser/venvs/tensorflow14-opt/bin/python"
test --force_python=py3
test --host_force_python=py3
test --define PYTHON_BIN_PATH="/home/localuser/venvs/tensorflow14-opt/bin/python"
test --define PYTHON_LIB_PATH="/home/localuser/venvs/tensorflow14-opt/lib/python3.4/site-packages"
run --define PYTHON_BIN_PATH="/home/localuser/venvs/tensorflow14-opt/bin/python"
run --define PYTHON_LIB_PATH="/home/localuser/venvs/tensorflow14-opt/lib/python3.4/site-packages"
build:gcp --define with_gcp_support=true
build:hdfs --define with_hdfs_support=true
build:s3 --define with_s3_support=true
build:xla --define with_xla_support=true
build:gdr --define with_gdr_support=true
build:verbs --define with_verbs_support=true
build --action_env TF_NEED_OPENCL="0"
build --action_env TF_NEED_CUDA="1"
build --action_env CUDA_TOOLKIT_PATH="/usr/local/cuda"
build --action_env TF_CUDA_VERSION="8.0"
build --action_env CUDNN_INSTALL_PATH="/usr/local/cuda-8.0"
build --action_env TF_CUDNN_VERSION="5.0.5"
build --action_env TF_CUDA_COMPUTE_CAPABILITIES="3.7,3.7,3.7,3.7"
build --action_env TF_CUDA_CLANG="0"
build --action_env GCC_HOST_COMPILER_PATH="/opt/rh/devtoolset-3/root/usr/bin/gcc"
build --config=cuda
test --config=cuda
build:opt --cxxopt=-march=native --copt=-march=native
build:mkl --define using_mkl=true
build:mkl -c opt
build:mkl --copt="-DEIGEN_USE_VML"
build:monolithic --define framework_shared_object=false
build --define framework_shared_object=true

我可以做些什么来使用 CUDNN 5 安装 TF 1.4 吗?

Tensorflow r1.4 发行说明建议使用 cuDNN6。您可以找到所有发布信息 here.

All our prebuilt binaries have been built with CUDA 8 and cuDNN 6. We anticipate releasing TensorFlow 1.5 with CUDA 9 and cuDNN 7.

r1.4 之前的 cuDNN 5 工作正常。

问题是 Tensorflow 中的一个错误,他们确实在 V5 构建中使用了 CUDNN V6 函数。现在通过将 PR #12355 应用到分支 1.4 来解决这个问题(PR 仅适用于 master)。

Tensorflow 1.4 中的一些模块不能很好地与 cuda 库配合使用,我建议您使用较旧的 Tensorflow 版本 1.2.1 或 1.3。它对我有用。