Win10系统下从tensorflow源码编译tensorflow-gpu 1.15

文章目录

  • 安装CUDA与CUDNN
    • 一、CUDA安装
    • 二、CUDNN安装
      • 注意事项1
      • 注意事项2
  • 安装Microsoft Visual Studio
    • 安装 Microsoft Visual Studio 2017
    • Microsoft Visual Studio 2017 环境变量配置
  • 安装 MSYS2
    • 下载MSYS2
    • 设置环境变量
    • 为MSYS2换源
    • MSYS2命令输入
  • 创建 Anaconda 虚拟环境
    • 创建 Anaconda 虚拟环境
    • Anaconda 换源
  • 下载TensorFlow源码包
    • 下载 TensorFlow源码包
  • Anaconda配置
  • 下载 bazel
    • 下载 bazel
    • 编辑bazel环境变量
  • 编译环境变量配置
  • 配置开始
    • 1.Anaconda Prompt命令1
    • 2.修改源码部分文件
  • Anaconda Prompt命令2
    • Anaconda Prompt命令2
    • 过程中的问题解决
      • 问题的定位
      • Win10 nginx环境搭建
      • 修改文件下载的 url
  • 生成 wheel 文件与 tensorflow 的安装
    • 生成 wheel 文件
    • wheel 文件安装
    • tensorflow 测试
    • 删除系统盘缓存文件
  • 训练一个模型测试

由于自己的笔记本 CPU 支持 AVX2 指令集,所以记录一片从 TensorFlow 源码构建安装

安装CUDA与CUDNN

一、CUDA安装

tensorflow-gpu 1.15支持CUDA10,所以需要从 NVIDIA 官网下载CUDA10.0,安装一路选择默认就行
Win10系统下从tensorflow源码编译tensorflow-gpu 1.15_第1张图片

二、CUDNN安装

tensorflow-gpu 1.15支持CUDNN v7,所以需要从 NVIDIA 官网下载CUDNN v7,将下载的CUDNN解压,复制解压出来的三个文件,替换安装的CUDA路径
Win10系统下从tensorflow源码编译tensorflow-gpu 1.15_第2张图片
以上安装简略带过,具体可参见 NO.1 Tensorflow在win10下实现object detection

注意事项1

因为 tensorflow 不同版本的二进制编译会与 NVIDIA 的 CUDA 有不同的 bug,我在使用CUDA10.0时,编译进程出现错误,所以安装了 CUDA 10.1,但是 tensorflow-gpu 1.15 并不支持 CUDA10.1,我们需要用CUDA10.1下的 cudafe++.exe 替换 CUDA10.0 下的 cudafe++.exe,例如我将 CUDA10.0下的 cudafe++.exe 重命名为 cudafe++.exe.v10.0,文件目录如下

注意事项2

安装 CUDA10.1 时不要将其安装路径加入环境变量,环境变量配置应如下所示
Win10系统下从tensorflow源码编译tensorflow-gpu 1.15_第3张图片

安装Microsoft Visual Studio

安装 Microsoft Visual Studio 2017

因为我之前安装的是 Microsoft Visual Studio 2019 但编译是显示 Microsoft Visual Studio 版本不适配,通过相关源文件与多次尝试发现,Microsoft Visual Studio 2017 最适配 tensorflow-gpu 1.15,所以我又安装了 Microsoft Visual Studio 2017,下载页面如下:链接地址
Win10系统下从tensorflow源码编译tensorflow-gpu 1.15_第4张图片
Win10系统下从tensorflow源码编译tensorflow-gpu 1.15_第5张图片
如下是我 Microsoft Visual Studio 2017 安装的组件
Win10系统下从tensorflow源码编译tensorflow-gpu 1.15_第6张图片

Microsoft Visual Studio 2017 环境变量配置

D:\programing\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\Hostx64\x64
D:\programing\Microsoft Visual Studio\2017\Community\Common7\IDE

