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

原理描述

首先介绍TF Serving推理时使用的线程池,以更好理解本特性的工作原理,从而根据实际场景决定特性的开关和设置。

图1 TF Serving线程池运行视图

TF Serving用于推理的线程大致分为两类:通信线程和计算线程。

通信线程:

  • grpcpp_sync_ser线程,处理客户端推理请求,包含请求解析、启动推理、请求返回等任务。

计算线程:

  • tf_Compute线程,处理算子间的并行计算任务。
  • tf_numa_-1_Eige线程,处理算子内部的并行计算任务。

当开启XLA特性时,将创建用于XLA计算的线程:

  • host_executor线程,处理XLA算子间的并行计算任务。
  • tf_XLAEigen线程,处理XLA算子内部的并行计算任务。

整体推理请求流程如图2所示。

图2 推理请求处理流程图

客户端发送推理请求到grpcpp_sync_ser线程解析,然后启动Session执行推理,tf_Compute/host_executor线程并行执行不同的算子,tf_numa_-1_Eige/tf_XLAEigen线程执行算子内部的并发计算。

鲲鹏BoostKit改进了算子调度算法,采用算子批量调度,改进后,整体推理流程如图3所示。

图3 优化后推理流程图

客户端发送推理请求到grpcpp_sync_ser线程解析,并启动Session执行推理,算子按顺序在tf_Compute线程串行执行计算,取消了算子内部的并发计算。

改进后,减少了Session间推理任务的互相干扰,使得单个Session能够以更低的时延完成推理,并增强了TF Serving的并发性能。同时注意到通信线程和计算线程处理的是不同类型的任务,可以设置线程亲和性进行隔离,也能获得一定的性能收益。

线程调度特性支持的功能:

  • 算子批量调度,通过--batch_op_scheduling配置,提升高并发场景下的吞吐量。
  • 优化XLA线程池管理,与算子批量调度功能同步使能,将XLA算子调度到当前线程,减少线程上下文切换开销。
  • 支持线程亲和性隔离,通过--task_affinity_isolation配置,可以将通信线程和计算线程绑定在不同的CPU核心上。

功能配置的详细说明请见使用说明