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。
12 条评论
2025年10月新盘 做第一批吃螃蟹的人coinsrore.com
新车新盘 嘎嘎稳 嘎嘎靠谱coinsrore.com
新车首发,新的一年,只带想赚米的人coinsrore.com
新盘 上车集合 留下 我要发发 立马进裙coinsrore.com
做了几十年的项目 我总结了最好的一个盘(纯干货)coinsrore.com
新车上路,只带前10个人coinsrore.com
新盘首开 新盘首开 征召客户!!!coinsrore.com
新项目准备上线,寻找志同道合 的合作伙伴coinsrore.com
新车即将上线 真正的项目,期待你的参与coinsrore.com
新盘新项目,不再等待,现在就是最佳上车机会!coinsrore.com
新盘新盘 这个月刚上新盘 新车第一个吃螃蟹!coinsrore.com
2025年10月新盘 做第一批吃螃蟹的人coinsrore.com
新盘 上车集合 留下 我要发发 立马进裙coinsrore.com
字里行间流露出真挚的情感,让人感同身受,共鸣不已。
?国际化视角评语?
选材新颖独特,通过细节描写赋予主题鲜活生命力。
博主太厉害了!
博主太厉害了!
文章的确不错啊https://www.cscnn.com/
不错不错,我喜欢看 https://www.ea55.com/
怎么收藏这篇文章?
看的我热血沸腾啊https://www.jiwenlaw.com/