Win10系统下从tensorflow源码编译tensorflow-gpu 1.15_第7张图片

安装 MSYS2

下载MSYS2

MSYS2 具有构建 TensorFlow 所需的一些二进制工具。使用 Bazel 时,它还会自动将 Windows 样式的目录路径转换为 Linux 样式的路径。如果未安装MSYS2,Bazel 版本将无法正常工作!根据自己的Win10系统选择安装 i686 还是 x86_64,在官网上有详细的安装步骤
下载地址
例如我的安装目录为

D:\programing\msys64

设置环境变量

设置path环境变量

D:\programing\msys64\usr\bin

Win10系统下从tensorflow源码编译tensorflow-gpu 1.15_第8张图片

为MSYS2换源

换源官方教程:链接地址
分别修改

/etc/pacman.d/mirrorlist.mingw32
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/i686

/etc/pacman.d/mirrorlist.mingw64
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64

/etc/pacman.d/mirrorlist.msys
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/msys/$arch

然后执行 pacman -Sy 刷新软件包数据即可
如下所示
Win10系统下从tensorflow源码编译tensorflow-gpu 1.15_第9张图片

MSYS2命令输入

pacman -Syu
pacman -Su
pacman -S patch unzip

下载安装可能需要几分钟的时间,直到显示今日无事可做
Win10系统下从tensorflow源码编译tensorflow-gpu 1.15_第10张图片

创建 Anaconda 虚拟环境

创建 Anaconda 虚拟环境

我一般使用Anaconda应用程序创建,命名为 tensorflow-AVX2
Anaconda→environment→create
Win10系统下从tensorflow源码编译tensorflow-gpu 1.15_第11张图片

Anaconda 换源

启动 Anaconda Prompt
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --set show_channel_urls yes
conda config --remove channels defaults #删除了默认源,不然总是从官网下载然后超时
conda config --show-sources #查看下载源

因为我之前换过了,所以我直接输入最后一行命令显示我的下载源

下载TensorFlow源码包

下载 TensorFlow源码包

为了加速下载,我将 TensorFlow 包 copy 到了我的码云上,这样下载速度更快
Win10系统下从tensorflow源码编译tensorflow-gpu 1.15_第12张图片
下载完成重命名一手 tensorflow-AVX2

Anaconda配置

打开一个新的Anaconda Prompt窗口。首先,更新Anaconda以确保其软件包列表是最新的。在“Anaconda提示”窗口中,发出以下两个命令:

conda update -n base -c defaults conda
conda update --all

下载 bazel

下载 bazel

bazel 0.24.1 对 tensorflow-gpu 1.15 有很好的支持,bazel界面
bazel-0.24.1-windows-x86_64.exe 直接下载地址

Win10系统下从tensorflow源码编译tensorflow-gpu 1.15_第13张图片

编辑bazel环境变量

设置path环境变量,变量为你放置 bazel 的位置,由于我放在文件夹 E:\tensorflow-build,所以我设置为

E:\tensorflow-build

编译环境变量配置

变量
BAZEL_SH D:\programing\msys64\usr\bin\bash.exe
BAZEL_VC D:\programing\Microsoft Visual Studio\2017\Community\VC
BAZEL_VC_FULL_VERSION 14.16.27023
BAZEL_VS D:\programing\Microsoft Visual Studio\2017\Community

注意其中的值都是你的 Microsoft Visual Studio 2017 安装路径
BAZEL_VC_FULL_VERSION 的值是

D:\programing\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023

后的数字
Win10系统下从tensorflow源码编译tensorflow-gpu 1.15_第14张图片

配置开始

1.Anaconda Prompt命令1

输入以下命令

activate tensorflow-AVX2
python -m pip install --upgrade pip
set PATH=%PATH%;D:\programing\msys64\usr\bin
pip install six numpy wheel
pip install keras_applications==1.0.6 --no-deps
pip install keras_preprocessing==1.0.5 --no-deps
cd E:\tensorflow-AVX2\tensorflow
E:
git checkout r1.15

