Win10 源码编译安装tensorflow-GPU

软件环境

首先说一下,我电脑的配置

win10 x64企业版;

vs2015 update3;

RTX 2060Super, 计算能力7.5.

 

tensorflow源码版本的选择及所需软件包的准备

说明,因为我电脑预先装了vs,所以就按照vs的版本去找所支持的tensorflow。

tensorflow、VS、CUDA、cudnn、BAZEL、Python版本的对应关系如下(https://www.tensorflow.org/install/source_windows。此网址也是官方的安装教程):

Win10 源码编译安装tensorflow-GPU_第1张图片

最终,选择了tensorflow-gpu-1.13.0(源码下载地址:https://github.com/tensorflow/tensorflow/releases?after=v2.0.0-alpha0 ​​​​)。

CUDA&cudnn

CUDA10.0(下载地址:https://developer.nvidia.com/cuda-10.0-download-archive?target_os=Windows&target_arch=x86_64&target_version=10&target_type=exelocal)。

cudnn7.4.1(下载地址:https://developer.nvidia.com/rdp/cudnn-archive)。

msys2

msys2(本文中用到的是20210604的版本,下载地址:https://www.msys2.org/)。

安装路径为:C:\msys64.

Bazel

Bazel0.21.0(下载地址:https://github.com/bazelbuild/bazel/releases?after=0.25.1)。

其中Bazel0.21.0是个压缩包,下载解压出来将bazel--windows-x86_64.exe文件重命名为bazel.exe,将其拷贝至msys2安装目录C:\msys64下,并将C:\msys64\usr\bin,C:\msys64。两个路径加入path环境变量。

设置环境变量:

BAZEL_SH C:\msys64\usr\bin\bash.exe 

BAZEL_VC C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC

BAZEL_VS C:\Program Files (x86)\Microsoft Visual Studio 14.0

JDK&JRE

JDK8u291(下载地址:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html)。这个我是参考了一个安装教程(https://medium.com/worldsensing-techblog/tensorflow-from-sources-windows-10-version-ea9c6a4ea657),里面有提到配置jre环境,我索性就安装了jdk。

关于JDK配置,不要用%JAVA_HOME%的方式去设置%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;以及CLASSPATH。要用全路径的方式,%*%的方式不能被在较新的win10系统中识别。

JAVA_HOME C:\Program Files\Java\jdk1.8.0_291

CLASSPATH .;C:\Program Files\Java\jdk1.8.0_291\lib\dt.jar;C:\Program Files\Java\jdk1.8.0_291\lib\tools.jar;

往path环境变量中添加:

C:\Program Files\Java\jdk1.8.0_291\jre\bin

C:\Program Files\Java\jdk1.8.0_291\bin

Python

我所采用的是anaconda的方式安装,anaconda的版本为3-2021.05,该安装包带的是python3.8。安装完后创建新的python3.6的环境。

conda create -n tensorflow-gpu python=3.6

安装的是3.6.13.

激活所创建的环境

conda activate tensorflow-gpu

安装tensorflow所需的python以来包

pip install numpy == 3.18.5 whell

pip install keras_applications==1.0.5 --no-deps

pip install keras_preprocessing==1.0.3 --no-deps

编译tensorflow源码

解压下载的源码文件,按以上步骤激活tensorflow-gpu环境,进入源码目录,执行

python configure.py

进行编译配置

ROCm 支持。这个选项是针对AMD GPU,本文环境选择否;

CUDA 支持。CUDA编译tensorflow,选择是,然后会提示你CUDA的安装路径,cudnn的安装路径,显卡的计算能力,确认是否正确;

AVX/AVX2的支持。根据你的CPU是否支持这两个指令集进行选择。本文选择AVX;

最后一个问题是,重写EIGEN内联函数减少C++编译时间的。本文选择是。

编译tensorflow

对于GPU版本

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

其中--definen=no_tensorflow_py_deps=true选项,表示编译不产生debug二进制文件。漏掉该选项会导致最后安装文件过大,而无法采用Bazel自带的压缩工具进行解压。

unzip:  cannot find zipfile directory in one of ./bazel-bin/tensorflow/tools/pip_package/simple_console_for_windows.zip or
        ./bazel-bin/tensorflow/tools/pip_package/simple_console_for_windows.zip.zip, and cannot find ./bazel-bin/tensorflow/tools/pip_package/simple_console_for_windows.zip.ZIP, period.

该问题,有兴趣可参考网址:https://stackoverflow.com/questions/52394305/creating-pip-package-for-tensorflow-with-gpu-support-results-in-0-byte-simple-co。

编译中遇到的问题

”no such package '@icu//': java.io.IOException..."

INFO: Invocation ID: 318692d6-22e8-4e2b-be65-7e222ba577fa
ERROR: D:/tensorflow-1.13.1/source/tensorflow/core/kernels/BUILD:4680:1: no such package '@icu//': java.io.IOException: Error downloading [http://localhost/release-62-1.tar.gz, https://mirror.bazel.build/github.com/unicode-org/icu/archive/release-62-1.tar.gz, https://github.com/unicode-org/icu/archive/release-62-1.tar.gz] to C:/users/administrator/_bazel_administrator/y46qiod6/external/icu/release-62-1.tar.gz: Checksum was 757001f94a669b374b8d684561e9b6491aab243a0e0a9d78ed32a273685e3eb4 but wanted e15ffd84606323cbad5515bf9ecdf8061cc3bf80fb883b9e6aa162e485aa9761 and referenced by '//tensorflow/core/kernels:string_util'
ERROR: Analysis of target '//tensorflow:libtensorflow_cc.so' failed; build aborted: no such package '@icu//': java.io.IOException: Error downloading [http://localhost/release-62-1.tar.gz, https://mirror.bazel.build/github.com/unicode-org/icu/archive/release-62-1.tar.gz, https://github.com/unicode-org/icu/archive/release-62-1.tar.gz] to C:/users/administrator/_bazel_administrator/y46qiod6/external/icu/release-62-1.tar.gz: Checksum was 757001f94a669b374b8d684561e9b6491aab243a0e0a9d78ed32a273685e3eb4 but wanted e15ffd84606323cbad5515bf9ecdf8061cc3bf80fb883b9e6aa162e485aa9761
INFO: Elapsed time: 825.988s
INFO: 0 processes.
FAILED: Build did NOT complete successfully (98 packages loaded, 6304 targets configured) Fetching @grpc; fetching 818s Fetching @icu; fetching 815s WARNING: The following rc files are no longer being read, please transfer their contents or import their path into one of the standard rc files: d:\tensorflow-1.13.1\source/.bazelrc INFO: Invocation ID: fd13f726-c4b8-4f5b-8cd8-ef51b3aff143

该问题的是因为网络问题无法下载icu模块编译所需的文件release-62-1.tar.gz。

解决办法可参考网址:https://blog.csdn.net/xiaolt90/article/details/104970944。

checksum不一致报错

按照该网址提供的方法,我遇到了另外一个问题checksum不一致报错。

问题描述可参考:

Win10 源码编译安装tensorflow-GPU_第2张图片

(图片来自:https://github.com/tensorflow/tensorflow/issues/24135)

原因可能是因为有人改动过release-62-1.tar.gz文件,导致的问题,所以用新的sha256替换掉配置文件中的sha256(该配置文件位于tensorflow/third_party/icu/workspace.bzl):

Win10 源码编译安装tensorflow-GPU_第3张图片

C++ compilation of rule '//tensorflow/python:bfloat16_lib' failed (Exit 1) tensorflow/python/lib/core/bfloat16.cc #41061

问题参考网址:https://github.com/tensorflow/tensorflow/issues/41061。

该错误可能原因是numpy版本不支持的原因。我一开始的nump版本是1.19.0,后来降到1.18.5问题解决.

文中引用的图片的参考的教程网址已在文中说明出处。

转载请注明出处。谢谢。

你可能感兴趣的:(深度学习,python,tensorflow-gpu)