适配TensorFlow
本文提供KDNN适配TensorFlow中矩阵算子(MatMul和FusedMatMul对应KDNN的Gemm算子)的方法。请参照本节内容操作,若操作不当,可能会引入未定义行为,请谨慎操作。
- 安装基础软件。
yum install gcc g++ zip python vim tar wget unzip
- 请参见《TensorFlow 移植指南》中的“安装Bazel”安装Bazel。TensorFlow编译时需要使用Bazel工具,TensorFlow 2.15.0依赖的Bazel版本为6.5.0,请下载Bazel 6.5.0版本。
- 从GitHub下载开源TensorFlow 2.15.0版本。
git clone -b v2.15.0 https://github.com/tensorflow/tensorflow.git
- 从GitCode下载优化补丁并合入开源TensorFlow目录中。
git clone -b master https://gitcode.com/boostkit/tensorflow.git sra-tensorflow cp /path/to/sra-tensorflow/0001-boostsra-tensorflow.patch /path/to/tensorflow/ cd /path/to/tensorflow && patch -p1 < 0001-boostsra-tensorflow.patch
- 安装依赖组件。
yum install patchelf perl python3-devel pip3 install numpy==1.24.3 pip3 install certifi==2023.7.22 pip3 install requests==2.31.0 pip3 install grpcio==1.59.0 pip3 install packaging 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所在目录,用户操作过程中请以实际编译环境中的路径为准。
- 准备KDNN头文件和静态库。
cd /path/to/tensorflow/third_party/KDNN cp -r /usr/local/kdnn/include . mkdir -p src && cp /usr/local/kdnn/lib/threadpool/libkdnn.a src
- 进入KDNN目录并合入头文件补丁,解决TensorFlow不支持exception机制问题。
patch -p0 < tensorflow_kdnn_include_adapter.patch
- 返回TensorFlow根目录,构建配置。请参见《TensorFlow 移植指南》中的“源码编译安装”章节配置编译选项。
cd ../.. ./configure
- 开始构建。
export TF_PYTHON_VERSION=3.9 bazel --output_user_root=../output build -c opt --define=enable_kdnn=true //tensorflow/tools/pip_package:build_pip_package
其中“../output”为指定的构建输出目录。
- 安装pip包。
./bazel-bin/tensorflow/tools/pip_package/build_pip_package ./output-kdnn pip3 install ./output-kdnn/tensorflow-2.15.0-cp39-cp39-linux_aarch64.whl
父主题: 如何使用KAIL