如何在windows环境中使用vs2015编译tensorflow v1.5
tensorflow即将发布1.5版本,作为工业界应用最广的深度学习框架,它以其强大的泛用性和丰富的社区环境而广受好评。tensorflow1.5新性能。
但是tfboys/tfgirls在深入使用后都会遇到不同的问题,其中最常遇见的有:
1. 如何在c++代码中使用tensorflow?
2. 如何使用特定的CUDA版本编译tensorflow?
3. 我已经训练好了一个模型,如何在windows环境下复用?
这篇文章旨在解决1,2问题。3问题以后填坑。
准备工作
老规矩,首先是编译环境:
OS: windows 10
IDE: Vs 2015
其次,需要准备的软件有:
CMAKE:3.10.1
SWIG:3.0.12(请下载预编译好的版本)
CUDA:9.1
CUDNN:7
翻墙软件(没有也可以,但我没试过)
以上软件的安装方法请自行百度。对于不想自己编译的童鞋们。文章最末有下载链接,是我编译好的tensorflow1.5-release包(需要cuda9.1+cudnn7),其中包括lib和dll(c++),whl(python)
编译过程
获取代码
首先,到github的tensorflow项目中下载tensorflow代码(熟悉git的同学可以直接使用clone)
获取代码以后,你会得到这样一个工程
预编译工程(此步骤熟悉cmake的同学可以直接命令行)
打开CMAKE软件,设置源代码路径为:tensorflow/contrib/cmake,需要编译的代码放到自己想要的位置,点击config,选择vs2015 win64原生编译工具。此时CMAKE会报错:Could NOT find SWIG (missing: SWIG_EXECUTABLE SWIG_DIR)
勾选tensorflwo_ENABLE_GPU(此项开启GPU支持),tensorflwo_BUILD_SHARED_LIB(此项使工程中添加tensorflow动态库工程),并设置CUDA和CUDNN版本。
注意1:CUDA版本设置时9.1不需要写成91。
注意2:路径中不要包含中文上述步骤完毕,点击config,你将会得到一个这样的界面。
然后点击generate生成工程。
生成完的工程是这样的:
编译前的准备(如果漏掉某一步骤,可能出错)
1.在环境变量中加入PreferredToolArchitecture=x64
2.你需要更改数据格式,找到
re2\src\re2\re2\testing\search_test.cc和re2\src\re2\re2\testing\re2_test.cc
文件,将其编码方式改为ANSI。
3.你需要先编译nsync\src\nsync\nsync.sln和protobuf\src\protobuf\protobuf.sln
工程。具体方法为:使用vs2015打开相应sln工程后,选择目标平台(我选择了Release/x64),右键all_build项目,选择build。
4.打开翻墙工具(如果没有,请参照问题二处理方式)。打开cmd,输入ping google.com,如果成功,那么设置代理完成。编译主工程
在编译完的工作目录中找到tensorflow.sln工程,使用vs2015打开。
可以看到一共250个项目,其中,最重要的两个项目分别是tensorflow和tf_python_build_pip_package。
找到tensorflow和tf_python_build_pip_package项目(或者直接选择ALL_BUILD,编译器会按顺序编译所有项目),选择目标平台后,右键build,等待1~2小时,项目就会成功编译好。
完成后,你在release中会发现:
在tf_python/dist中会发现:
注:whl文件使用方法:cmd输入pip install **.whl
编译中常见的问题
cmd.exe退出
cmd.exe退出。 Faltal Error “compiler is out of heap space”
请换成64位编译器,参见“编译前的准备/1.”
常量中有换行符… search_test.cc/re2_test.cc
编码问题,参见“编译前的准备/2.”未找到nsyn.lib/protobuf.lib
参见“编译前的准备/3.”unable to access https://boringssl.googlesource.com/boringssl
带google的网址国内用不了,需翻墙。参照“编译前的准备/4.
这里(密码:qwj6)是我预先编译好的DLL和whl,环境是vs2015/Release/x64+cuda9.1+cudnn7。
最后祝您身体健康,再见!