腾讯云计算加速套件TACO KitTACO Infer 接口

计算加速套件 TACO Kit 1年前 (2023-12-11) 浏览 127

优化接口

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: NoneInput 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: NoneOutput tensor names as a list.
tensorflow.saved_model.signature:type: <class 'str'>, default value: NoneTell 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)



官网1折活动,限时活动,即将结束,速速收藏
同尘科技为腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利。同意关联立享优惠

- 0人点赞 -

发表点评 (0条)

not found

暂无评论,你要说点什么吗?