安装指南
TensorFlow ANNC图编译优化
已验证环境
为保证您可以顺利安全地使用TensorFlow ANNC图编译优化特性,请确保所使用的环境信息在已验证环境范围内。
已验证的硬件环境如表 1 硬件要求所示。
已验证的操作系统如表 2 操作系统要求所示。
如果是全新安装操作系统,可选择“Minimal Install”安装方式并勾选Development Tools套件,否则很多软件包需要手动安装。 |
|||
已验证的软件依赖环境如表 3 软件要求所示。
GCC(GNU Compiler Collection)是一种编程语言编译器,用于将TF Serving编译为可执行文件。 |
|||
准备环境
请参见《TensorFlow Serving推理部署框架 移植指南》中的“配置编译环境”章节和表 3 软件要求,准备TF Serving编译环境。
编译安装
TensorFlow ANNC图编译优化特性后端已合入TensorFlow和TF Serving开源仓,图融合前端优化,XLA图融合,算子优化相关代码发布在Gitcode托管的ANNC开源仓,可使用git拉取完整代码后进行代码编译操作。
-
配置Git取消SSL验证。
git config --global http.sslVerify false git config --global https.sslVerify false -
拉取TensorFlow和TF Serving代码。
git clone --branch v2.15.0-2509 https://gitcode.com/boostkit/tensorflow.git git clone --branch v2.15.1-2509 https://gitcode.com/boostkit/tensorflow-serving.git -
拉取ANNC代码。
git clone --branch v0.0.2 https://gitcode.com/openeuler/ANNC.git
-
安装GCC 12.3.1版本。
yum install -y gcc-toolset-12-gcc* export PATH=/opt/openEuler/gcc-toolset-12/root/usr/bin/:$PATH export LD_LIBRARY_PATH=/opt/openEuler/gcc-toolset-12/root/usr/lib64/:$LD_LIBRARY_PATH -
编译安装ANNC。
export ANNC=/path/to/ANNC cd $ANNC source build.sh cp bazel-bin/annc/service/cpu/libannc.so /usr/lib64/ cp $ANNC/annc/service/cpu/xla/libs/XNNPACK/build/libXNNPACK.so /usr/lib64 mkdir -p /usr/include/annc cp annc/service/cpu/kdnn_rewriter.h /usr/include/annc/ cp annc/service/cpu/annc_flags.h /usr/include/annc/ cd python python3 setup.py bdist_wheel python3 -m pip install dist/*.whl --force-reinstall -
使能补丁。
export TF_PATH=/path/to/tensorflow export XLA_PATH=/path/to/tensorflow/third_party/xla cd $ANNC/install/tfserver/xla bash xla2.sh使能补丁成功如图 1 使能补丁成功示意图所示。
-
进入“tensorflow-serving”目录。
cd /path/to/tensorflow-serving/ -
创建编译依赖存储目录
export DISTDIR=$(pwd)/download mkdir -p $DISTDIR -
设置Bazel编译工具路径,需指向Bazel可执行文件所在的目录。
export BAZEL_PATH=/path/to/bazel -
执行构建脚本编译。
sh compile_serving.sh --tensorflow_dir /path/to/tensorflow --features gcc12,annc“/path/to/tensorflow”指定TensorFlow路径。
构建的结果为TF Serving二进制文件“tensorflow_model_server”,文件路径为“/path/to/tensorflow-serving/bazel-bin/tensorflow_serving/model_servers/tensorflow_model_server”。
以上构建脚本编译命令中gcc12表示使用GCC 12.3.1版本编译。构建脚本中执行的编译命令为:
bazel --output_user_root=$BAZEL_COMPILE_CACHE build -c opt --distdir=$DISTDIR --override_repository=org_tensorflow=$TENSORFLOW_DIR \ --copt=-march=armv8.3-a+crc --copt=-O3 --copt=-fprefetch-loop-arrays --copt=-Wno-error=maybe-uninitialized \ --copt=-Werror=stringop-overflow=0 --config=fused_embedding \ --define tflite_with_xnnpack=false tensorflow_serving/model_servers:tensorflow_model_server其中部分参数介绍如下:
-
--output_user_root:Bazel编译缓存目录,默认为“/path/to/tensorflow-serving/output”。可通过环境变量BAZEL_COMPILE_CACHE设置自定义路径,命令如下。
export BAZEL_COMPILE_CACHE=/path/to/your/cache_dir -
--distdir:TF Serving编译依赖存放目录,用来解决第三方依赖包下载失败问题。
-
--override_repository:指定使用本地TensorFlow构建,使用tensorflow_dir指定目录作为本地TensorFlow。
-
TensorFlow Serving线程调度优化
已验证环境
已验证的硬件环境如表 1 硬件要求所示。
已验证的操作系统如表 2 操作系统要求所示。
如果是全新安装操作系统,可选择“Minimal Install”安装方式并勾选Development Tools套件,否则很多软件包需要手动安装。 |
|||
已验证的软件依赖环境如表 3 软件要求所示。
GCC(GNU Compiler Collection)是一种编程语言编译器,用于将TF Serving编译为可执行文件。 |
|||
准备环境
请参见《TensorFlow Serving推理部署框架 移植指南》中的“配置编译环境”章节,准备TF Serving编译环境。
编译安装
TensorFlow Serving线程调度优化特性相关Patch已合入TensorFlow和TF Serving开源代码仓,代码仓在Gitee托管,可使用Git拉取完整代码后进行代码编译操作。
-
配置Git取消SSL验证。
git config --global http.sslVerify false git config --global https.sslVerify false -
拉取代码。
git clone https://gitee.com/openeuler/sra_tensorflow_adapter.git -b v2.15.1.0
-
安装GCC 12.3.1版本。
yum install -y gcc-toolset-12-gcc* PATH=/opt/openEuler/gcc-toolset-12/root/usr/bin/:$PATH LD_LIBRARY_PATH=/opt/openEuler/gcc-toolset-12/root/usr/lib64/:$LD_LIBRARY_PATH -
进入sra_tensorflow_adapter目录。
cd sra_tensorflow_adapter/ -
创建编译依赖存储目录,路径为“/path/to/sra_tensorflow_adapter/serving/download”。
export DISTDIR=$(pwd)/serving/download mkdir -p $DISTDIR -
设置Bazel编译工具路径,需指向bazel可执行文件所在的目录。
export BAZEL_PATH=/path/to/bazel -
执行构建脚本编译。
sh compile_serving.sh gcc12构建产物为TF Serving二进制文件“tensorflow_model_server”,文件路径为“/path/to/sra_tensorflow_adapter/serving/bazel-bin/tensorflow_serving/model_servers/tensorflow_model_server”。
以上构建脚本编译命令中gcc12表示使用GCC 12.3.1版本编译。构建脚本中执行的编译命令为:
bazel --output_user_root=$BAZEL_COMPILE_CACHE build -c opt --distdir=$DISTDIR --override_repository=org_tensorflow=$TENSORFLOW_DIR --copt=-march=armv8.3-a+crc --copt=-O3 --copt=-fprefetch-loop-arrays --copt=-Wno-error=maybe-uninitialized --copt=-Werror=stringop-overflow=0 tensorflow_serving/model_servers:tensorflow_model_server其中部分参数介绍如下:
-
output_user_root:Bazel编译缓存目录,默认为“/path/to/sra_tensorflow_adapter/serving/output”。可通过环境变量BAZEL_COMPILE_CACHE设置自定义路径,命令如下。
export BAZEL_COMPILE_CACHE=/path/to/your/cache_dir -
distdir:TF Serving编译依赖存放目录,用来解决第三方依赖包下载失败问题。
-
override_repository:指定使用本地TensorFlow构建,将自动识别“/path/to/sra_tensorflow_adapter/tensorflow”目录作为构建依赖。
-
TensorFlow集成KDNN
KDNN(Kunpeng Deep Neural Network Library,鲲鹏DNN库)是华为提供的基于鲲鹏平台优化的高性能AI算子库,其中MatMul、FusedMatMul、SparseMatMul算子已经适配TensorFlow。集成KDNN可以降低NN类算子的时延,大幅增强模型推理性能。
-
获取GCC版本的KDNN软件包,用户解压zip文件后可获取RPM安装包。
-
安装KDNN。
rpm -ivh boostcore-kdnn-3.0.0-1.aarch64.rpm头文件安装目录为“/usr/local/kdnn/include”,库文件安装目录为“/usr/local/kdnn/lib/threadpool”、“/usr/local/kdnn/lib/omp”。
-
将KDNN头文件和静态库安装到“/path/to/tensorflow/third_party/KDNN”目录。
export TF_PATH=/path/to/tensorflow mkdir -p $TF_PATH/third_party/KDNN/src cp -r /usr/local/kdnn/include $TF_PATH/third_party/KDNN cp -r /usr/local/kdnn/lib/threadpool/libkdnn.a $TF_PATH/third_party/KDNN/src -
进入KDNN目录合入头文件补丁,解决TensorFlow不支持exception机制问题。
cd $TF_PATH/third_party/KDNN patch -p0 < $TF_PATH/third_party/KDNN/tensorflow_kdnn_include_adapter.patch -
执行构建脚本编译。
cd /path/to/serving sh compile_serving.sh --tensorflow_dir /path/to/tensorflow --features gcc12,kdnn
TensorFlow KDNN线程直通
已验证环境
已验证的硬件环境如表1 硬件要求所示。
已验证的操作系统如表2 操作系统要求所示。
如果是全新安装操作系统,可选择“Minimal Install”安装方式并勾选Development Tools套件,否则很多软件包需要手动安装。 |
|||
已验证的软件依赖环境如表3 软件要求所示。
GCC(GNU Compiler Collection)是一种编程语言编译器,用于将TF Serving编译为可执行文件。 |
|||
编译环境安装
-
请从GitCode上获取对应的件安装包。
表 1 KDNN软件包获取列表
-
将获取到的KDNN软件包,解压,解压后得到二进制RPM包。
-
装KDNN的RPM包。
rpm -ivh boostcore-kdnn-xxxx.aarch64.rpm安装结束后,头文件和静态库、动态库文件目录分别为“/usr/local/kdnn/include”和“/usr/local/kdnn/lib/threadpool”、“/usr/local/kdnn/lib/omp”。
上述命令中涉及的xxxx代表版本号。
编译安装
请参见《KDNN 最佳实践》文档中的“适配TensorFlow”章节执行TensorFlow适配步骤,其中patch补丁需要替换为0001-tensorflow_2.15.0-optimize.patch。
常见问题
编译构建TensorFlow和TensorFlow Serving过程中若出现问题,请参见以下内容进行解决。
-
提示“unable to find valid certification path to requested target”证书校验失败,解决办法请参见《TensorFlow 移植指南》的“编译TensorFlow 2.13.0源码时证书校验失败的解决办法”章节。
-
提示“Error in download_and_extract”,解决办法请参见《TensorFlow Serving推理部署框架 移植指南》的“下载TF-Serving源码依赖失败的解决办法”章节,其中提及的--distdir指定的目录为“/path/to/tensorflow-serving/download“。
-
提示拉取org_boost依赖库失败,解决办法请参见《TensorFlow Serving推理部署框架 移植指南》的“获取org_boost子仓依赖时失败的解决办法”章节。
-
提示没有golang网站证书,解决办法请参见《TensorFlow Serving推理部署框架 移植指南》的“没有golang网站证书问题的解决办法”章节。
-
编译ANNC时提示golang下载失败,解决办法请参见《TensorFlow Serving推理部署框架 移植指南》的“下载TF-Serving源码依赖失败的解决办法”章节,其中提及的--distdir可在build.sh脚本里指定。
-
提示编译upb.c文件错误,解决办法请参见《TensorFlow Serving推理部署框架 移植指南》的“upb.c编译语法报错”章节。
