鲲鹏KDNN库释放硬件极致算力,助力搜推等AI场景推理性能跃升
KDNN算子库是一款专为鲲鹏服务器打造的深度神经网络DNN算子库是对标oneDNN的高性能算子库面向核心算子如矩阵乘、卷积、归一化、激活等进行了全链路的协同优化。KDNN在典型AI模型推理场景相比通用实现可取得显著加速展现出鲲鹏平台在深度学习场景下的强大潜力支撑鲲鹏搜推等AI场景在互联网客户界面竞争力持续提升。深度学习推理呼唤更懂鲲鹏的算子库业界主流的oneDNN库依托x86架构发挥极致性能而后端对Arm的兼容依托开源Eigen库和ACL库实现导致包括鲲鹏920新型号、950等系列处理器架构的硬件潜力在现有推理框架下难以充分释放存在显著的优化空间。在人工智能的广泛应用中DNN算子库扮演着“算力引擎”的角色。无论是云端推理还是科研训练AI模型的运行效率都深度依赖于底层算子的执行效率。DNN算子作为最核心的基础算子几乎贯穿所有主流模型从卷积神经网络到Transformer都是性能优化的关键瓶颈尤其在搜推等领域矩阵乘等DNN算子的性能直接决定了系统的响应速度与吞吐能力。面对数百亿级别的向量召回与实时排序请求算子层面的优化能够显著降低延迟、提升吞吐鲲鹏依托搜推解决方案规划了鲲鹏AI算子库KDNN为大规模在线服务提供坚实支撑。图1 鲲鹏搜推解决方案架构图鲲鹏AI推理场景依托KDNN释放鲲鹏极致算力鲲鹏KDNN的优化不仅停留在常规的SIMD向量化和Cache缓存调优层面更引入了JITJust-In-Time编译与BRGEMMBatch-Reduce GEMM 算法这两大关键技术。从而实现了对核心KDNN算子的深度加速为搜推等延迟敏感型AI应用提供了可靠的算力支撑。JIT协同BRGEMM突破矩阵运算瓶颈JIT编译技术可以根据运行时的矩阵规模和硬件特性动态生成最优内核代码避免通用内核的性能折损让算子性能在实际业务场景中始终保持最佳状态。BRGEMM算法针对搜索推荐、广告排序等领域的典型小批量矩阵乘需求KDNN通过批归约矩阵乘法显著提升计算效率在大规模Embedding交互与向量匹配任务中展现出明显优势。在FP32、FP16下KDNN相比oneDNN可实现更低时延。支持单线程和多线程两个版本为搜索推荐和广告排序等延迟敏感型AI应用提供可靠加速。图2 KDNN典型算子对比开源oneDNN算子性能提升无缝迁移见证性能跨越式增长KDNN不仅仅在性能上实现突破还在生态兼容性上做到了“开箱即用”。得益于模块化的设计KDNN算子库可以非常容易地对接到第三方深度学习框架。在主流的TensorFlow和PyTorch上KDNN已经沉淀了最优的开发实践开发者几乎无需额外改造就能直接获得性能加速效果。在搜索推广业务的落地实践中鲲鹏BoostKit将KDNN 无缝接入TensorFlow推理链路充分利用其JITBRGEMM优化的矩阵乘算子。结果显示典型Model Zoo模型下TensorFlowKDNN推理性能相比开源默认后端TensorFlowoneDNN平均提升1.36x在高并发请求场景中显著降低了延迟让广告排序系统能够在更短时间内完成更多候选的打分与筛选从而有效提升整体投放效率。图3 典型Model Zoo模型使能KDNN库对比开源性能提升三步接入即刻开启AI加速体验KDNN为开发者提供了一套高效的算子库能够在AI推理场景中显著提升性能。下面通过一个简洁的Quick Start展示如何获取KDNN库并在TensorFlow中完成接入。获取KDNN库开发者可以直接从鲲鹏社区获取编译好的静态库静态库以及头文件发布在https://gitcode.com/boostkit/boostsra的release。KDNN编程范式KDNN提供统一的编程范式开发者只需三步即可完成对接描述Tensor信息使用KDNN::TensorInfo指定张量的形状、数据类型和布局。构建算子对象以KDNN::Gemm为例构造时传入输入/权重/输出的TensorInfo以及线程池。执行计算调用Run()接口传入数据指针即可完成计算。接入TensorFlow Matmul算子示例在TensorFlow Matmul算子核心代码中插入KDNN适配接口// 对接KDNN FP32算子kdnnGemm的实现通过适配层提供#ifdefined(ENABLE_KDNN)else if (FLAGS_enable_kdnn std::is_sameT, float::value) {kdnnGemm(ctx, a, b, out, transpose_a_, transpose_b_);}#endifelse {LaunchMatMulDevice, T, USE_CUBLAS::launch(ctx, a, b, dim_pair, algorithms_, use_autotune_, out);}}适配层接口用于将TensorFlow的数据结构转化为KDNN的编程范式// inline void kdnnGemm(OpKernelContext* ctx, const Tensor a, const Tensor b, Tensor* out, bool trans_a_, bool trans_b) {int m a.dim_size(0);int n b.dim_size(1);int k a.dim_size(1);const float *A a.flatfloat().data();const float *B b.flatfloat().data();float *C out-flatfloat().data();// KDNN支持与Tensorflow线程池的良好对接thread::ThreadPool* thread_pool ctx-device()-tensorflow_cpu_worker_threads()-workers;kdnn::KDNNThreadPool kdnn_tp(thread_pool);// 构建KDNN的Tensor信息const KDNN::TensorInfo srcInfo {{m, k}, KDNN::Element::TypeT::F32, KDNN::Layout::AB};const KDNN::TensorInfo weightsInfo {{k, n}, KDNN::Element::TypeT::F32, KDNN::Layout::AB};const KDNN::TensorInfo dstInfo {{m, n}, KDNN::Element::TypeT::F32, KDNN::Layout::AB};// 构建KDNN Gemm算子KDNN::Gemm gemm(srcInfo, weightsInfo, dstInfo, kdnn_tp);// 执行Gemm计算gemm.Run(A, B, C);让极致性能触手可及KDNN的定位很明确——它是专为鲲鹏服务器打造的高性能DNN算子库通过JIT编译和BRGEMM算法把矩阵乘等核心算子性能发挥到极致。在搜索推荐、广告排序和生成式AI等业务场景中KDNN就像是算力加速器让模型跑得更快、更稳。KDNN不只是一个“黑盒子”它可以轻松对接TensorFlow、PyTorch等主流框架让开发者直接享受加速成果。想要深入了解KDNN的技术细节和最佳实践可以去鲲鹏社区浏览官方文档、示例和案例分享快速上手你的高性能AI应用。鲲鹏BoostKit搜推广开源社区主页https://gitcode.com/boostkit/boostsra鲲鹏社区搜推广主页https://www.hikunpeng.com/developer/boostkit/sra