Win10系统下从tensorflow源码编译tensorflow-gpu 1.15_第15张图片

2.修改源码部分文件

修改 WORKSPACE 文件,我的文件位置如下

E:\tensorflow-AVX2\tensorflow\WORKSPACE 

加入如下字段

http_archive(
    name = "io_bazel_rules_docker",
    sha256 = "aed1c249d4ec8f703edddf35cbe9dfaca0b5f5ea6e4cd9e83e99f3b0d1136c3d",
    strip_prefix = "rules_docker-0.7.0",
    urls = ["https://github.com/bazelbuild/rules_docker/archive/v0.7.0.tar.gz"],
)

效果如下
Win10系统下从tensorflow源码编译tensorflow-gpu 1.15_第16张图片

Anaconda Prompt命令2

Anaconda Prompt命令2

python python ./configure.py

里面会显示如下信息,其中的 n、y 我选择如下,对于 compute capabilities 可以在 NVIDIA 官网查询,我的是 960M 所以是 5.0,查询地址如下:NVIDIA compute capabilities
Win10系统下从tensorflow源码编译tensorflow-gpu 1.15_第17张图片
可以清楚的看到 GeForce GTX 960M 是 5.0
Win10系统下从tensorflow源码编译tensorflow-gpu 1.15_第18张图片

(tensorflow-AVX2) E:\tensorflow-AVX2\tensorflow>python ./configure.py
WARNING: --batch mode is deprecated. Please instead explicitly shut down your Bazel server using the command "bazel shutdown".
You have bazel 0.24.1 installed.
Please specify the location of python. [Default is E:\Anaconda3\envs\tensorflow-AVX2\python.exe]:


Found possible Python library paths:
  E:\Anaconda3\envs\tensorflow-AVX2\lib\site-packages
Please input the desired Python library path to use.  Default is [E:\Anaconda3\envs\tensorflow-AVX2\lib\site-packages]

Do you wish to build TensorFlow with XLA JIT support? [y/N]: n
No XLA JIT support will be enabled for TensorFlow.

Do you wish to build TensorFlow with ROCm support? [y/N]: n
No ROCm support will be enabled for TensorFlow.

Do you wish to build TensorFlow with CUDA support? [y/N]: y
CUDA support will be enabled for TensorFlow.

Could not find any cuda.h matching version '' in any subdirectory:
        ''
        'include'
        'include/cuda'
        'include/*-linux-gnu'
        'extras/CUPTI/include'
        'include/cuda/CUPTI'
of:
Asking for detailed CUDA configuration...

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


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


Please specify the comma-separated list of base paths to look for CUDA libraries and headers. [Leave empty to use the default]:


Found CUDA 10.0 in:
    C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v10.0/lib/x64
    C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v10.0/include
Found cuDNN 7 in:
    C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v10.0/lib/x64
    C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v10.0/include


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, and that TensorFlow only supports compute capabilities >= 3.5 [Default is: 3.5,7.0]: 5.0


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


Would you like to override eigen strong inline for some C++ compilation to reduce the compilation time? [Y/n]: Y

最终效果如下
Win10系统下从tensorflow源码编译tensorflow-gpu 1.15_第19张图片
继续输入命令

bazel build --config=opt --config=cuda --define=no_tensorflow_py_deps=true //tensorflow/tools/pip_package:build_pip_package

编译过程中会不断下载文件,生成文件等,时间很长,我的编译时间总耗时大约 10000s,中间不出问题的话最终效果应如下所示

过程中的问题解决

问题的定位

因为前面都是经过我的大量尝试与实践,不会出现版本不适配,版本冲突等问题,但有一个问题是不可避免的,就是在编译过程中文件的下载失败,我在编译时多次尝试能解决一些小文件下载失败的问题,对于大文件我甚至尝试了使用 “ladder” 去下载,仍然失败,所以我认为这个网络是否“科学”无关,下载失败常见页面如下

