Win10 bazel源码编译Tensorflow_GPU全过程(自己已经编译成功了)

最近在工作中要做tensorflow模型进行8Bit量化,上网搜了一下需要对tensorflow源码进行编译,然后不知不觉进入了深坑,网上博客各种看,看得那叫个眼睛疼,然后一步步实现,到最后都编译失败,那真心叫个酸爽,业界良心呐!看到这篇博客的你是不是正打算入坑呢?抑或是在坑里还没爬出来呢?来吧!开始搬砖……

先放上成功编译的结果,信心是不是爆棚了呢

(1)安装VisualStudio2015_R3版本,下载地址:

https://my.visualstudio.com/Downloads?q=visual%20studio%202015&wt.mc_id=o~msft~vscom~older-downloads

安装目录:C:\Program Files (x86)\Microsoft Visual Studio 14.0

特别注意:确定安装的是VisualStudio2015_R3版本,其他版本很有可能tensorflow_gpu源码编译不通过。

(2)安装CUDA与cudnn,下载网址:

https://developer.nvidia.com/cuda-downloads?target_os=Windows&target_arch=x86_64&target_version=10

我安装的CUDA版本是9.0.176,cudnn的版本是7.1

安装目录:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0

特别注意:安装完CUDA后,将cudnn中的cudnn64_7.dll放入CUDA安装目录下对应的bin文件夹,将cudnn中的cudnn.lib放入CUDA安装目录下对应的lib文件夹,将cudnn中的cudnn.h放入CUDA安装目录下对应的include文件夹。

(3)安装Anaconda3下载网址:https://www.anaconda.com/distribution/

安装目录:C:\Anaconda3

安装完毕后,打开桌面开始,寻找到Anaconda3(64-bit),打开anaconda Navigator,点击create,创造工作环境,命名为tensorflow_XX,选择python3.6,创建完毕后,open terminal,

安装依赖包:

pip3 install six numpy wheel

pip3 install keras_applications==1.0.6 --no-deps

pip3 install keras_preprocessing==1.0.5 --no-deps

(4)安装MSYS2x64,下载网址:https://www.msys2.org/

安装目录:C:\Bin

特别注意:安装完毕后,打开桌面开始,寻找到MSYS2 64bit,用管理员身份打开MSYS2 MinGW 64-bit,输入pacman –Syu,需要安装最新的依赖包(这个地方网速决定能否更新成功),输入pacman –Su,输入pacman –S patch unzip

直到前两个命令返回“今日无事可做”的时候,才意味着更新成功,否则就不断更新,必要时翻墙吧,安装完毕后记得将C:\Bin\usr\bin加入电脑环境path中

(5)安装bazel,下载网址:https://github.com/bazelbuild/bazel/releases

特别注意:bazel的版本选择直接决定tensorflow能否被成功编译,我选择的是0.19.0版本。

解压后出现bazel.exe文件,我将其放入C:\Bin目录下,然后加入电脑环境path中,

新建系统变量,变量名BAZEL_VC,

变量值浏览目录C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC

新建系统变量,变量名BAZEL_SH,变量值浏览文件C:\Bin\usr\bin\bash.exe

(6)安装tensorflow_gpu,下载网址:https://github.com/tensorflow/tensorflow/releases

特别注意:tensorflow版本的选择直接决定bazel能否成功编译,我选择的是1.10.0版本

我解压后放入C:\Users\Administrator\tensorflow-1.10.0

(7)打开桌面开始,寻找到Anaconda3(64-bit),打开anaconda Navigator,点击tensorflow_XX/ open terminal,输入cd C:\Users\Administrator\tensorflow-1.10.0

进入tensorflow-1.10.0文件夹后,输入python configure.py

输出:

...

You have bazel 0.19.0 installed.Please specify the location of python. 
[Default is C:\Anaconda3\envs\tensorflow110\python.exe]:
***

一路回车

***

Do you wish to build TensorFlow with CUDA support? [y/N]:

输入y回车

。。。

Please specify the CUDA SDK version you want to use. [Leave empty to default to CUDA 9.0]:

。。。

因为我安装的是9.0.167版本,

故而输入9.0 回车

。。。

Please specify the location where CUDA 9.0 toolkit is installed. Refer to README.md for more details. [Default is C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v9.0]:

。。。

输入回车

。。。

Please specify the cuDNN version you want to use. [Leave empty to default to cuDNN 7.0]:

。。。

因为我安装的是7.0版本,

故而输入7.0 回车

。。。

Please specify the location where cuDNN 7 library is installed. Refer to README.md for more details. [Default is C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v9.0]:

。。。

回车

。。。

Please specify a list of comma-separated Cuda compute capabilities you want to build with.You can find the compute capability of your device at: https://developer.nvidia.com/cuda-gpus.Please note that each additional compute capability significantly increases your build time and binary size. [Default is: 3.5,7.0]:

。。。

因为我的GPU是1060故而,输入6.1回车

可通过网址https://developer.nvidia.com/cuda-gpus.  查询自己GPU所对应的数值

。。。

Please specify optimization flags to use during compilation when bazel option "--config=opt" is specified [Default is /arch:AVX]:

。。。

这个地方因为我的CPU是四核的,所以直接回车了,如果是6核或者以上输入“/arch:AVX2”回车

此时表明configure完毕了,这个地方有两个贼大的坑,需要特别注意,如果直接进行:

bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package,你会发现编译不通过,一堆错误,掉入坑中压根爬不上来呀,这种感觉真的很酸爽。

(8)解决第一个坑:

configure完毕后,打开C:\Users\Administrator\tensorflow-1.10.0,你会发现文件夹下有个.bazelrc文件,没错打开它,输入

import C:/Users/Administrator/tensorflow-1.10.0/tools/bazel.rc

import C:/Users/Administrator/tensorflow-1.10.0/.tf_configure.bazelrc

保存关闭

解决第二个坑:

打开

C:\Users\Administrator\_bazel_Administrator\skod5klt\execroot\org_tensorflow\external\eigen_archive\Eigen\src\Core\arch\CUDA\Half.h

行211-217之间的这个EIGEN_STRONG_INLINE __device__ half operator + (const half& a, const half& b)函数,修改为:

EIGEN_STRONG_INLINE __device__ half operator + (const half& a, const half& b)

{

       #if defined(EIGEN_CUDACC_VER) && EIGEN_CUDACC_VER >= 90000

              return __hadd(::__half(a), ::__half(b));

       #else

              return __hadd(a, b);

       #endif

}

行224-232之间的这个EIGEN_STRONG_INLINE __device__ half operator / (const half& a, const half& b) 修改为:

EIGEN_STRONG_INLINE __device__ half operator / (const half& a, const half& b) {

       #if defined(EIGEN_CUDACC_VER) && EIGEN_CUDACC_VER >= 90000

              return __hdiv(a, b);

       #else

          float num = __half2float(a);

          float denom = __half2float(b);

          return __float2half(num / denom);

       #endif

}

修改完后,运行bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package,

进入了漫长的等待期。。。。。。突然爆出Time out 那叫一个酸爽,说明网络忒差了,下载依赖包超时了,怎么办呢?继续运行

bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package

终于依赖包下载完了,然后再次进入漫长的等待期。。。。。。我等了差不多一天时间,搞定……

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值