TensorFlow C API 动态库 v1.15 版本的编译过程

整个编译工程基本参照官方的 在 Windows 环境中从源代码构建 说明就可以完成。之前搜到一些更早的版本是用 Cmake + Visual Studio 编译的,貌似编译过程中容易产生一些问题。TensorFlow v1 的最后一个版本 1.15.5 是是用 Bazel 进行构建的,它会直接调用 MSVC 编译器,整个编译过程还是比较顺利的。

经过测试的构建配置一节中, tensorflow-1.15.0 编译时使用的 Python 版本为 3.5-3.7, 编译器为 MSVC 2017, 构建工具为 Bazel 0.26.1. 下面会使用这些推荐的版本。

1. 安装 Python 和 TensorFlow 软件包依赖项

我的电脑上已安装有 Python 3.7 和 3.9, 但是 PATH 中 3.9 的目录在前边,因此先调整顺序将 3.7 放到前边。不调整的话,调用 Python 前通过以下命令临时设置一下环境变量也可以:

set PATH=C:\Python\Python37-64\Scripts;C:\Python\Python37-64;%PATH%

因为 v1.15.5 版本的 /tensorflow/tools/pip_package/setup.py 文件里有 'keras_applications >= 1.0.8', 因此我将官方构建说明中 keras_applications 的安装版本由 1.0.6 改为了 1.0.8, 执行:

pip3 install six numpy wheel
pip3 install keras_applications==1.0.8 --no-deps
pip3 install keras_preprocessing==1.0.5 --no-deps

2. 安装 Bazel

我电脑上没有 Bazelisk, 也没有 Chocolatey 和 Scoop, 因此我选择手动安装 Bazel.

https://github.com/bazelbuild/bazel/releases/tag/0.26.1 下载 bazel-0.26.1-windows-x86_64.zip, 把它解压到任意一个目录,并且把这个目录加入到 PATH 中后, Bazel 就可以使用了。

首次运行 bazel.exe 时,它会解压一些文件到 C:\Users\%USERNAME% 目录下,之后编译时生成的一些中间文件也会在用户的 Profile 目录下。

3. 安装 MSYS2

MSYS2 的安装可以参考 https://www.msys2.org/ 首页的说明。我的电脑上已经安装有 MSYS2 了,就只执行了一下 pacman:

pacman -S git patch unzip

并且确保 C:\msys64\usr\bin 在 PATH 中。

4. 安装 Visual Studio

我的电脑已安装有 Visual Studio 2017 和 2022.

如果没有安装任何版本的 Visual Studio, 要安装 VS 2017 可以到 https://visualstudio.microsoft.com/zh-hans/vs/older-downloads/ 下载,可能需要登录 Microsoft 账号。

如果已经安装有 VS 2019, 2022 等更高版本,建议先尝试是否能正常编译。在已安装高版本 VS 的情况下安装低版本 VS 可能会有问题。

5. 下载 TensorFlow 源代码

使用 TortoiseGit 克隆版本库 https://github.com/tensorflow/tensorflow.git, 分支填写 v1.15.5, 深度填写 1.

6. 配置 build

在克隆得到的 tensorflow 目录中,执行:

python ./configure.py

如果不需要 GPU 支持,可以所有问题都选择默认值。

7. 构建 C API 库文件

执行以下命令构建 C API 的 dll 和 lib 文件:

bazel build --config=v1 --config=opt //tensorflow:tensorflow.dll
bazel build --config=v1 --config=opt //tensorflow:tensorflow.lib

在我的 5900X 上整个编译过程耗时约 14 分钟,生成文件大小和官方提供的 libtensorflow-cpu-windows-x86_64-1.15.0.zip 基本相同。

2023-04-22 添加:

编译时可以使用命令:

bazel build --config=v1 --copt=/arch:AVX --copt=/arch:AVX2 tensorflow:tensorflow.dll tensorflow:tensorflow_dll_import_lib

这样可以忽略掉为 opt config 配置的编译参数,直接指定编译支持 AVX 和 AVX2 的版本 (执行 python ./configure.py 时, opt config 的编译参数默认只有 /arch:AVX, 会缺少对 AVX2 的支持)。
Current language: 中文 (简体)
Leave a Comment
Name
(required)
E-mail
(required, will not be published)
Website
(optional)
Comment
A syntax system which is similar to wiki markup is available, see the guide