API参考
TensorFlow ANNC图编译优化特性使用说明
TensorFlow ANNC图编译优化特性提供了TensorFlow图融合、XLA图融合、算子优化三种优化特性,本章节提供各特性的使能步骤。
TensorFlow图融合
TensorFlow图融合接口使用如表 1 TensorFlow图融合接口所示。
表 1 TensorFlow图融合接口
终端命令行接口
|
annc-opt
|
接口功能
|
图融合启动命令。
|
参数说明
|
- -I /path/to/save_model.pb:待图融合的模型
- -O /path/to/new_save_model.pb:图融合之后的模型
- pass:图融合策略(当前支持lookup_embedding_hash)
|
使用示例
|
annc-opt -I /base_model/wide_and_deep/1/ -O /optimized_model/wide_and_deep/1/ lookup_embedding_hash
cp -r /base_model/wide_and_deep/1/variables /optimized_model/wide_and_deep/1/
|
XLA图融合
XLA图融合接口如表 2 XLA图融合接口所示。
表 2 XLA图融合接口
环境变量
|
ANNC_FLAGS
|
接口功能
|
编译ANNC,使能XLA图融合优化。
|
使用示例
|
export ANNC_FLAGS="--graph-opt"
|
取值范围
|
环境变量为“--graph-opt”开启特性。
|
算子优化
算子优化接口如表 3 冗余算子优化接口,表 4 矩阵算子优化接口,表 5 Softmax算子优化接口所示。
表 3 冗余算子优化接口
环境变量
|
ENABLE_BISHENG_GRAPH_OPT
|
接口功能
|
使能冗余算子优化。
|
使用示例
|
export ENABLE_BISHENG_GRAPH_OPT=""
|
取值范围
|
环境变量非空时开启特性。
|
表 4 矩阵算子优化接口
环境变量
|
ANNC_FLAGS
|
接口功能
|
使能矩阵算子优化。
|
使用示例
|
export ANNC_FLAGS="--gemm-opt"
|
取值范围
|
环境变量为“--gemm-opt”开启特性。
|
表 5 Softmax算子优化接口
环境变量
|
XLA_FLAGS
|
接口功能
|
使能Softmax算子优化。
|
使用示例
|
export XLA_FLAGS="--xla_cpu_enable_xnnpack=true"
|
取值范围
|
环境变量为“--xla_cpu_enable_xnnpack=true”开启特性。
|
TensorFlow Serving线程调度特性使用说明
算子批量调度
鲲鹏TensorFlow Serving线程调度优化通过命令行提供了算子批量调度和线程亲和性隔离两个特性开关,用户可根据实际场景自行配置。
使用TF Serving启动推理压测指导请参见《TensorFlow Serving推理部署框架 移植指南》的“启动服务并压测”章节。
TF Serving命令行接口
|
--batch_op_scheduling
|
接口功能
|
使能算子调度优化和XLA线程池管理优化特性。
|
参数类型
|
bool
|
取值范围
|
true/false。true为真,表示开启特性,默认为false。
|
推荐场景
|
单核推理时延可满足业务要求,可配置该选项提升推理并发能力和吞吐量。
|
推荐配置
|
- --tensorflow_intra_op_parallelism=1,算子内并行度设置为1;
- --tensorflow_inter_op_parallelism=80,算子间并行度设置为CPU核数;
- --batch_op_scheduling=true,开启算子批量调度特性。
|
使用示例
|
/path/to/tensorflow_model_server --port=8850 --rest_api_port=8851 --model_base_path=/path/to/saved_model/ --model_name=model --tensorflow_intra_op_parallelism=1 --tensorflow_inter_op_parallelism=80 --batch_op_scheduling=true
|
线程亲和性隔离
TF Serving命令行接口
|
--task_affinity_isolation
|
接口功能
|
使能线程亲和性隔离特性,有两种隔离方式:
- 顺序绑核,TensorFlow计算线程绑定到前K个核,TF Serving通信线程绑定到其余核。
- 交叉绑核,适用于开启超线程的场景,将TensorFlow线程绑定到物理核,TF Serving通信线程绑定到虚拟核。
|
参数类型
|
std::string。
|
参数格式
|
mode;m-n;k,默认0。
|
取值范围
|
请参见线程亲和性隔离参数格式取值说明。
|
推荐场景
|
- 使用TensorFlow调度方式运行时,推荐设置为顺序绑核;
- 与--batch_op_scheduling选项同时使能,并开启超线程时,推荐设置为交叉绑核。
|
使用示例
|
一台160个物理核的服务器,开启超线程共320个核心,4个NUMA,每个NUMA上80个核心。
|
表 1 线程亲和性隔离参数格式取值说明
参数
|
取值范围
|
含义
|
约束
|
mode
|
0、1、2
|
- 0:OFF,不使能线程亲和。
- 1:ORDER,按顺序绑核。
- 2:INTERVAL,交叉绑核。
|
mode=0时,m-n、k两个参数无效(可不填)。
|
m-n
|
可用的CPU核
|
绑核范围[m, n]。
|
m <= n。
|
k
|
可用的CPU核
|
分配给TensorFlow线程的核数。
|
k <= n - m + 1,即不大于绑核总数;mode=2时,参数k无效(可不填)。
|
说明:
numactl是一个在Linux系统上用于控制和管理NUMA(非统一内存访问,Non-Uniform Memory Access)架构的工具。可通过yum工具安装:
yum install -y numactl numactl-devel
numactl -C 0-79 -m 0是限定TF Serving服务运行在NUMA 0对应的核上,以该方式启动可以充分利用CPU资源,-C指定NUMA 0对应的核,-m指的是使用NUMA 0对应的内存。
TensorFlow KDNN线程直通特性使用说明
TensorFlow KDNN线程直通特性开关通过KDNN特性开关控制,具体说明如表1 KDNN特性开关所示
表 1 KDNN特性开关
KDNN特性开关
|
TF_ENABLE_KDNN_OPTS
|
类型
|
进程环境变量
|
功能
|
控制开启KDNN优化特性
|
变量取值
|
0:KDNN关闭
1:KDNN开启
|
使用示例
|
首次调用KDNN算子前设置进程环境变量TF_ENABLE_KDNN_OPTS,例如python内可以通过命令os.environ['TF_ENABLE_KDNN_OPTS'] = str(1)设置进程环境变量。
|