首先,感谢各位前辈的分享。搜索到的教程、文章太多,没有全部记录下来,很抱歉不能一一感谢,一开始也没想到能写这么一篇文,以后注意…

编译前的准备工作参照以下五个链接,或直接看本文。

(有些步骤可能是多余的,我就不去一个个排除了…总之能编译。以下链接,第一个是tensorflow官网,不过有些按照官网的话行不通…)

https://www.tensorflow.org/install/source_windows?hl=zh_cn

win10+vs2019+bazel+编译tensorflow2.1-CPU-only版

Windows10 Bazel 编译 Tensorflow 2 C++ dll 和 lib 文件

JayKay-x:Win10 VS2019+Cuda10.2+bazel编译tensorflow-2.1.0

TensorFlow 1.13 在 windows 上的构建

1 VS2019、 下载anaconda、msys2、bazel

注意,我自己的电脑只有C盘,所以所有东西都放在C盘里了,bazel 编译的时候占用C盘的空间可能比较大,所以下载安装,还有tensorflow源码包,请各位自己找其他盘符的位置。

### VS2019去官网下载就可以。SDK版本好像没有要求,只安装一个,记住是哪个就好。系统变量的设置后面会说,除了VS的还有bazel、msys2的。

另外,tensorflow官网说需要VS2019 生成工具,但不用另外下载生成工具……

d8620f45ec815013bd2d4f9533b48b34.png

https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/

### 上链接是anaconda的清华镜像源(感谢),下载安装好之后,参照说明修改C:UsersAdministrator目录下的.condarc文件 ,复制粘贴上去就好啦。

(另外求助一下,上面的 .condarc 字体后面的底色在网页上怎么添加,如果有人看到的话……)

Administrator是自己电脑的用户名,比如自己的电脑叫xiaobai,那目录就是C:Usersxiaobai。

【如果没有.condarc文件的话】,打开终端,桌面任务栏点击[开始]->[Windows系统]->[命令提示符],或者使用快捷键win+r,win在一般键盘上是位于左边Alt键的左侧,苹果电脑是command键。

(没错,这是windows的……算是教程吧,如果是在苹果上双系统的话commond就是win……我就是苹果双系统……至于为什么要在苹果双系统windows编译……个人原因,不啰嗦了)

conda config --set show_channel_urls yes

在终端中输入以上命令(复制粘贴就行),回车执行。之后就可以在C:UsersAdministrator目录下找到.condarc文件啦~

之后依旧按照网址上的说明去修改。(修改成清华镜像源,因为国外资源下载比较困难,为什么会这样,这一切要从那一堵墙说起……额)

接下来新建一个python环境,在终端输入以下命令

conda create -n py37 python==3.7

[py37]是自己起的环境名,改成 xiaobai 也可以,比如

conda create -n xiaobai python==3.7

创建好之后可以测试一下

conda activate py37

出现以下的话,环境就创建成功啦~

(py37) C:UsersAdministrator>

然后下载几个包。注意,protobuf 要 3.8.0 版本。(后面会说明为什么)

conda install protobuf==3.8.0
conda install numpy
conda install keras-preprocessing
conda install patch

### 接下来是msys2,下载地址如下,默认安装就可以,或者不在C盘也行。

https://www.msys2.org/MSYS2https://www.msys2.org/

安装好之后,添加系统变量,msys2、以及前面说到的VS(还有后续bazel的)。有两个,一个是用户变量,一个是系统变量。以及,上面在 py37 环境里安装的 ptach,在Anaconda 目录下 envpy37【等回公司再找】找到patch.exe文件以及 复制粘贴到 msys2根目录下。emmmm…还得加个图…总之要回公司再搞…先mark一下

5ecd6d53d20246c65f46737ae13bf082.png
用户变量

97d275a82472eef0e80130a81b4b8439.png
系统变量

【打开下载好的msys2,不是终端】

09d983cb5a9e071ca77ae5ecaccaa8a5.png
msys2 的界面

依次执行以下三个命令。

pacman -Syu
pacman -Su
pacman -S patch unzip

cd到自己想要的文件夹,比如cd D:tf,然后下载tensorflow。

cd D:tf
git clone https://github.com/tensorflow/tensorflow.git

下载好tensorflow之后依次输入以下命令,执行完之后就可以关闭msys2啦

cd tensorflow
git checkout v2.2.0

35ed406e89d5fefe8678a4286ee64bc6.png

git checkout 是切换版本的命令,v后面如果是2.4.0的话切换的就是2.4.0,这里编译的是2.2.0。

