[更新1]使用Bazel和Python 3.6从源代码创建和安装Windows版TensorFlow GPU / CPU

这是我以前的故事的更新。 最新消息:

  • TensorFlow v1.11
  • CUDA v10.0
  • cuDNN v7.3

官方网站上有指南。 它不是很全面,但有时很有用。

概要

  1. 安装Windows版Git
  2. 安装挡板
  3. 安装MSYS2 x64和命令行工具
  4. 安装Visual Studio 2017生成工具,包括Visual Studio 2015生成工具
  5. 安装Python 3.6 64位
  6. 安装NVIDIA CUDA 10.0和cuDNN 7.3(用于GPU加速)
  7. 配置构建环境
  8. 克隆TensorFlow v1.11源代码并应用强制补丁
  9. 配置构建参数
  10. 从源代码构建TensorFlow
  11. 为Python 3.6创建一个TensorFlow wheel文件
  12. 安装适用于Python 3.6的TensorFlow wheel文件并检查结果

步骤1:为Windows安装Git

下载并安装Windows版Git。 我拿到这里。 确保git.exe的路径已添加到%PATH%环境变量中。 我正在安装Git

C:\ Bin \ Git

本教程的文件夹。

步骤2:安装MSYS2 x64和命令行工具

在此处下载并安装64位发行版。 Bazel使用Unix工具中的grep,patch,unzipand和其他端口来构建源。 您可以尝试为每个二进制文件查找独立的二进制文件,但是我更喜欢使用MSYS2捆绑软件。 我将其安装在

C:\ bin \ msys64

本教程的文件夹。 您需要将工具文件夹添加到%PATH%环境变量。 在我的情况下,它是“ C:\ Bin \ msys64 \ usr \ bin”。

通过开始菜单启动链接“ MSYS2 MinGW 64位”。 要更新,请运行以下命令(在出现提示时重新启动MSYS2 MinGW 64位):

吃豆子

然后运行:

吃豆人

构建需要安装工具:

解压缩Pacman补丁

使用命令“退出”关闭MSYS2 MinGW 64位外壳程序。 我们不再需要它了。

步骤3:安装Visual Studio 2017生成工具,包括Visual Studio 2015生成工具

我们需要从Visual Studio 2017 Build Tools安装用于桌面工具集的VC ++ 2015.3 v14.00(v140)以构建TensorFlow v1.11:

步骤4:安装Bazel

在此处下载最新的巴塞尔协议。 寻找文件bazel- -windows-x86_64.exe。 我使用Bazel 0.17.2测试了本教程。 将二进制文件重命名为bazel.exe并将其移动到%PATH%上的目录,以便可以通过在任何目录中键入bazel来运行Bazel。 有关在Windows x64上安装Bazel的详细信息,请参阅问题。

为bash位置添加全局环境变量BAZEL_SH。 我的方式是

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

为工具集“用于桌面的VC ++ 2015.3 v14.00(v140)”添加全局环境变量BAZEL_VC:

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

步骤5:安装Python 3.6 64位

TensorFlow不支持Python 3.7,因此您需要安装版本3.6。
看起来TensorFlow v1.11不再支持Anaconda / Miniconda进行构建-我遇到了一个奇怪的错误。 这就是为什么我使用Python虚拟环境进行创建的原因。

Python 3.6可在此处下载。 安装它,并将python.exe位置添加到%PATH%变量。

步骤6:安装NVIDIA CUDA 10.0和cuDNN 7.3(用于GPU加速)

如果您具有支持CUDA的NVIDIA图形卡,则此部分是最新的。 否则,请跳过本节。
如果您需要帮助,可以在此处逐步安装CUDA。 我正在复制本指南,但删节了一些细节。

转到https://developer.nvidia.com/cuda-downloads并下载适用于Windows的CUDA 10.0安装程序(您的版本)。 对我来说,版本是Windows 10。

使用默认设置将其安装在默认目录中,但禁用VisualStudio集成选项。 必要时将更新并重新启动GPU驱动程序。

运行cmd(Win + R)命令

以下命令检查nvcc的版本,并确保在路径环境变量中设置了该版本。

nvcc-版本

转到https://developer.nvidia.com/cudnn(需要会员资格)。

登录后,下载:

cuDNN v7.3.1 Windows库对于我来说[您的版本] Windows10。转到您下载的文件夹并解压缩zip文件。

转到解压缩的文件夹并复制cuda文件夹中的所有文件和文件夹(例如bin,include,lib),然后将其粘贴到“ C:\ Program Files \ NVIDIA GPU Computing Toolkit \ CUDA \ v10.0”中“一个。

