鲲鹏社区首页
中文
注册
开发者
我要评分
获取效率
正确性
完整性
易理解
在线提单
论坛求助

适配TensorFlow

本文提供KDNN适配TensorFlow中矩阵算子(MatMul和FusedMatMul对应KDNN的Gemm算子)的方法。请参照本节内容操作,若操作不当,可能会引入未定义行为,请谨慎操作。

  1. 安装基础软件。
    yum install gcc g++ zip python vim tar wget unzip 
  2. 请参见《TensorFlow 移植指南》中的“安装Bazel”安装Bazel。TensorFlow编译时需要使用Bazel工具,TensorFlow 2.15.0依赖的Bazel版本为6.5.0,请下载Bazel 6.5.0版本。
  3. 从GitHub下载开源TensorFlow 2.15.0版本。
    git clone -b v2.15.0 https://github.com/tensorflow/tensorflow.git 
  4. 从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
  5. 安装依赖组件。
    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所在目录,用户操作过程中请以实际编译环境中的路径为准。

  6. 准备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
  7. 进入KDNN目录并合入头文件补丁,解决TensorFlow不支持exception机制问题。
    patch -p0 < tensorflow_kdnn_include_adapter.patch
  8. 返回TensorFlow根目录,构建配置。请参见《TensorFlow 移植指南》中的“源码编译安装”章节配置编译选项。
    cd ../..
    ./configure
  9. 开始构建。
    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”为指定的构建输出目录。

  10. 安装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