文章目录

  • 安装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,安装一路选择默认就行

二、CUDNN安装

tensorflow-gpu 1.15支持CUDNN v7,所以需要从 NVIDIA 官网下载CUDNN v7,将下载的CUDNN解压,复制解压出来的三个文件,替换安装的CUDA路径

以上安装简略带过,具体可参见 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 时不要将其安装路径加入环境变量,环境变量配置应如下所示

安装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,下载页面如下:链接地址


如下是我 Microsoft Visual Studio 2017 安装的组件

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

安装 MSYS2

下载MSYS2

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

D:\programing\msys64

设置环境变量

设置path环境变量

D:\programing\msys64\usr\bin

为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 刷新软件包数据即可
如下所示

MSYS2命令输入

pacman -Syu
pacman -Su
pacman -S patch unzip

下载安装可能需要几分钟的时间,直到显示今日无事可做

创建 Anaconda 虚拟环境

创建 Anaconda 虚拟环境

我一般使用Anaconda应用程序创建,命名为 tensorflow-AVX2
Anaconda→environment→create

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 到了我的码云上,这样下载速度更快

下载完成重命名一手 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 直接下载地址

编辑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

后的数字

配置开始

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

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"],
)

效果如下

Anaconda Prompt命令2

Anaconda Prompt命令2

python python ./configure.py

里面会显示如下信息,其中的 n、y 我选择如下,对于 compute capabilities 可以在 NVIDIA 官网查询,我的是 960M 所以是 5.0,查询地址如下:NVIDIA compute capabilities

可以清楚的看到 GeForce GTX 960M 是 5.0

(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.0Please specify the cuDNN version you want to use. [Leave empty to default to cuDNN 7]: 7.6Please 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/x64C:/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/x64C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v10.0/includePlease 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.0Please specify optimization flags to use during compilation when bazel option "--config=opt" is specified [Default is /arch:AVX]: /arch:AVX2Would you like to override eigen strong inline for some C++ compilation to reduce the compilation time? [Y/n]: Y

最终效果如下

继续输入命令

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)


从报错发现文件是从这两个 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


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

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

Win10 nginx环境搭建

文件下载:下载地址
我选择的是 Stable version nginx/Windows-1.16.1
无需安装解压即可用

配置编辑:
打开/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 号对应程序

需要释放只需在任务管理器结束此程序进程

在 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 界面如下

输入 127.0.0.1/test.txt 如下就说明配置成功,将下载的 llvm-7a7e03f906aada0cf4b749b51213fe5784eeff84.tar.gz 放在此文件夹下

修改文件下载的 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相关推荐

  1. 干货|TensorFlow开发环境搭建(Ubuntu16.04+GPU+TensorFlow源码编译)

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|机器学习算法工程师 安装平台 1 平台 目前Tensor ...

  2. Tensorflow源码编译

    相比源码编译各版本之间遇到的坑来说,pip安装真心省事.不过由于项目需要采用C++实现的整个感知模块,只能把DL前向传播这块也写成C++形式.这是我去年的编译过程,当时有不少坑没能记录下来,以后有机会 ...

  3. anaconda tensorflow 2.3_TensorFlow开发环境搭建(Ubuntu16.04+GPU+TensorFlow源码编译)

    1 安装选择 1.1 平台 目前TensorFlow已支持Mac.Ubuntu和Windows三个主流平台(64位平台), 1.2 GPU vs CPU 在安装时可以选择安装版本是否支持GPU, 1. ...

  4. ubuntu10.04下audacious2.4源码编译过程(解决2.3cue的bug)

    本文最新版本:ubuntu10.04下audacious2.5源码编译过程 编译最新的2.4是为了解决ubuntu源中安装的audacious播放cue时有bug,会一直重复第一首歌 听ape的时候很 ...

  5. Ubuntu 16.04 源码编译安装GPU tensorflow(二)

    如前一篇在1.4.0版本的Tensorflow上安裝Tensorflow Object Detection API,在验证测试时出現serialized_options=None问题.需安装高版本Te ...

  6. 拒绝踩坑!源码编译 tensorflow 解决 cuda 不配套 万金油方法

    在使用tensorflow 的时候最头疼的问题就是跟cuda 之间的配套使用问题,加上Nvidia 新的 rtx 2080 ti 图灵架构目前官方声称只支持cuda-10, 以上版本,对于tensor ...

  7. bazel源码编译Tensorflow

    因为研究需求,要从Tensorflow源码编译libtensorflow_cc.so和libtensorflow_framwork.so两个库,工具是bazel. 编译硬件需求:GCC4.8以上,ba ...

  8. [图解tensorflow源码] [原创] Tensorflow 图解分析 (Session, Graph, Kernels, Devices)

    TF Prepare [图解tensorflow源码] 入门准备工作 [图解tensorflow源码] TF系统概述篇 Session篇 [图解tensorflow源码] Session::Run() ...

  9. Tensorflow 源码编译笔记(C++/C层)

    备注:安装tensorflow的版本,必须要与bazel版本对应,对应关系可查看 以下链接: https://tensorflow.google.cn/install/source#ubuntu 本次 ...

最新文章

  1. CVPR 2020 夜间目标检测挑战赛冠军方案解读
  2. 一文读懂什么是数字孪生?
  3. SpringMVC源码系列:HandlerMapping
  4. 单片机向左,嵌入式向右
  5. Codeforces 920D Tanks (看题解)
  6. HDU 2041 超级楼梯
  7. 软件测试-PR录制脚本程序ie的时候闪退
  8. linux虚拟主机泛解析,Apache虚拟主机的配置和泛域名解析实现代码
  9. js深入研究之Person类案例
  10. TM4C123核心板焊接须知
  11. Oracle基础函数
  12. 十种日常食物比砒霜还毒!
  13. jquery实现百度类似搜索提示功能(AJAX应用)
  14. MDR的进阶版本-GMDR
  15. 程序员自我提升的5个方法
  16. Linux系列(一): 在虚拟机中安装Ubuntu
  17. 如何在html中选择wrap,jQuery wrap()方法怎么用?
  18. 配置AAA认证和授权
  19. locate用主动还是被动_improve到底是直接用被动式还是用主动表被动
  20. 信息安全相关术语(行话)

热门文章

  1. 读研三年vs工作三年,哪个更合适?
  2. TextView字体样式
  3. 电脑不能开机的解决方法
  4. 【MySQL基础4】DML详解
  5. android imageview 锯齿,Android 圆形ImageView 怎样解决边缘锯齿的有关问题
  6. eworld 邮件服务器,网络服务器投标书.doc
  7. MUI页面及遇到的bug
  8. 在小公司卧薪尝胆3年,意外拿到字节offer,BAT离你其实不远!
  9. 12.06-自动释放池(autoreleasepool)
  10. TML5期末大作业:红色自适应网上鲜花网站设计——浪漫红色自适应网上鲜花店(16页) HTML+CSS+JavaScript 大学生鲜花网页作品 植物网页设计作业模板 学生网页制作源代码下载