特性介绍
TensorFlow ANNC图编译优化特性
简介
本章节介绍了TensorFlow ANNC(Accelerated Neural Network Compiler)图编译优化特性的基本概念和实现原理。
为提升TensorFlow Serving(以下简称TF Serving)推理性能,鲲鹏BoostKit提出了TensorFlow ANNC图编译优化方案。ANNC是专注于加速神经网络计算的编译器,聚焦于通过计算图优化,高性能融合算子生成和对接技术,高效代码生成和优化能力,加速推荐的推理性能。ANNC作为基于开源OpenXLA(Open Accelerated Linear Algebra)的扩展加速套件,发布在openEuler组织的ANNC开源仓,具有鲲鹏亲和的优化特性,包括TensorFlow图融合、XLA(Accelerated Linear Algebra)图融合、算子优化。
ANNC优化特性通过编译选项和代码补丁的方式接入TensorFlow推理框架和XLA,基于TensorFlow Serving/TensorFlow 2.15版本新增以下特性:
- TensorFlow图融合:提供TensorFlow模型层面的图融合与图重写功能。
- XLA图融合:提供ANNC XLA图融合特性。
- 算子优化:提供ANNC算子优化特性。
说明: OpenXLA是一个由高性能、可移植、可扩展的机器学习基础架构组件组成的开放生态系统。 XLA是一种开源机器学习编译器。XLA编译器从TensorFlow框架获取模型,并优化模型以便在不同硬件平台(包括GPU、CPU和机器学习加速器)上实现高性能执行。
软件架构
TF Serving软件架构如图 1 TF Serving软件架构所示,组件功能如表 1 TF Serving软件组件功能介绍所示。

TensorFlow提供的一种标准化的模型保存格式,训练好的模型能够在不同的TensorFlow环境中进行导入、推理和再训练。 |
|
应用场景
TensorFlow ANNC图编译优化特性主要在推荐系统和广告投放中使用。对于高并发粗排模型推理场景优化效果明显,表现在吞吐量的提升和推理时延大幅下降。
原理描述
本节针对TensorFlow/XLA的优化特性进行描述,以帮助用户更好地使用。
在TensorFlow模型中存在一些子图包含冗余计算,通过识别特定的图模式,将子图中的多个算子融合为一个“融合算子”,能够避免冗余计算,优化访存,提升模型推理性能,如图 1 TensorFlow图融合示意图所示。本功能在前端提供TensorFlow模型层面的图融合与图重写功能,在后端提供“自定义融合算子”的手动实现。

XLA自身提供了多种与硬件无关的图融合优化策略,但是优化后的聚类(包括融合部分)仍可能包含重复计算,即多个融合操作之间存在相同或可合并的子表达式。如图 2 XLA图融合示意图所示,本功能旨在识别融合后的重复计算,如图 2 XLA图融合示意图中F1操作;并通过预融合策略消除冗余计算,如图 2 XLA图融合示意图中F4、F5、F6操作的融合,以进一步提升模型推理效率。

本功能包含各阶段的算子优化,包括将MatMul(Matrix Multiplication)算子下发至XLA,调用OpenBLAS(Open Basic Linear Algebra Subprograms)所提供的GEMM(General Matrix Multiplication)运算接口,包括将Softmax函数替换为更高效的实现;同时本功能通过识别特定的操作模式,减少其中的冗余操作,进一步提升模型的推理性能,例如:针对多个切片后进行拼接的模式,删除其中冗余的切片操作。
功能配置的详细说明请参见《快速入门》。
TensorFlow Serving 线程调度优化特性
简介
本章节介绍了TensorFlow Serving线程调度优化特性的基本概念和实现原理。
为提升TensorFlow Serving(以下简称TF Serving)推理性能,鲲鹏BoostKit提出了TensorFlow Serving线程调度优化方案。传统TensorFlow使用算子间的线程池并行计算不同的算子,虽可实现没有数据依赖的算子的并发执行,但在高并发场景下,多Session共享算子间线程池会导致任务抢占,严重降低整图计算效率。针对这一痛点,鲲鹏BoostKit TensorFlow Serving线程调度优化特性改进了算子调度算法,并加入了其他线程管理优化,有效提升了高并发场景下的模型推理吞吐量。
TensorFlow Serving线程调度优化特性以Patch的方式实现,并合入了openEuler组织的sra_tensorflow_adapter开源仓库,基于TF Serving/TensorFlow 2.15版本新增以下两种特性开关:
-
算子批量调度(--batch_op_scheduling):使能算子调度优化和XLA线程池管理优化特性。如果单核推理时延可满足业务要求,可配置该选项提升推理并发能力和吞吐量。
-
线程亲和性隔离(--task_affinity_isolation)提供以下两种隔离方式。使用TensorFlow调度方式运行时,推荐设置为顺序绑核;与--batch_op_scheduling选项同时使能,并开启超线程时,推荐设置为交叉绑核。
- 顺序绑核,TensorFlow计算线程绑定到前K个核,TF Serving通信线程绑定到其余核。
- 交叉绑核,适用于开启超线程的场景,将TensorFlow线程绑定到物理核,TF Serving通信线程绑定到虚拟核。
说明: XLA(Accelerated Linear Algebra)是TensorFlow中的优化编译器,用于加速线性代数操作的执行。XLA通过将TensorFlow的计算图转换成高效的、低级别的硬件指令,从而提升计算性能。
软件架构
TF Serving软件架构如图 1 TF Serving软件架构所示,模块功能如表 1 TF Serving软件模块功能介绍所示。

