源码编译安装
本章节提供基础版本、开启ACL特性版本、适配TensorFlow v1.x特性版本和开启NUMA特性版本四种编译安装TensorFlow 2.13.0的场景和方法,请根据实际情况选择对应的编译命令。
- 获取TensorFlow 2.13.0版本源码。
- 安装依赖组件。
1 2 3 4 5 6 7
yum install patchelf perl python3-devel pip3 install numpy==1.24.3 pip3 install packaging pip3 install requests pip3 install wheel export C_INCLUDE_PATH=/usr/include/python3.9:$C_INCLUDE_PATH export CPLUS_INCLUDE_PATH=/usr/include/python3.9:$CPLUS_INCLUDE_PATH
上述配置环境变量命令中的路径“/usr/include/python3.9”为Python.h所在目录,以实际编译环境中的路径为准。
- 解压TensorFlow安装包。
1
unzip tensorflow-2.13.0.zip
解压后的目录为“tensorflow-2.13.0”。
- 进入“tensorflow-2.13.0”目录。
1
cd tensorflow-2.13.0
- 执行configure,设置配置选项。
1
./configure
configure配置过程步骤解析:
- 确认可执行程序Python的位置。
1
Please specify the location of python. [Default is /usr/bin/python3]:
如果python3路径和上述默认相同,直接按“Enter”确认;否则,请输入正确的python3路径。
- 确认Python lib库的位置。
1
Please input the desired Python library path to use. Default is [/home/xxx/test]
如Python lib路径和上述默认相同,直接按“Enter”确认;否则,请输入正确的Python lib库的路径。
- 确认是否配置ROCm特性。
ROCm是指AMD的开源GPU加速计算平台,它可以在AMD的GPU上实现高性能计算。如果TensorFlow运行在AMD的GPU上,可以选择“y”;否则选择“N”。
1
Do you wish to build TensorFlow with ROCm support? [y/N]:
本文选择“N”。
1
No ROCm support will be enabled for TensorFlow.
- 确认是否配置CUDA特性。
CUDA是英伟达公司推出的一种并行计算平台和编程模型,它可以利用GPU的并行计算能力加速各种科学计算、图形处理、深度学习等应用程序。是否希望使用CUDA支持构建,如果需要则选择“y”;否则选择“N”。
1
Do you wish to build TensorFlow with CUDA support? [y/N]:
本文选择“N”。
1
No CUDA support will be enabled for TensorFlow.
- 确认是否配置最新的clang编译器。
如果编译环境上已有clang编译器,可以选择“N”;否则选择“y”。
1
Do you wish to download a fresh release of clang? (Experimental) [y/N]:
本文选择“N”。
1
Clang will not be downloaded.
- 配置编译选项。
1
Please specify optimization flags to use during compilation when bazel option "--config=opt" is specified [Default is -Wno-sign-compare]:
直接按“Enter”确认。
- 在构建Android应用程序时,确认是否设置工作空间。
构建非Android应用程序时,选择“N”;否则选择“y”。
1
"Would you like to interactively configure ./WORKSPACE for Android builds? [y/N]:"
本文选择“N”。
1
Not configuring the WORKSPACE for Android builds.
- 确认可执行程序Python的位置。
- 编译TensorFlow。
表1 部分扩展特性参数说明(详细配置请参见源码目录下的.bazelrc文件) config参数
描述
--config=mkl_aarch64
集成oneDNN和Arm架构计算库(ACL)特性。
--config=numa
集成NUMA特性。
--config=v1
使用TensorFlow 1.x版本的API替换TensorFlow 2.x版本的API。
- 从源码构建TensorFlow会在路径/root/.cache/bazel下产生编译临时文件,确保根路径剩余空间不少于8GB。
- 从源码构建TensorFlow会消耗大量内存资源,如果您的系统受内存限制,编译命令则需要添加参数--local_ram_resources,例如--local_ram_resources=2048表示将内存开销限制为2048MB。
- 从源码构建TensorFlow会消耗大量CPU资源,编译命令添加参数--local_cpu_resources可以对CPU资源进行限制,例如--local_cpu_resources=4表示占用4颗CPU资源(在终端执行lscpu命令,查看CPU数量,根据实际需要设置local_cpu_resources的值)。
以下介绍四种编译方法,请根据实际情况进行选择。
- 编译基础版本。
1
bazel build //tensorflow/tools/pip_package:build_pip_package
回显显示如上图信息,则表示编译成功。
- 编译开启mkl_aarch64特性的版本。
1
bazel build //tensorflow/tools/pip_package:build_pip_package --config=mkl_aarch64
回显显示如上图信息,则表示编译成功。
- 编译适配TensorFlow v1.x特性的版本。
1
bazel build //tensorflow/tools/pip_package:build_pip_package --config=v1
回显显示如上图信息,则表示编译成功。
- 编译开启NUMA特性的版本。
1
bazel build //tensorflow/tools/pip_package:build_pip_package --config=numa
回显显示如上图信息,则表示编译成功。
- 编译过程中可能会提示证书校验失败的问题,解决办法请参见编译TensorFlow 2.13.0源码时证书校验失败的解决办法。
- TensorFlow源码编译需要使用网络下载很多依赖组件的源码包,如果网络异常或者波动可能导致失败。请确认网络正常且能连通互联网,如果网络正常请再次尝试。或请参见编译TensorFlow 2.13.0时go_sdk下载失败的解决办法处理。
- 编译TensorFlow 2.13.0开启NUMA特性版本时依赖组件hwloc编译失败,提示关键信息为“external/hwloc/hwloc/topology.c:49:10: fatal error: sys/sysctl.h: No such file or directory”,解决办法请参见编译TensorFlow 2.13.0时依赖组件hwloc编译失败的解决办法。
- 构建TensorFlow pip软件包。
1
./bazel-bin/tensorflow/tools/pip_package/build_pip_package ./output
构建生成的pip软件包在“./output”目录下。
- 安装TensorFlow pip软件包。
1
pip3 install ./output/tensorflow-2.13.0-cp39-cp39-linux_aarch64.whl