最后一步是将“ C:\ Program Files \ NVIDIA GPU Computing Toolkit \ CUDA \ v10.0 \ extras \ CUPTI \ libx64”添加到%PATH%环境变量。

步骤7:配置构建环境

从开始菜单启动用于x64的VC ++ 2015 shell(快捷方式“ VS2015 x64 Native Tools命令提示符”)。

接下来,您需要创建,激活和配置Python环境。 在“ VS2015 x64本机工具命令提示符”中执行以下Shell命令(根据您的位置更正路径)。

pip3 install -U virtualenv
virtualenv --system-site-packages C:\用户\ amsokol \张量流v1.11
C:\用户\ amsokol \ tensorflow-v1.11 \脚本\ activate.bat

应用命令后,您的外壳应如下所示:

安装必需的Python软件包:

pip3安装六个numpy轮
pip3 install keras_applications == 1.0.5 --no-deps
pip3 install keras_preprocessing == 1.0.3 --no-deps

运行“ pip3 list”以确保已安装必需的软件包:

目前为止就这样了。 不要关闭碗。

步骤8:克隆TensorFlow源代码并应用强制补丁

首先,您需要选择要将TensorFlow源代码克隆到的文件夹。 在我的情况下,它是“ C:\ Users \ amsokol \ Development \ tensorflow-build”。 返回外壳并运行:

cd C:\用户\ amsokol \开发\张量流构建

克隆源代码:

Git克隆https://github.com/tensorflow/tensorflow

结帐最新版本1.11:

cd张量流
git checkout v1.11.0

现在我们有了资源。

