有奖捉虫:办公协同&微信生态&物联网文档专题 HOT

优化接口

TACO Infer 为您提供了一套简单易用的模型优化接口。
对于 CPU 计算设备,优化接口为 optimize_cpu
def optimize_cpu(
input_model: Union[str, torch.nn.Module],
output_model_dir: str,
test_data: Optional[Dict[str, np.array]],
optimize_config: OptimizeConfig = OptimizeConfig(),
model_config: ModelConfig = ModelConfig(),
) -> Dict:
对于GPU计算设备,优化接口为optimize_gpu:
def optimize_gpu(
input_model: Union[str, torch.nn.Module],
output_model_dir: str,
test_data: Optional[Dict[str, np.array]] = None,
optimize_config: OptimizeConfig = OptimizeConfig(),
model_config: ModelConfig = ModelConfig(),
) -> Dict:
两种设备的优化接口输入参数完全一致。

输入参数说明

参数
是否必选
说明
input_model
必选
待优化的模型。对于 TensorFlow,该参数为模型文件所在路径。TACO Infer 支持 TensorFlow frozen pb 和 saved model 两种模型格式。对于 Pytorch,该参数可以是 torchscript 模型文件所在路径,也可以是 torch.nn.Module 对象实例。
output_model_dir
必选
优化后模型的保存目录。
test_data
必选
优化过程中需要使用到的模型输入的测试数据。TACO Infer 在优化模型的过程中需要使用测试数据对模型的性能,精度等指标进行评估,以指导模型优化过程。对于 TF 模型,该参数为 session run 所需的 feed_dict。
需注意,test_data 只接受 numpy array 数据格式。对于Pytorch 模型,该参数为模型 forward 方法或者用户自定义前向函数所需输入,此时 test data 仅接受包含 torch.Tensor 的 tuple,或 torch.Tensor(如果只有一个输入。

构建 test_data 的方式示例如下:
import numpy as np

def gen_test_data(batch_size = 1):
INPUT_NAME = "input:0"
image_size = 299
input_data = np.random.rand(batch_size, image_size, image_size, 3)
return {INPUT_NAME: input_data}
optimize_config
可选
优化配置。您可以通过它指导 TACO Infer 提供更高质量的优化:

通过 print(optimize_config)可以查看默认(或修改后的)配置。

通过 print(optimize_cfg.help()) 了解有哪些可配置项及如何配置。


model_config
可选
模型配置。例如,对于存在1个以上 signature 的 TF SavedModel,您可以通过配置
model_config
知会 TACO Infer 哪一个需要被优化:

通过 print(model_config)可以查看默认(或修改后的)配置。

通过 print(model_cfg.help())了解有哪些可配置项及如何配置。示例如下:
print(model_cfg.help())

How-to-assign-a-"model_config":
tensorflow.inputs:
type: <class 'list'>, default value: None
Input tensor names as a list. Items may use node name as prefix, such as "Placeholder:0", or saved model signature.

tensorflow.outputs:
type: <class 'list'>, default value: None
Output tensor names as a list.

tensorflow.saved_model.signature:
type: <class 'str'>, default value: None
Tell TACO Inf which signature to use if more than 1 signature.

Example of updating a config:
model_config.parse({"tensorflow.inputs": ['Placeholder:0']})



输出参数说明

优化模型后会产生一个 JSON 格式的优化报告,该报告包含了优化模型的硬件,软件以及一些总结信息。输出参数如下所示:
{
"hardware": {
"cpu": "AMD EPYC 7K62 48-Core Processor, family '23', model '49'",
"target device": "AMD EPYC 7K62 48-Core Processor, family '23', model '49'",
"reference": "https://en.wikichip.org/wiki/intel/cpuid"
},
"software": {
"framework": "tensorflow",
"framework version": "1.15.0"
},
"summary": {
"working_directory": "/root/taco_test/fast_transformer_encoder",
"input_model": "./model/fast-transformer-encoder.pb",
"output_model_dir": "./optimized_model",
"optimization time": "3min 46s 398ms",
"model format": "tensorflow frozen pb",
"status": "satisfactory",
"baseline latency": "49ms 517us",
"accelerated latency": "27ms 12us",
"speedup": "1.83"
}
}
输出字段说明如下:
hardware:硬件环境信息,包括设备类型、规格等。
software:软件环境信息,包括框架以及框架版本。
summary:模型优化的综合性信息,包括当前工作目录、输入模型路径、输出模型目录、优化时间、模型格式、运行状态、模型优化效果等。

Config 使用方式

OptimizeConfigModelConfig 使用方法是一致的。均支持通过 parse 接口设置相关属性的值,通过 "." 获取属性值或者赋值。Config 使用示例如下所示:
from taco import ModelConfig


cfg = ModelConfig()

# assign by parse()
cfg.parse({"tensorflow.inputs": ['Placeholder:0']})

print(cfg.tensorflow.inputs)

# assign by .
cfg.tensorflow.saved_model.signature = "predictions"

print(cfg.tensorflow.saved_model.signature)