【问题标题】:Can't make TensorFlow 2.4.1 (CPP) compile on Windows无法在 Windows 上编译 TensorFlow 2.4.1 (CPP)
【发布时间】:2021-02-27 14:04:39
【问题描述】:

我正在尝试在 Windows 10 上构建 TensorFlow 2.4.1 C++ API,但遇到了问题。

到目前为止我做了什么:

  1. 从官方 repo 下载 TensorFlow Source https://github.com/tensorflow/tensorflow 并切换到官方v2.4.1标签
  2. 下载并安装 Python 3.6.8 x64
  3. 使用 python 3.6.8 创建了一个虚拟环境
  4. 根据数据here创建并安装requirements.txt
  5. 下载并安装 CUDA 11.0 和 cuDNN v8.0.4.30(适用于 CUDA 11)
  6. 已下载并安装 msys2 并将其位置设置在 PATH 中
  7. 下载并安装 bazel (3.1.0),因为它是最新的条目here

然后我用python configure.py 运行配置过程 我为具有 GPU 支持的 C++ 构建 (tensorflow_cc) 进行了配置 在这里,我遇到了一些问题,显然在配置过程中,windows 样式的反斜杠被接受为有效输入,但是当您实际运行 bazel 编译时,它们会导致问题,因此我重新运行配置以提供 linux 样式的反斜杠。至此,CUDA 和 cuDNN 被成功检测并开始编译。

下面是我.tf_configure.bazelrc的全部内容

build --action_env PYTHON_BIN_PATH="D:/code/sdk/tensorflow/venv/Scripts/python.exe"
build --action_env PYTHON_LIB_PATH="D:/code/sdk/tensorflow/venv/lib/site-packages"
build --python_path="D:/code/sdk/tensorflow/venv/Scripts/python.exe"
build --config=xla
build --action_env TF_CUDA_VERSION="11.0"
build --action_env TF_CUDNN_VERSION="8.0.4"
build --action_env TF_CUDA_PATHS="C:/Program Files/NVIDIA GPU Computing 
Toolkit/CUDA/v11.0,D:/code/sdk/cudnn-11.0-windows-x64-v8.0.4.30/cuda"
build --action_env CUDA_TOOLKIT_PATH="C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v11.0"
build --action_env TF_CUDA_COMPUTE_CAPABILITIES="5.0"
build --config=cuda
build:opt --copt=/arch:AVX
build:opt --host_copt=/arch:AVX
build:opt --define with_default_optimizations=true
build --define=override_eigen_strong_inline=true
test --flaky_test_attempts=3
test --test_size_filters=small,medium
test:v1 --test_tag_filters=-benchmark-test,-no_oss,-no_windows,-no_windows_gpu,-no_gpu,-oss_serial
test:v1 --build_tag_filters=-benchmark-test,-no_oss,-no_windows,-no_windows_gpu,-no_gpu
test:v2 --test_tag_filters=-benchmark-test,-no_oss,-no_windows,-no_windows_gpu,-no_gpu,-oss_serial,- 
v1only
test:v2 --build_tag_filters=-benchmark-test,-no_oss,-no_windows,-no_windows_gpu,-no_gpu,-v1only
build --action_env TF_CONFIGURE_IOS="0"

编译大约 20 分钟,但它失败并出现以下错误:

ERROR: D:/code/sdk/tensorflow/tensorflow/stream_executor/cuda/BUILD:366:1: C++ compilation of rule '//tensorflow/stream_executor/cuda:cudnn_stub' failed (Exit 2): python.exe failed: error executing command

而命令执行失败的原因是

bazel-out/x64_windows-opt/bin/external/local_config_cuda/cuda/_virtual_includes/cudnn_header\third_party/gpus/cudnn/cudnn.h(61): fatal error C1083: Cannot open include file: 'cudnn_ops_infer.h': No such file or directory

在这里我想知道发生了什么?我已经提供了通往 cuDNN 的路径,但显然 bazel 并不真正了解它,尽管它之前承认我提供的路径是正确的。我是否缺少一些需要设置以指示 cuDNN 在哪里的环境变量? 有人在 Windows 上构建过 TF C++ v2.4.1 吗?网上的信息太少了,甚至官方页面也没有提到 Windows 版本。只有 Linux 和 Mac...

【问题讨论】:

    标签: c++ windows tensorflow bazel cudnn


    【解决方案1】:

    由于我的想法快用完了,我决定去看看 CUDA 的 Bazel 构建脚本

    <REPO>\tensorflow\third_party\gpus\cuda_configure.bzl我看到cuDNN路径是从环境变量CUDNN_INSTALL_PATH读取的 如果不存在,它将默认为/usr/local/include?

    不管怎样,试过set CUDNN_INSTALL_PATH=D:/code/sdk/cudnn-11.0-windows-x64-v8.0.4.30/cuda 和 WOOHOO 编译成功了!

    (专业提示:设置 env var 不带任何引号并使用 linux 风格的斜杠...)

    【讨论】:

    • 关于如何为 C++ 编译 tf 2.4.1 的分步说明会很有帮助。如果你能提供步骤就更好了。
    猜你喜欢
    • 2015-04-24
    • 2016-05-25
    • 2021-06-11
    • 2011-12-27
    • 1970-01-01
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多