接下来,注意,在[开始]->[Visual Sdutio 2019] 下找到 [x64 Native Tools Command Prompt for VS 2019] ,如上图。它和终端很像,【但是编译是要在这里编译的!】(感谢 @JayKay-x 的分享)。

88f7667d4dffdfad02676c96907bcf48.png
这货不是cmd

打开 [x64 Native Tools Command Prompt for VS 2019] ,输入以下命令。

conda activate py37
python -m venv C:tftensorflow.venv

C:tftensorflow 是自己 clone 的 tensorflow 源码位置。这之后 C:tftensorflow 目录下就会出现一个 .venv 文件夹,打开这个文件夹,重新打开 [x64 Native Tools Command Prompt for VS 2019],将 .venv 文件夹里打开 Script文件夹,找到 activate.bat 文件拖入进去,然后回车执行。

4b4244a2067481d082d4e40a7e37ee0d.png
这货不是cmd
python --version

执行之后检查一下 python 的版本是不是 3.7.* 。(重新打开只是为了检查一下 python 的版本,不重新打开也可以,或者 conda deactivate 退出py37环境之后,拖入 activate.bat 文件,再检查也行)

1ea3b80cc59f1d353e278e0f16465bad.png
这货不是cmd

确认无误后,开始 pip 一些东西,注意,要在 .venv 这个编译环境里面 pip安装。(其实一行 pip install 就可以,只不过这样看起来好看一些)

python -m pip install –upgrade pip
pip install absl-py astunparse==1.6.3 backports.weakref enum34 gast==0.3.3 google_pasta
pip install h5py==2.10.0 keras_preprocessing numpy==1.18.0 opt_einsum
pip install tensorboard==2.2.0 tensorflow_estimator==2.2.0 termcolor wrapt wheel six
pip install protobuf==3.8.0
pip install patch

https://github.com/tensorflow/tensorflow/blob/r2.2/tensorflow/tools/pip_package/setup.py

可以看以上链接中 REQUIRED_PACKAGES= [……] 内写出的东西。如果是 tensorflow 其他版本的话切换一下对应版本,本文只是 tensorflow2.2.0。

此外需要注意最后两个,一个是 protobuf 版本需要 3.8.0 ,后面步骤中执行 configure.py 文件之后可以找到这个要求,总之下载 3.8.0 就对啦,tensorflow 其他版本可能不一样。另一个是 patch ,在上面的链接里没有写,但需要(也可以不安装试试,不行就再装呗)。

### 下载 bazel 2.0.0 版本,不需要安装,将下载好的 bazel200.exe 文件改名为 bazel.exe ,并放入到 msys2 的安装目录下,因为 msys2 已经设置好系统变量了。但也可以给 bazel.exe 另外再设置一下(脱裤子放屁,额我就这么干了,其实放到 msys2里面就不用再另外设置了)。

到此,vs路径、msys2路径、bazel路径、编译环境、pip需要的各种包,就全都安排了。

(辛苦辛苦,喝口水歇一歇)

2、configure.py配置,准备开始编译

其实还是要继续下载。

cd 到 已经转换成 2.2.0 版本的 tensorflow 文件夹,执行以下指令,开始配置。

python configure.py

d4dbc29c0e839070e2271c316c9947f7.png
编译配置

配置到这里就ok了。接下来开始编译,不过先说一下前面提到的 protobuf 、 bazel 的版本。

之前说的 protobuf 版本,在执行 configure.py 文件之后,用Notepad++或者其他编译器打开 tensorflowtensorflowworkspace.bzl 文件,搜索protobuf,能找到一段说明。没试过其他版本的protobuf能不能行,3.8.0 是没问题的。bazel 版本在 tensorflow 官网可以看到, tensorflow 2.2.0 对应的是 bazel 2.0.0 。

# 310ba5ee72661c081129eb878c1bbcec936b20f0 is based on 3.8.0 with a fix for protobuf.bzl.

9bded0cc2ff861d70dca8f495fb46610.png
查看需要的 bazel 版本

4a09bc3892e7fbc7184f658ac8ddf0bc.png
查看需要的 protobuf 版本

开始编译,执行以下指令,过程需要下载,全部下载完毕之后,自动开始编译,然后会生成 dll 文件。过程……一两个小时?如果下载断了就重新执行下面的指令。

bazel build --config=opt //tensorflow:tensorflow_cc.dll

成功之后 会提示 [INFO: Build completed successfully, **** total actions],我就不重新编译了……

接下来执行下面指令,编译 lib 文件,这个比较快。

bazel build --config=opt //tensorflow:tensorflow_cc_dll_import_lib

---未完待续---

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