文章目录
安装CUDA与CUDNN一、CUDA安装二、CUDNN安装注意事项1注意事项2 安装Microsoft Visual Studio安装 Microsoft Visual Studio Microsoft Visual Studio 环境变量配置 安装 MSYS2下载MSYS2设置环境变量为MSYS2换源MSYS2命令输入 创建 Anaconda 虚拟环境创建 Anaconda 虚拟环境Anaconda 换源 下载TensorFlow源码包下载 TensorFlow源码包 Anaconda配置下载 bazel下载 bazel编辑bazel环境变量 编译环境变量配置配置开始1.Anaconda Prompt命令12.修改源码部分文件 Anaconda Prompt命令2Anaconda 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
因为我之前安装的是 Microsoft Visual Studio 但编译是显示 Microsoft Visual Studio 版本不适配,通过相关源文件与多次尝试发现,Microsoft Visual Studio 最适配 tensorflow-gpu 1.15,所以我又安装了 Microsoft Visual Studio ,下载页面如下:链接地址
如下是我 Microsoft Visual Studio 安装的组件
Microsoft Visual Studio 环境变量配置
D:\programing\Microsoft Visual Studio\\Community\VC\Tools\MSVC\14.16.27023\bin\Hostx64\x64D:\programing\Microsoft Visual Studio\\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.mingw32Server = https://mirrors.tuna./msys2/mingw/i686/etc/pacman.d/mirrorlist.mingw64Server = https://mirrors.tuna./msys2/mingw/x86_64/etc/pacman.d/mirrorlist.msysServer = https://mirrors.tuna./msys2/msys/$arch
然后执行pacman -Sy刷新软件包数据即可
如下所示
MSYS2命令输入
pacman -Syupacman -Supacman -S patch unzip
下载安装可能需要几分钟的时间,直到显示今日无事可做
创建 Anaconda 虚拟环境
创建 Anaconda 虚拟环境
我一般使用Anaconda应用程序创建,命名为 tensorflow-AVX2
Anaconda→environment→create
Anaconda 换源
启动 Anaconda Promptconda config --add channels https://mirrors.tuna./anaconda/pkgs/free/conda config --set show_channel_urls yesconda 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 condaconda 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
编译环境变量配置
注意其中的值都是你的 Microsoft Visual Studio 安装路径 BAZEL_VC_FULL_VERSION 的值是
D:\programing\Microsoft Visual Studio\\Community\VC\Tools\MSVC\14.16.27023
后的数字
配置开始
1.Anaconda Prompt命令1
输入以下命令
activate tensorflow-AVX2python -m pip install --upgrade pipset PATH=%PATH%;D:\programing\msys64\usr\binpip install six numpy wheelpip install keras_applications==1.0.6 --no-depspip install keras_preprocessing==1.0.5 --no-depscd E:\tensorflow-AVX2\tensorflowE: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 = ["/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.pyWARNING: --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-packagesPlease 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]: nNo XLA JIT support will be enabled for TensorFlow.Do you wish to build TensorFlow with ROCm support? [y/N]: nNo ROCm support will be enabled for TensorFlow.Do you wish to build TensorFlow with CUDA support? [y/N]: yCUDA 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/includeFound 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: /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//llvm-mirror/llvm/archive/7a7e03f906aada0cf4b749b51213fe5784eeff84.tar.gz, /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//llvm-mirror/llvm/archive/7a7e03f906aada0cf4b749b51213fe5784eeff84.tar.gz, /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 itINFO: Elapsed time: 123.203sINFO: 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//llvm-mirror/llvm/archive/7a7e03f906aada0cf4b749b51213fe5784eeff84.tar.gz/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 如下
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 输入命令含义如下
注意:需要进入 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//llvm-mirror/llvm/archive/7a7e03f906aada0cf4b749b51213fe5784eeff84.tar.gz","/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_pkgpip install tensorflow-1.15.2-cp36-cp36m-win_amd64.whl
因为换过源,所以下载速度很快,他会自动安装依赖的包与升级包,比如前面安装的 keras-applications 被升级到 1.0.8 版本
tensorflow 测试
cd ..cd ..pythonimport tensorflow as tftf.__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%
大功告成!