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个核心。

  • 如果使用TensorFlow调度方式运行,运行参数可参考:
    numactl -C 0-79 -m 0 /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=75 --tensorflow_inter_op_parallelism=75 --task_affinity_isolation="1;0-79;75"
  • 如果使能了--batch_op_scheduling选项,--tensorflow_inter_op_parallelism参数推荐设置为物理核数量,其他运行参数可参考:
    numactl -C 0-79 -m 0 /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=40 --batch_op_scheduling=true --task_affinity_isolation="2;0-79"

表 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)设置进程环境变量。