原理描述
首先介绍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所示。
客户端发送推理请求到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核心上。
功能配置的详细说明请见使用说明。
父主题: 特性描述