admin 管理员组文章数量: 887017
文章目录
- 安装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/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.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
最终效果如下
继续输入命令
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/llvm-mirror/llvm/archive/7a7e03f906aada0cf4b749b51213fe5784eeff84.tar.gz, https://github/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/llvm-mirror/llvm/archive/7a7e03f906aada0cf4b749b51213fe5784eeff84.tar.gz, https://github/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/llvm-mirror/llvm/archive/7a7e03f906aada0cf4b749b51213fe5784eeff84.tar.gz",
"https://github/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
最终一路顺风,晚上睡了一觉,早上编译成功😀
生成 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,编译安装完成即可删除
训练一个模型测试
(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%
大功告成!
本文标签: 源码 系统 TensorFlow GPU
版权声明:本文标题:Win10系统下从tensorflow源码编译tensorflow-gpu 1.15 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1726376933h948099.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论