TensorFlow提供的一种标准化的模型保存格式,训练好的模型能够在不同的TensorFlow环境中进行导入、推理和再训练。 |
应用场景
TensorFlow Serving线程调度优化特性对不同推理场景提供了灵活有效的选项。
- 对于高并发粗排模型推理场景优化效果明显,表现在吞吐量的提升和推理时延大幅下降。
- 对于并发不高且时延敏感的场景,合理配置线程管理参数也能达到优化效果。
原理描述
首先介绍TF Serving推理时使用的线程池,以更好理解本特性的工作原理,从而根据实际场景决定特性的开关和设置。

TF Serving用于推理的线程大致分为两类:通信线程和计算线程。
通信线程:
- grpcpp_sync_ser线程,处理客户端推理请求,包含请求解析、启动推理、请求返回等任务。
计算线程:
- tf_Compute线程,处理算子间的并行计算任务。
- tf_numa_-1_Eige线程,处理算子内部的并行计算任务。
当开启XLA特性时,将创建用于XLA计算的线程:
- host_executor线程,处理XLA算子间的并行计算任务。
- tf_XLAEigen线程,处理XLA算子内部的并行计算任务。
整体推理请求流程如图 2 推理请求处理流程图所示。

客户端发送推理请求到grpcpp_sync_ser线程解析,然后启动Session执行推理,tf_Compute/host_executor线程并行执行不同的算子,tf_numa_-1_Eige/tf_XLAEigen线程执行算子内部的并发计算。
鲲鹏BoostKit改进了算子调度算法,采用算子批量调度,改进后,整体推理流程如图 3 优化后推理流程图所示。

客户端发送推理请求到grpcpp_sync_ser线程解析,并启动Session执行推理,算子按顺序在tf_Compute线程串行执行计算,取消了算子内部的并发计算。
改进后,减少了Session间推理任务的互相干扰,使得单个Session能够以更低的时延完成推理,并增强了TF Serving的并发性能。同时注意到通信线程和计算线程处理的是不同类型的任务,可以设置线程亲和性进行隔离,也能获得一定的性能收益。
线程调度特性支持的功能:
- 算子批量调度,通过--batch_op_scheduling配置,提升高并发场景下的吞吐量。
- 优化XLA线程池管理,与算子批量调度功能同步使能,将XLA算子调度到当前线程,减少线程上下文切换开销。
- 支持线程亲和性隔离,通过--task_affinity_isolation配置,可以将通信线程和计算线程绑定在不同的CPU核心上。
功能配置的详细说明请参见《快速入门》。
TensorFlow KDNN线程直通
简介
本章节介绍了TensorFlow KDNN线程池直通优化特性的基本概念和实现原理,并详细指导用户基于鲲鹏920新型号处理器在openEuler 24.03 LTS SP3操作系统中安装并使用TensorFlow KDNN线程池直通优化特性。
为提升TensorFlow推理性能,鲲鹏BoostKit提出了TensorFlow KDNN线程池直通优化方案。KDNN提供了推理核心算子基于鲲鹏CPU硬件的高性能实现,在原有的kernels实现层使用dispatch组件将支持KDNN的算子分发到KDNN后端。KDNN线程池直通是通过KDNN将计算任务提交到框架线程池统一调度方式,复用框架线程池,减少线程创建销毁的时间损耗。
优化特性通过编译选项和代码补丁的方式接入TensorFlow,基于TensorFlow 2.15版本增加KDNN特性开关:
KDNN线程直通:开启KDNN优化特性条件下,如果算子输入输出满足约束会调用KDNN库,KDNN将计算任务提交到框架线程池统一调度,复用框架线程池。
软件架构
KDNN对接TensorFlow软件架构图如图1所示。
规格
本节介绍当前已经支持KDNN线程直通特性的算子及使用规格
已经支持KDNN线程直通特性的算子约束如表1 KDNN线程直通特性支持范围所示。
表 1 KDNN线程直通特性支持范围
说明: 开启KDNN优化特性条件下,如果算子输入输出满足约束会调用KDNN,否则使用tensorflow原生接口。
应用场景
TensorFlow KDNN线程直通优化特性主要在高并发推理场景中使用,表现在吞吐量的提升和推理时延大幅下降。
原理描述
本节针对KDNN Threadpool线程直通的优化特性进行描述,以帮助用户更好地使用。
OMP版本的KDNN中,每个算子将创建N个OMP线程计算,M个Kernel并发则会创建M*N个OMP线程。
使能线程直通后,会复用框架线程池,KDNN将计算任务提交到框架线程池统一调度,降低了线程创建的损耗同时避免了线程数爆炸的问题。


