准备
安装一下工具
- VS2017 或以上版本
- Python 3.6 或以上版本
- bazel 0.29.1 版本(tf v2.1要求不能高于这个版本)
- CUDA Toolkit 10.1 和 cuDNN v7.6
- MSYS2
开始
设置PATH环境变量
系统环境变量PATH里,添加
Bazel:为Bazel.exe所在目录
MSYS2:为
Git:为
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
开始编译
- 在开始菜单里找到并打开vs2017编译命令行:"x64 Native Tools Command Prompt for VS 2017"
- cd 到 tensorflow 源码目录
- 输入python configure.py,一般都用默认值,GPU版中"Do you wish to build TensorFlow with CUDA support? [y/N]:"回答y
- 执行bazel build --config=opt --config=v2 --config=cuda --define=no_tensorflow_py_deps=true //tensorflow:tensorflow_cc.dll
- 等待需要几个小时。
- 编译完成后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默认使用用户文件夹作为编译临时目录
位置在
bazel如何使用代理服务器
添加HTTP_PROXY环境变量
setx HTTP_PROXY http://127.0.0.1:1080
setx HTTPS_PROXY https://127.0.0.1:1080