我们将从源代码构建 TensorFlow pip 软件包并将其安装在 Windows 设备上。
Windows 设置
安装以下构建工具以配置 Windows 开发环境。
安装 Python 和 TensorFlow 软件包依赖项
安装适用于 Windows 的 Python 3.6.x 64 位版本。选择 pip 作为可选功能,并将其添加到 %PATH%
环境变量中。
安装 TensorFlow pip 软件包依赖项:
pip3 install six numpy wheel
pip3 install keras_applications==1.0.6 --no-deps
pip3 install keras_preprocessing==1.0.5 --no-deps
这些依赖项就列在 setup.py
文件的 REQUIRED_PACKAGES
下。
安装 Bazel
安装 Bazel,它是用于编译 TensorFlow 的构建工具。如需确认适用的 Bazel 版本,请参阅适用于 Windows 的经过测试的构建配置。配置 Bazel 来构建 C++。
将 Bazel 可执行文件的位置添加到 %PATH%
环境变量中。
安装 MSYS2
安装 MSYS2,以获取构建 TensorFlow 所需的 bin 工具。如果 MSYS2 已安装到 C:\msys64
下,请将 C:\msys64\usr\bin
添加到 %PATH%
环境变量中。然后,使用 cmd.exe
运行以下命令:
pacman -S git patch unzip
安装 Visual C++ 生成工具 2019
安装 Visual C++ 生成工具 2019。该工具随附在 Visual Studio 2019 中,但可以单独安装:
- 转到 Visual Studio 下载页面,
- 选择“可再发行组件和生成工具”,
- 下载并安装:
- Microsoft Visual C++ 2019 可再发行组件包
- Microsoft 生成工具 2019
安装 GPU 支持项(可选)
若要安装在 GPU 上运行 TensorFlow 所需的驱动程序和其他软件,请参阅 Windows GPU 支持指南。
下载 TensorFlow 源代码
使用 Git 克隆 TensorFlow 代码库(git
已随 MSYS2 一起安装):
git clone https://github.com/tensorflow/tensorflow.git
cd tensorflow
该代码库默认为 master
开发分支。您也可以检出想要构建的版本分支:
git checkout branch_name # r1.9, r1.10, etc.
配置 build
通过在 TensorFlow 源代码树的根目录下运行以下命令来配置系统构建:
python ./configure.py
此脚本会提示您指定 TensorFlow 依赖项的位置,并要求指定其他构建配置选项(例如,编译器标记)。以下代码展示了 python ./configure.py
的示例运行会话(您的会话可能会有所不同):
配置选项
为了支持 GPU,请指定 CUDA 和 cuDNN 的版本。如果您的系统安装了多个版本的 CUDA 或 cuDNN,请明确设置版本,而不是依赖于默认版本。./configure.py
会创建指向系统 CUDA 库的符号链接,因此,如果您更新 CUDA 库路径,就必须在构建之前再次运行此配置步骤。
构建 pip 软件包
TensorFlow 2.x
tensorflow:master 代码库已经默认更新为 build 2.x。请安装 Bazel 并使用 bazel build
创建 TensorFlow 软件包。
bazel build //tensorflow/tools/pip_package:build_pip_package
TensorFlow 1.x
如需从 master 分支构建 TensorFlow 1.x,请使用 bazel build --config=v1
创建 TensorFlow 1.x 软件包。
bazel build --config=v1 //tensorflow/tools/pip_package:build_pip_package
仅支持 CPU
使用 bazel
构建仅支持 CPU 的 TensorFlow 软件包构建器:
bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package
GPU 支持
要构建支持 GPU 的 TensorFlow 软件包构建器,请运行以下命令:
bazel build --config=opt --config=cuda --define=no_tensorflow_py_deps=true //tensorflow/tools/pip_package:build_pip_package
Bazel 构建选项
在构建时使用以下选项,避免在创建软件包时出现问题:tensorflow:issue#22390
--define=no_tensorflow_py_deps=true
从源代码构建 TensorFlow 会消耗大量 RAM。如果您的系统受内存限制,请将 Bazel 的 RAM 使用量限制为:--local_ram_resources=2048
。
如果构建支持 GPU 的 TensorFlow,请添加 --copt=-nvcc_options=disable-warnings
以禁止显示 nvcc 警告消息。
构建软件包
bazel build
命令会创建一个名为 build_pip_package
的可执行文件,此文件是用于构建 pip
软件包的程序。例如,以下命令会在 C:/tmp/tensorflow_pkg
目录中构建 .whl
软件包:
bazel-bin\tensorflow\tools\pip_package\build_pip_package C:/tmp/tensorflow_pkg
尽管可以在同一个源代码树下构建 CUDA 和非 CUDA 配置,但建议在同一个源代码树中的这两种配置之间切换时运行 bazel clean
。
安装软件包
生成的 .whl
文件的文件名取决于 TensorFlow 版本和您的平台。例如,使用 pip3 install
安装软件包:
pip3 install C:/tmp/tensorflow_pkg/tensorflow-version-cp36-cp36m-win_amd64.whl
使用 MSYS shell 构建
您也可以使用 MSYS shell 构建 TensorFlow。做出下面列出的更改,然后按照之前的 Windows 原生命令行 (cmd.exe
) 说明进行操作。
停用 MSYS 路径转换
MSYS 会自动将类似 Unix 路径的参数转换为 Windows 路径,而此转换不适用于 bazel
。(标签 //path/to:bin
会被视为 Unix 绝对路径,因为它以斜杠开头。)
export MSYS_NO_PATHCONV=1
export MSYS2_ARG_CONV_EXCL="*"
设置 PATH
将 Bazel 和 Python 安装目录添加到 $PATH
环境变量中。如果 Bazel 安装到了 C:\tools\bazel.exe
,并且 Python 安装到了 C:\Python36\python.exe
,请使用以下命令设置 PATH
:
# Use Unix-style with ':' as separatorexport PATH="/c/tools:$PATH"
export PATH="/c/Python36:$PATH"
如需支持 GPU,请将 CUDA 和 cuDNN bin 目录添加到 $PATH
中:
export PATH="/c/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v11.0/bin:$PATH"
export PATH="/c/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v11.0/extras/CUPTI/libx64:$PATH"
export PATH="/c/tools/cuda/bin:$PATH"
经过测试的构建配置
CPU
版本 | Python 版本 | 编译器 | 构建工具 |
---|---|---|---|
tensorflow-2.6.0 | 3.6-3.9 | MSVC 2019 | Bazel 3.7.2 |
tensorflow-2.5.0 | 3.6-3.9 | MSVC 2019 | Bazel 3.7.2 |
tensorflow-2.4.0 | 3.6-3.8 | MSVC 2019 | Bazel 3.1.0 |
tensorflow-2.3.0 | 3.5-3.8 | MSVC 2019 | Bazel 3.1.0 |
tensorflow-2.2.0 | 3.5-3.8 | MSVC 2019 | Bazel 2.0.0 |
tensorflow-2.1.0 | 3.5-3.7 | MSVC 2019 | Bazel 0.27.1-0.29.1 |
tensorflow-2.0.0 | 3.5-3.7 | MSVC 2017 | Bazel 0.26.1 |
tensorflow-1.15.0 | 3.5-3.7 | MSVC 2017 | Bazel 0.26.1 |
tensorflow-1.14.0 | 3.5-3.7 | MSVC 2017 | Bazel 0.24.1-0.25.2 |
tensorflow-1.13.0 | 3.5-3.7 | MSVC 2015 update 3 | Bazel 0.19.0-0.21.0 |
tensorflow-1.12.0 | 3.5-3.6 | MSVC 2015 update 3 | Bazel 0.15.0 |
tensorflow-1.11.0 | 3.5-3.6 | MSVC 2015 update 3 | Bazel 0.15.0 |
tensorflow-1.10.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 |
tensorflow-1.9.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 |
tensorflow-1.8.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 |
tensorflow-1.7.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 |
tensorflow-1.6.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 |
tensorflow-1.5.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 |
tensorflow-1.4.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 |
tensorflow-1.3.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 |
tensorflow-1.2.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 |
tensorflow-1.1.0 | 3.5 | MSVC 2015 update 3 | Cmake v3.6.3 |
tensorflow-1.0.0 | 3.5 | MSVC 2015 update 3 | Cmake v3.6.3 |
GPU
版本 | Python 版本 | 编译器 | 构建工具 | cuDNN | CUDA |
---|---|---|---|---|---|
tensorflow_gpu-2.6.0 | 3.6-3.9 | MSVC 2019 | Bazel 3.7.2 | 8.1 | 11.2 |
tensorflow_gpu-2.5.0 | 3.6-3.9 | MSVC 2019 | Bazel 3.7.2 | 8.1 | 11.2 |
tensorflow_gpu-2.4.0 | 3.6-3.8 | MSVC 2019 | Bazel 3.1.0 | 8.0 | 11.0 |
tensorflow_gpu-2.3.0 | 3.5-3.8 | MSVC 2019 | Bazel 3.1.0 | 7.6 | 10.1 |
tensorflow_gpu-2.2.0 | 3.5-3.8 | MSVC 2019 | Bazel 2.0.0 | 7.6 | 10.1 |
tensorflow_gpu-2.1.0 | 3.5-3.7 | MSVC 2019 | Bazel 0.27.1-0.29.1 | 7.6 | 10.1 |
tensorflow_gpu-2.0.0 | 3.5-3.7 | MSVC 2017 | Bazel 0.26.1 | 7.4 | 10 |
tensorflow_gpu-1.15.0 | 3.5-3.7 | MSVC 2017 | Bazel 0.26.1 | 7.4 | 10 |
tensorflow_gpu-1.14.0 | 3.5-3.7 | MSVC 2017 | Bazel 0.24.1-0.25.2 | 7.4 | 10 |
tensorflow_gpu-1.13.0 | 3.5-3.7 | MSVC 2015 update 3 | Bazel 0.19.0-0.21.0 | 7.4 | 10 |
tensorflow_gpu-1.12.0 | 3.5-3.6 | MSVC 2015 update 3 | Bazel 0.15.0 | 7.2 | 9.0 |
tensorflow_gpu-1.11.0 | 3.5-3.6 | MSVC 2015 update 3 | Bazel 0.15.0 | 7 | 9 |
tensorflow_gpu-1.10.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 | 7 | 9 |
tensorflow_gpu-1.9.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 | 7 | 9 |
tensorflow_gpu-1.8.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 | 7 | 9 |
tensorflow_gpu-1.7.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 | 7 | 9 |
tensorflow_gpu-1.6.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 | 7 | 9 |
tensorflow_gpu-1.5.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 | 7 | 9 |
tensorflow_gpu-1.4.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 | 6 | 8 |
tensorflow_gpu-1.3.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 | 6 | 8 |
tensorflow_gpu-1.2.0 | 3.5-3.6 | MSVC 2015 update 3 | Cmake v3.6.3 | 5.1 | 8 |
tensorflow_gpu-1.1.0 | 3.5 | MSVC 2015 update 3 | Cmake v3.6.3 | 5.1 | 8 |
tensorflow_gpu-1.0.0 | 3.5 | MSVC 2015 update 3 | Cmake v3.6.3 | 5.1 | 8 |