简体   繁体   中英

error building tensorflow with cuda support on windows with bazel

I'm trying to compile TensorFlow with CUDA support on Windows 10 64bit via bazel. This is how my system is set-up:

  • Windows 10 64bit
  • Nvidia GeForce 1050 with CUDA capabilities 6.1
  • CUDA Toolkit v8.0 -> C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v8.0
  • cuDNN v6.0 -> C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v8.0
  • bazel 0.7.0 (renamed as bazel.exe) -> C:\\Users\\eliam\\bazel\\0.7.0
  • MSYS2 64bit
  • TensorFlow master branch -> C:\\Users\\eliam\\tensorflow

I've also already set these environment variables:

BAZEL_PYTHON=C:/Users/eliam/Miniconda3
BAZEL_SH=C:/msys64/usr/bin/bash.exe
BAZEL_VC=C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC
BAZEL_VS=C:/Program Files (x86)/Microsoft Visual Studio 14.0
CUDA_PATH=C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v8.0
CUDA_TOOLKIT_PATH=C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v8.0
LD_LIBRARY_PATH=C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v8.0/lib/x64
PYTHON_BIN_PATH=C:/Users/eliam/Miniconda3/python.exe
PYTHON_PATH=C:/Users/eliam/Miniconda3/python.exe
PYTHONPATH=C:/Users/eliam/Miniconda3/python.exe
PYTHON_LIB_PATH=C:/Users/eliam/Miniconda3/lib/site-packages
PATH=C:\Users\eliam\bazel\0.7.0;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\bin;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\include;%PATH%

Bazel is set up with all the steps required by its website ( https://docs.bazel.build/versions/master/install-windows.html )

MSYS2 is set up with all the steps required by its website ( http://www.msys2.org/ )

I manage to complete the configure.py without issues.

python ./configure.py
You have bazel 0.7.0 installed.
Do you wish to build TensorFlow with XLA JIT support? [y/N]:
No XLA JIT support will be enabled for TensorFlow.

Do you wish to build TensorFlow with GDR support? [y/N]:
No GDR support will be enabled for TensorFlow.

Do you wish to build TensorFlow with VERBS support? [y/N]:
No VERBS support will be enabled for TensorFlow.

Do you wish to build TensorFlow with CUDA support? [y/N]: y
CUDA support will be enabled for TensorFlow.

Please specify the CUDA SDK version you want to use, e.g. 7.0. [Leave empty to default to CUDA 8.0]:


Please specify the cuDNN version you want to use. [Leave empty to default to cuDNN 6.0]:


Please specify the location where cuDNN 6 library is installed. Refer to README.md for more details. [Default is C:/Program Files/NVIDIA                 GPU Computing Toolkit/CUDA/v8.0]:


Please specify a list of comma-separated Cuda compute capabilities you want to build with.
You can find the compute capability of your device at: https://developer.nvidia.com/cuda-gpus.
Please note that each additional compute capability significantly increases your build time and binary size. [Default is: 3.5,5.2]


Do you wish to build TensorFlow with MPI support? [y/N]:
No MPI support will be enabled for TensorFlow.

Please specify optimization flags to use during compilation when bazel option "--config=opt" is specified [Default is -march=native]:


Add "--config=mkl" to your bazel command to build with MKL support.
Please note that MKL on MacOS or windows is still not supported.
If you would like to use a local MKL instead of downloading, please set the environment variable "TF_MKL_ROOT" every time before build.
Configuration finished

After that I set some other environment variables with the following command:

set BUILD_OPTS='--cpu=x64_windows_msvc --host_cpu=x64_windows_msvc --copt=/w --verbose_failures --experimental_ui --config=cuda'

In order to prevent this error

$ bazel build -c opt --config=cuda --verbose_failures --subcommands //tensorflow/cc:tutorials_example_trainer
..............
WARNING: The lower priority option '-c opt' does not override the previous value '-c opt'.
____Loading package: tensorflow/cc
____Loading package: @local_config_cuda//crosstool
____Loading package: @local_config_xcode//
ERROR: No toolchain found for cpu 'x64_windows'. Valid cpus are: [
  k8,
  piii,
  arm,
  darwin,
  ppc,
].
____Elapsed time: 10.196s

Then I start bazel build, using the following command

bazel build -c opt $BUILD_OPTS //tensorflow/tools/pip_package:build_pip_package

This is where the problems begin. This is a link to the complete log.

Any idea why?

The important part of the log is this:

ERROR: C:/msys64/home/eliam/tensorflow/tensorflow/stream_executor/BUILD:52:1: C++ compilation of rule '//tensorflow/stream_executor:cuda_platform' failed (Exit 2).
tensorflow/stream_executor/cuda/cuda_platform.cc(48): error C3861: 'strcasecmp': identifier not found
tensorflow/stream_executor/cuda/cuda_platform.cc(50): error C3861: 'strcasecmp': identifier not found
tensorflow/stream_executor/cuda/cuda_platform.cc(52): error C3861: 'strcasecmp': identifier not found
Target //tensorflow/cc:tutorials_example_trainer failed to build

tensorflow/stream_executor/cuda/cuda_platform.cc(48) has strcmp in it.

The compiler complains about strcasecmp , therefore something must be #define 'ing strcmp to strcasecmp . Whatever the case, could you run the build with --verbose_failures ? That'll show the command Bazel was executing. That may hint on what's happening.

Also, I see this in your envvars:

BAZEL_VC=C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC
BAZEL_VS=C:/Program Files (x86)/Microsoft Visual Studio 14.0

You only need to set one of these. I recommend keeping BAZEL_VC since that points to a newer compiler. I admit I don't know what happens when both envvars are defined, whether Bazel prefers one to the other. But I do know it works fine with just one of them defined.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM