---
title: 集成KDNN
description: "集成KDNN（Kunpeng Deep Neural Network Library，鲲鹏DNN库），降低NN类算子的时延，大幅增强模型推理性能。本节提供用户集成KDNN到Benchmark框架的方法。"
url: https://www.hikunpeng.com/document/detail/zh/SRA/perfEval/benchmarksra/kunpengmodelzoo_06_0028.html
sourcePath: /source/zh/SRA/perfEval/benchmarksra/kunpengmodelzoo_06_0028.html
indexId: f8afb34a8c4ad4ef9938121accef6a4c94d44a2b653654cea6215401ac3ee6ae65
---
# 集成KDNN

集成KDNN（Kunpeng Deep Neural Network Library，鲲鹏DNN库），降低NN类算子的时延，大幅增强模型推理性能。本节提供用户集成KDNN到Benchmark框架的方法。

KDNN是华为提供的基于鲲鹏平台优化的高性能AI算子库，其中MatMul、FusedMatMul、SparseMatMul算子已经适配TensorFlow。

1. 获取GCC版本的KDNN软件包(https://gitcode.com/boostkit/boostsra/releases/download/v1.1.0/BoostKit-boostcore-kdnn_3.0.0.zip)，用户解压zip文件后可获取RPM安装包。
2. 安装KDNN。
  1 rpm -ivh boostcore-kdnn-xxxx.aarch64.rpm

  头文件安装目录为“/usr/local/kdnn/include”，库文件安装目录为“/usr/local/kdnn/lib/threadpool”、“/usr/local/kdnn/lib/omp”。

  上述命令中涉及的xxxx代表版本号。

3. 将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
```


4. 进入KDNN目录合入头文件补丁，解决TensorFlow不支持exception机制问题。

```
cd $TF_PATH/third_party/KDNN
patch -p0 < $TF_PATH/third_party/KDNN/tensorflow_kdnn_include_adapter.patch
```


5. 执行构建脚本编译。
  1 2 cd /path/to/serving sh compile_serving.sh --tensorflow_dir /path/to/tensorflow --features gcc12,kdnn

6. 集成后验证。

  a. 启动服务端。
    1 numactl -N 0 /path/to/serving/bazel-bin/tensorflow_serving/model_servers/tensorflow_model_server --port=8889 --model_name=deepfm --model_base_path=/path/to/model_zoo/models/deepfm --tensorflow_intra_op_parallelism=1 --tensorflow_inter_op_parallelism=-1 --xla_cpu_compilation_enabled=true

    numactl -N 0表示将程序绑定到第0个NUMA节点上运行。

  b. 启动客户端性能测试。
    1 docker run -it --rm --cpuset-cpus="$(cat /sys/devices/system/node/node0/cpulist)" --cpuset-mems="0" --net host nvcr.io/nvidia/tritonserver:24.05-py3-sdk perf_analyzer --concurrency-range 28:28:1 -p 8000 -f perf.csv -m deepfm --service-kind tfserving -i grpc --request-distribution poisson -b 128 -u localhost:8889 --percentile 99 --input-data=random

    --cpuset-cpus：设置容器绑定的CPU核编号。 --cpuset-mems：设置容器绑定的NUMA内存节点。

    性能测试启动后，服务端打印“KDNN custom operations are on. You may see slightly different numerical results due to floating-point round-off errors from different computation orders. To turn them off, set the environment variable `TF_ENABLE_KDNN_OPTS=0`”即表示使能成功。

    KDNN默认使能，可以通过设置环境变量TF_ENABLE_KDNN_OPTS=0关闭KDNN。