ERROR: C:/users/haohao/_bazel_haohao/omr3yliy/external/local_config_mlir/BUILD:35:1: no such package '@llvm//': java.io.IOException: Error downloading [https://mirror.bazel.build/github.com/llvm-mirror/llvm/archive/7a7e03f906aada0cf4b749b51213fe5784eeff84.tar.gz, https://github.com/llvm-mirror/llvm/archive/7a7e03f906aada0cf4b749b51213fe5784eeff84.tar.gz] to C:/users/haohao/_bazel_haohao/omr3yliy/external/llvm/7a7e03f906aada0cf4b749b51213fe5784eeff84.tar.gz: Tried to reconnect at offset 393,204 but server didn't support it and referenced by '@local_config_mlir//:IR'
ERROR: Analysis of target '//tensorflow/tools/pip_package:build_pip_package' failed; build aborted: no such package '@llvm//': java.io.IOException: Error downloading [https://mirror.bazel.build/github.com/llvm-mirror/llvm/archive/7a7e03f906aada0cf4b749b51213fe5784eeff84.tar.gz, https://github.com/llvm-mirror/llvm/archive/7a7e03f906aada0cf4b749b51213fe5784eeff84.tar.gz] to C:/users/haohao/_bazel_haohao/omr3yliy/external/llvm/7a7e03f906aada0cf4b749b51213fe5784eeff84.tar.gz: Tried to reconnect at offset 393,204 but server didn't support it
INFO: Elapsed time: 123.203s
INFO: 0 processes.
FAILED: Build did NOT complete successfully (372 packages loaded, 14806 targets configured)

Win10系统下从tensorflow源码编译tensorflow-gpu 1.15_第20张图片
从报错发现文件是从这两个 url 择优下载的,下载保存目录为

C:/users/haohao/_bazel_haohao/omr3yliy/external/llvm/7a7e03f906aada0cf4b749b51213fe5784eeff84.tar.gz

但均下载失败,所以我们需要去手动下载这个文件,此次我以 48970KB 的大文件 llvm-7a7e03f906aada0cf4b749b51213fe5784eeff84.tar.gz 为例

https://mirror.bazel.build/github.com/llvm-mirror/llvm/archive/7a7e03f906aada0cf4b749b51213fe5784eeff84.tar.gz
https://github.com/llvm-mirror/llvm/archive/7a7e03f906aada0cf4b749b51213fe5784eeff84.tar.gz

Win10系统下从tensorflow源码编译tensorflow-gpu 1.15_第21张图片
我们从上面两个网址中使用 PC 下载到本地,然后搭建本地服务器修改源文件的下载 url 来解决此 Error
注意事项:直接将下载文件拷贝到目标目录,如下是没用用的,编译运行它会删除重新下载

C:/users/haohao/_bazel_haohao/omr3yliy/external/llvm/

Win10 nginx环境搭建

文件下载:下载地址
我选择的是 Stable version nginx/Windows-1.16.1
无需安装解压即可用
Win10系统下从tensorflow源码编译tensorflow-gpu 1.15_第22张图片
配置编辑:
打开/conf/nginx.conf文件,修改配置,例如我的路径为

D:\programing\nginx-1.16.1\conf\nginx.conf

修改第 35 行的 server 如下

变量 作用
listen 80 监听端口
root E:\workspace 文件存储文件夹
server {
        listen       80;
        server_name  127.0.0.1;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   E:\workspace;
            index  index.html index.htm;
        }

设置监听端口需要判断端口是否被占用打开 cmd,输入

netstat  -aon|findstr  "80"

可以看到我们的端口并未被占用,如果你的端口被占用,可以看到后面对应的 PID 号
输入

tasklist|findstr "1752" #查询 PID 号对应程序

需要释放只需在任务管理器结束此程序进程
Win10系统下从tensorflow源码编译tensorflow-gpu 1.15_第23张图片
在 E:\workspace 下创建一个 test.txt 内容为 This is a test.txt,然后进入 cmd 输入命令含义如下

命令 含义
start nginx 进行nginx的启动
nginx -s stop 停止nginx
nginx -s reload 重新加载nginx
nginx -s quit 退出nginx

注意:需要进入 nginx 文件夹目录进行

输入 127.0.0.1 界面如下
Win10系统下从tensorflow源码编译tensorflow-gpu 1.15_第24张图片
输入 127.0.0.1/test.txt 如下就说明配置成功,将下载的 llvm-7a7e03f906aada0cf4b749b51213fe5784eeff84.tar.gz 放在此文件夹下
Win10系统下从tensorflow源码编译tensorflow-gpu 1.15_第25张图片

修改文件下载的 url

进入 E:\tensorflow-AVX2\tensorflow\tensorflow\workspace.bzl 修改如下(以 llvm 为例)
添加一行

http://127.0.0.1/llvm-7a7e03f906aada0cf4b749b51213fe5784eeff84.tar.gz

效果如下

    tf_http_archive(
        name = "llvm",
        build_file = clean_dep("//third_party/llvm:llvm.autogenerated.BUILD"),
        sha256 = "599b89411df88b9e2be40b019e7ab0f7c9c10dd5ab1c948cd22e678cc8f8f352",
        strip_prefix = "llvm-7a7e03f906aada0cf4b749b51213fe5784eeff84",
        urls = [
			"http://127.0.0.1/llvm-7a7e03f906aada0cf4b749b51213fe5784eeff84.tar.gz",
            "https://mirror.bazel.build/github.com/llvm-mirror/llvm/archive/7a7e03f906aada0cf4b749b51213fe5784eeff84.tar.gz",
            "https://github.com/llvm-mirror/llvm/archive/7a7e03f906aada0cf4b749b51213fe5784eeff84.tar.gz",
        ],
    )

再次输入命令运行,就能解决下载报错问题,效果如下

bazel build --config=opt --config=cuda --define=no_tensorflow_py_deps=true //tensorflow/tools/pip_package:build_pip_package

Win10系统下从tensorflow源码编译tensorflow-gpu 1.15_第26张图片
最终一路顺风,晚上睡了一觉,早上编译成功
Win10系统下从tensorflow源码编译tensorflow-gpu 1.15_第27张图片

生成 wheel 文件与 tensorflow 的安装

生成 wheel 文件

E:/tensorflow-AVX2/tensorflow_pkg 为生成文件路径

bazel-bin\tensorflow\tools\pip_package\build_pip_package E:/tensorflow-AVX2/tensorflow_pkg

wheel 文件安装

输入以下命令进行安装

cd E:\tensorflow-AVX2\tensorflow_pkg
pip install tensorflow-1.15.2-cp36-cp36m-win_amd64.whl

因为换过源,所以下载速度很快,他会自动安装依赖的包与升级包,比如前面安装的 keras-applications 被升级到 1.0.8 版本

tensorflow 测试

cd ..
cd ..
python
import tensorflow as tf
tf.__version__

1.15.2

删除系统盘缓存文件

在编译过程中会产生大量系统缓存文件,如下高达 13.1GB,编译安装完成即可删除
Win10系统下从tensorflow源码编译tensorflow-gpu 1.15_第28张图片

训练一个模型测试

(base) C:\Users\HaoHao>activate tensorflow-AVX2

(tensorflow-AVX2) C:\Users\HaoHao>cd E:\Desktop\LivingFace

(tensorflow-AVX2) C:\Users\HaoHao>E:

(tensorflow-AVX2) E:\Desktop\LivingFace>python train.py

不会再报警告 AVX2指令集

有效降低 CPU 占用,不再占用 100%
Win10系统下从tensorflow源码编译tensorflow-gpu 1.15_第29张图片
大功告成!

你可能感兴趣的:(Win10系统下从tensorflow源码编译tensorflow-gpu 1.15)