背景
Paddle Python预测程序开发说明
- 首先使用
paddle.inference.Config(xx,xx)方法创建config - 然后根据
paddle.inference.create_predictor(config)创建predictor - 最后根据
predictor.run()方法执行一步推理
import argparse
import numpy as np
import paddle.inference as paddle_infer
def 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…