windows下编译GPU版本的tensorflow
本文参考CSDN一篇文章完成编译,博主只是完成1.6版本以上的编译填坑以及Debug方面的填坑。
1.环境准备
- 由于有些网站和支持库的因素,需要自行准备X墙工具
- vs2015及其以上版本(理论支持,本篇文章使用vs2015)
- swig,官网是这里,注意下载windows版本的(含有.exe文件),解压即可
- python,建议3.6或以上版本
- CMake,官网下载安装,安装完成后添加到环境变量里(…/CMake/bin)
- Git,官网下载安装,安装完成后添加到环境变量里(…/Git/bin)
- cuda及cudnn,本文编译的是最新的1.10版本tf,所以cuda要求9.0,cudnn要求7,本次编译版本为:cuda9.0/CUDNN 7.2.1,配置方法自行网上搜索(注意:这里有个坑,TF1.11开始不支持Cmake编译推荐使用Bazel编译,目前博主编译的dll文件没能在windows下成功运行和编译,在GitHub提出的Issue官方也还尚未解决,最近进展点击进去查看,所以本教程所支持的TF最高版本只在1.10)
矩阵运算库,这里选择的是eigen,下载最新的版本,解压后添加到环境变量里(…/eigen3.3.4)
2.下载tensorflow源码,配置CMakeLists.txt
打开命令提示符,cd到专门的路径下,输入
git clone -b r1.10 https://github.com/tensorflow/tensorflow.git
下载好tensorflow源码后,找到tensorflow/contrib/cmake/CMakeLists.txt,搜索"tensorflow_OPTIMIZE_FOR_NATIVE_ARCH"找到后做出如下修改
if (tensorflow_OPTIMIZE_FOR_NATIVE_ARCH) include(CheckCXXCompilerFlag) CHECK_CXX_COMPILER_FLAG("-march=native" COMPILER_OPT_ARCH_NATIVE_SUPPORTED) if (COMPILER_OPT_ARCH_NATIVE_SUPPORTED) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native") else() CHECK_CXX_COMPILER_FLAG("/arch:AVX" COMPILER_OPT_ARCH_AVX_SUPPORTED) if(COMPILER_OPT_ARCH_AVX_SUPPORTED) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:AVX") endif() endif() endif()
3.开始编译lib和dll
首先进入tensorflow/contrib/cmake目录下,新建一个build文件夹。然后打开命令提示符,输入cmake-gui,配置相关的路径,再configure(选择vs2015的那个vc14 64位编译器),即可得到下图
打开vs2015 x86 x64兼容工具命令,如图
右键-以管理员身份运行,先cd到tensorflow/contrib/cmake/build目录下,再输入以下内容进行configurecmake .. -A x64 -DCMAKE_BUILD_TYPE=Realse -T host=x64 -DSWIG_EXECUTABLE=D:/lib/swigwin-3.0.12/swig.exe -DPYTHON_EXECUTABLE=C:/Users/tao/AppData/Local/Programs/Python/python35/python.exe -DPYTHON_LIBRARIES=C:/Users/tao/AppData/Local/Programs/Python/python35/libs/python35.lib -Dtensorflow_ENABLE_GPU=ON -Dtensorflow_ENABLE_GRPC_SUPPORT=OFF -Dtensorflow_BUILD_SHARED_LIB=ON
说明一下需要自行修改的参数,SWIG_EXECUTABLE是swig.exe所在路径,PYTHON_EXECUTABLE和PYTHON_LIBRARIES分别是python的exe和lib所在路径,这些都需要自己配,而且路径不能含有空格或者中文字符。后面tensorflow_ENABLE_GRPC_SUPPORT涉及到tensorflow线上部署,默认是ON的状态。另外要想指定编译其它内容,可以参考前面cmake-gui的那张图,配置的格式就是"-D+xxx=ON/OFF"。修改完这段话后,即可执行,等待configure done。
configure完成之后,就要开始正式编译动态库了。此时需要打开你的x墙工具,因为编译的过程中,会从网上下载几个文件,虽然都不大,但它们是存储在含有google的网址内的。接下来,在刚才的命令行窗口继续输入
MSBuild /p:Configuration=Release /p:Platform=x64 ALL_BUILD.vcxproj
如果想要编译Debug版本的TF,则需要修改一下
编译Debug版本TensorFlow.dll
修改 tensorflow\contrib\cmake\tools\create_def_file.py 中的 EXCLUDE_RE 变量。
EXCLUDE_RE = re.compile(r"RTTI|deleting destructor|::internal::|::`anonymous namespace'::|<lambda_[0-9a-z]+>|"
r"std::_Vector_iterator<|std::_Vector_const_iterator<|std::_Vector_alloc<|"
r"std::_Deque_iterator<|std::_Deque_alloc<|"
r"std::_Tree_iterator<|std::_Tree_const_iterator<|std::_Tree_unchecked_const_iterator<|std::_Tree_comp_alloc<|std::_Tree_node<|"
r"std::_List_iterator<|std::_List_const_iterator<|std::_List_unchecked_const_iterator<|std::_List_alloc<|"
r"std::_Iterator012<|std::_Compressed_pair<")
接下来就是漫长的等待了,在我的i5电脑下,编了大概六小时才完成,期间电脑会特别卡(vs默认是多线程编译的)。注意最后不能有错误,否则无法顺利生成tensorflow.lib和tensorflow.dll。最终得到的lib和dll是在tensorflow/contrib/cmake/build/Release目录下,这里提供我编译的一个版本。这里放出一份原博主编译好的tf1.6头文件和dll以及lib。
3 comments
不错不错,我喜欢看 https://www.ea55.com/
怎么收藏这篇文章?
看的我热血沸腾啊https://www.jiwenlaw.com/