他们自己的第三方库中有一个BUG。 我们需要在构建之前对其进行修复。
  • 在此处下载补丁并将其与文件名eigen_half.patch一起保存在third_party文件夹中
  • 在tensorflow / workspace.bzl文件的“ eigen_archive”部分中添加patch_file = clean_dep(“ // third_party:eigen_half.patch”)。

tensorflow / workspace.bzl文件中的结果应如下所示:

... tf_http_archive(名称=“ eigen_archive”,网址= [“ https://mirror.bazel.build/bitbucket.org/eigen/eigen/get/fd6845384b86.tar.gz","https://bitbucket.org /eigen/eigen/get/fd6845384b86.tar.gz“,],sha256 =” d956415d784fa4e42b6a2a45c32556d6aec9d0a3d8ef48baee2522ab762556a9“,strip_prefix”,strip_prefix =“ eigen-eigen-clean (“ // third_party:eigen_half.patch”),)...

做完了

步骤9:配置构建参数

确保我们位于源代码的根文件夹中:

cd C:\用户\ amsokol \开发\张量流构建\张量流

运行配置器:

python ./configure.py

首先,将询问您Python的位置。 按Enter保留默认值:

...您已经安装了bazel 0.17.2。
请指定Python的位置。 [标准是C:\ Users \ amsokol \ tensorflow-v1.11 \ Scripts \ python.exe]:

然后将要求您提供Python库的路径。 按Enter保留默认值:

跟踪(最后一次通话):文件“ “,第1行,在 AttributeError:模块'Site'没有属性'getsitepackages'找到可能的Python库路径:C:\ Users \ amsokol \ tensorflow-v1.11 \ Lib \ site-packages请输入所需的Python库路径。 标准为[C:\ Users \ amsokol \ tensorflow-v1.11 \ Lib \ site-packages]

然后,将要求您提供nGraph的支持。 我们不需要它。 按“ n”:

您想使用nGraph支持构建TensorFlow吗? [是/否]:n TensorFlow未激活nGraph支持。

然后要求CUDA支持:

您是否要使用CUDA支持构建TensorFlow? [是/否]:

如果要使用GPU加速,请回答“ y”。 否则,按“ n”。

如果对CUDA配置器为是,则会询问其他问题:
回答10.0作为CUDA SDK版本:
请指出您要使用的CUDA SDK版本。 [将空白保留为默认设置为CUDA 9.0]:10.0
按Enter退出默认的CUDA工具包位置:
请指定CUDA 10.0工具包的安装位置。 有关更多信息,请参见README.md。 [默认值为C:/程序/ NVIDIA GPU计算工具包/ CUDA / v10.0]:
将7.3.1作为cuDNN版本:
请指出所需的cuDNN版本。 [默认保留空白以使用cuDNN 7.0]:7.3.1
按Enter退出默认的cuDNN库位置:
请输入cuDNN 7库的安装位置。 有关更多信息,请参见README.md。 [默认值为C:/程序/ NVIDIA GPU计算工具包/ CUDA / v10.0]:
下一个问题涉及可用于构建的CUDA算术函数。 您可以在以下位置找到设备的计算能力:https://developer.nvidia.com/cuda-gpus。 我有GTX 1070,所以我回答6.1:
提供您要使用的以逗号分隔的Cuda数学函数的列表。 您可以在以下位置找到设备的计算能力:https://developer.nvidia.com/cuda-gpus。 请注意,每个附加的计算功能都会大大增加创建时间和二进制文件的大小。 [默认值为:3.5.7.0]:6.1

下一个问题是设置优化标志。 我有第6代Intel CPU,所以我回答/来了:AVX2:

如果指定了Basel选项“ --config = opt”,请指定在编译期间要使用的优化标志。 [默认为/ arch:AVX]:/ arch:AVX2

最后一个问题是关于本征的。 回答“ y”。 它大大减少了编译时间。

是否要为某些C ++编译覆盖自己的强大内联代码以减少编译时间? [Y / n]:Y Eigen强烈覆盖内联。

配置完成。 让我们开始吧。

步骤10:从源代码构建TensorFlow

确保我们位于源代码的根文件夹中:

cd C:\用户\ amsokol \开发\张量流构建\张量流
创建需要很长时间。 我强烈建议关闭防病毒软件,包括Windows Defender防病毒实时保护。

执行构建:

bazel build --config = opt // tensorflow /工具/ pip_package:build_pip_package

坐下来放松一段时间。

步骤11:为Python 3.6创建一个TensorFlow wheel文件

运行命令以创建Python Wheel文件:

mkdir .. \ out
bazel-bin \张量流\工具\ pip_package \ build_pip_package .. \ out

它失败:

有一个已知的问题。 查看文件夹“ bazel-bin \ tensorflow \ tools \ pip_package”。 它包含长度为零的文件“ simple_console_for_windows.zip”。 那就是问题所在。 Bazel包含一个32位zip实用程序,该实用程序将在2GB的较大文件上失败。 请参阅链接以获取详细信息和解决方法:

  • https://github.com/tensorflow/tensorflow/issues/20332
  • https://stackoverflow.com/questions/52394305/creating-pip-package-for-tensorflow-with-gpu-support-results-in-0-byte-simple-co

有解决此问题的步骤:

光盘。 \ bazel-bin \张量流\工具\ pip_package

打开文件“ simple_console_for_windows.zip-0.params”,并删除带有“ mnist.zip”的行:

...
runfiles / org_tensorflow / tensorflow / contrib / eager / python /例子/ gan / mnist.zip = bazel-out / x64_windows-opt / bin / tensorflow / contrib /渴望/ python /例子/ gan / mnist.zip
...
它帮助到我。 如果这对您没有帮助,只需删除带有zip文件的其他行(请参见此处的详细信息)。 此活动的目的是使simple_console_for_windows.zip的长度小于2 GB。

删除空文件“ simple_console_for_windows.zip”。

接下来,查看您的主文件夹。 您需要找到名为“ _bazel_ “看。在我的情况下,它是“ _bazel_amsokol”。它包含带有构建文件的文件夹。在我的情况下,它是“ lx6zoh4k”。返回运行的外壳程序(根据正确的文件夹名称):

cd C:\ Users \ amsokol \ _bazel_amsokol \ lx6zoh4k \ execroot \ org_tensorflow

手动创建文件“ simple_console_for_windows.zip”:

外部\ bazel_tools \工具\ zip \拉链\ zipper.exe vcC bazel-out / x64_windows-opt / bin / tensorflow / tools / pip_package / simple_console_for_windows.zip @ bazel-out / x64_windows-opt / bin / tensorflow / tools / pip_package / simple_console_for_windows.zip-0.params

运行命令以创建Python Wheel文件:

cd C:\用户\ amsokol \开发\张量流构建\张量流
bazel-bin \张量流\工具\ pip_package \ build_pip_package .. \ out

它在文件夹“ .. \ out”中创建文件tensorflow-1.11.0-cp36-cp36m-win_amd64.whl。

步骤12:为Python 3.6安装TensorFlow wheel文件并检查结果

运行命令以安装Python Wheel文件:

pip3安装.. \ out \ tensorflow-1.11.0-cp36-cp36m-win_amd64.whl

退出Tensorflow目录

光盘..

要在此处检查下载脚本或通过复制和粘贴运行它:

将Tensorflow导入为tf hello = tf.constant('Hello,TensorFlow!')Session = tf.Session()打印(session.run(hello))

如果系统输出以下内容,则一切正常:

您好TensorFlow!

我的输出:

您现在已经在Windows计算机上成功安装了TensorFlow。

在下面的评论中让我知道它是否对您有用。 或者,如果您有任何缺陷。 非常感谢!