windows平台编译tensorflow v2.1 GPU C++库

准备

安装一下工具

  1. VS2017 或以上版本
  2. Python 3.6 或以上版本
  3. bazel 0.29.1 版本(tf v2.1要求不能高于这个版本)
  4. CUDA Toolkit 10.1 和 cuDNN v7.6
  5. MSYS2

开始

设置PATH环境变量

系统环境变量PATH里,添加

Bazel:为Bazel.exe所在目录

MSYS2:为\msys64\usr\bin目录

Git:为\Git\bin目录

Python: python.exe所在目录

默认安装git和python的环境变量会自动被设置。

保证MSYS2的bash.exe路径在系统bash.exe之前。

检查环境是否设置正确

where bazel.exe
where bash.exe
where git.exe
where python.exe

安装编译所需工具

pacman -s patch unzip

检出tensorflow 2.1版

https://github.com/tensorflow/tensorflow.git

开始编译

  1. 在开始菜单里找到并打开vs2017编译命令行:"x64 Native Tools Command Prompt for VS 2017"
  2. cd 到 tensorflow 源码目录
  3. 输入python configure.py,一般都用默认值,GPU版中"Do you wish to build TensorFlow with CUDA support? [y/N]:"回答y
  4. 执行bazel build --config=opt --config=v2 --config=cuda --define=no_tensorflow_py_deps=true //tensorflow:tensorflow_cc.dll
  5. 等待需要几个小时。
  6. 编译完成后tensorflow\bazel-bin\tensorflow可以看到生成的dll,其中xxx.ifso是lib文件。

出错排查

nvcc error : 'cudafe++' died with status 0xC0000005

CUDA版本不对,确定一下CUDA是否为10.1版本

fatal error C1088: Cannot flush compiler intermediate file: 'xxx' : nospace left on device

临时文件夹TEMP所在的磁盘空间不足。

error C2440: 'initializing' : cannot convert from 'initializer list' to 'xxx'

这个原因是没有使用vs2017或以上的编译器,建议使用vs2017编译命令行执行bazel。

vs2015或以下,对C++14的支持有限,即使添加bazel选项:--cxxopt=/std:c++14,也没用。

error C2061: syntax error: identifier 'Kind'

打开对应的源码文件,找到对应的代码行,在xxx::Kind前加上typename

备注

bazel默认使用用户文件夹作为编译临时目录

位置在 /Users/<用户名>/bazel<用户名>/ 请确保该分区足够大。

bazel如何使用代理服务器

添加HTTP_PROXY环境变量

setx HTTP_PROXY http://127.0.0.1:1080
setx HTTPS_PROXY https://127.0.0.1:1080

blogroll

social