本文介绍从源码编译安装 TensorFlow 的过程,解决下面三个问题:NVIDIA 相关工具的安装、配置代理下载 bazel 构建过程中的依赖包,以及编译结束后的配置。

1. NVIDIA 相关工具的安装

编译之前需要配置 NVIDIA 相关工具,请参考在 Linux 上安装 NVIDIA driver/CUDA/cuDNN/TensorRT 工具

2. 配置代理

在编译过程中,可能要到某些不存在的地方拿到一些东西:

qing_dynasty

使用 squid 代理,关于 squid 代理的安装和配置,请参考在服务器上配置 squid 服务器端

在本地的话,需要配置 http 和 https 代理:

export http_proxy=http://user_name:password@server_ip:squid_port
export https_proxy=$http_proxy

3. bazel 安装

GitHub 上下载 bazel,这里选择 bazel-6.2.1-installer-linux-x86_64.sh

wget https://github.com/bazelbuild/bazel/releases/download/6.2.1/bazel-6.2.1-installer-linux-x86_64.sh
chmod +x ./bazel-6.2.1-installer-linux-x86_64.sh
sudo ./bazel-6.2.1-installer-linux-x86_64.sh

安装完成之后,可以查看安装情况:

bazel --version
bazel 6.2.1

4. TensorFlow 代码获取和编译

4.1 代码获取

从 GitHub 上获取 TensorFlow 代码:

git clone https://github.com/tensorflow/tensorflow.git
cd tensorflow
git checkout v2.13.0

4.2 config

执行 config:

config

此时基本配置完成。需要创建临时文件夹:

mkdir -p ~/tmp
export TMP=~/tmp

4.3 修改 bazelversion

修改 .bazel_version

6.2.1
# 这是来自 bazel --version 的结果

4.4 开始编译

最后进行编译:

bazel build //tensorflow/tools/pip_package:build_pip_package

(此时可以去睡觉了。)

4.5 生成 whl 包并安装

TensorFlow 编译完成之后,还需要专门生成 whl 包:

./bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg

在上面的 /tmp/tensorflow_pkg 文件夹中获取 whl 包,用 pip 安装。

cd /tmp/tensorflow_package
python3 -m pip install ./tensorflow-2.13.0-cp39-cp39-linux_x86_64.whl

4.6 测试安装

安装完成之后,就可以进行测试了:

import tensorflow as tf
print(tf.test.is_built_with_cuda())
True

5. 小结

本文介绍了在 RedHat 上从源码编译 TensorFlow 的方式。