背景
Paddle Python预测程序开发说明
- 首先使用
paddle.inference.Config(xx,xx)
方法创建config
然后根据paddle.inference.create_predictor(config)
创建predictor
最后根据 predictor.run()
方法执行一步推理import argparseimport numpy as npimport paddle.inference as paddle_inferdef parse_args(): parser = argparse.ArgumentParser() parser.add_argument("--model_file", type=str, help="model filename") parser.add_argument("--params_file", type=str, help="parameter filename") parser.add_argument("--batch_size", type=int, default=1, help="batch size") # 调用parse_args()方法解析命令行参数 return parser.parse_args()def main(): args = parse_args() # 创建 config config = paddle_infer.Config(args.model_file, args.params_file) # 根据 config 创建 predictor predictor = paddle_infer.create_predictor(config) # 获取输入的名称 input_names = predictor.get_input_names() input_handle = predictor.get_input_handle(input_names[0]) # 设置输入 fake_input = np.random.randn(args.batch_size, 3, 318, 318).astype("float32") input_handle.reshape([args.batch_size, 3, 318, 318]) input_handle.copy_from_cpu(fake_input) # 运行predictor predictor.run() # 获取输出 output_names = predictor.get_output_names() output_handle = predictor.get_output_handle(output_names[0]) output_data = output_handle.copy_to_cpu() # numpy.ndarray类型 print("Output data size is {}".format(output_data.size)) print("Output data shape is {}".format(output_data.shape)) if __name__ == "__main__": main()
Paddle预测流程
Paddle Infernce采用Predito进行预测。Predictor是一个高性能预测引擎,该引擎通过对计算图的分析,完成对计算图的一系列优化(如OP融合、内存/显存的优化、MKLDNN、TensorRT等底层加速库的支持等),能够大大提升预测性能。
开发预测程序需要5个步骤,以C++程序为例
1、配置推理选项paddle_infer::Config
,包括设置模型路径、运行设备、开启或关闭计算图优化、使用MKLDNN/TensorRT进行部署的加速等。
2、创建推理引擎paddl_infer::Predicor
, 通过CreatePredictor(config)
接口,一行代码即可完成引擎初始化,其中Config
为第一步中生成的配置推理选项
3、准备输入数据,需要以下几个步骤
- 先通过
auto input_names = predictor->GetInputNames()
获取模型所有输入Tensor的名称再通过auto tensor = predictor->GetInputTensor(input_names[0])
获取模型所有输入Tensor
的名称最后通过tensor->copy_from_cpu(data)
,将data中的数据拷贝到tensor中4、执行预测,只需要运行predictor.run()
即可完成预测
5、获取预测结果
- 先通过
auto output_names = predictor->GetOutputNames()
获取模型所有输出Tensor
的名称再通过auto tensor = predictor->GetOutputTensor(output_names[i])
获取输出Tensor的指针最后通过tensor->copy_to_cpu(data)
将tensor中的数据copy到data指针上参考
1、paddle 预测示例Python: www.paddlepaddle.org.cn/inference/v…