优化接口
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 的方式示例如下:
|
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()) 了解有哪些可配置项及如何配置。示例如下:
|
输出参数说明
优化模型后会产生一个 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 使用方式
OptimizeConfig
和 ModelConfig
使用方法是一致的。均支持通过 parse
接口设置相关属性的值,通过 ".
" 获取属性值或者赋值。Config 使用示例如下所示:from taco import ModelConfigcfg = 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)