推理部署
5. 推理部署: 服务器部署已经训练好的模型进行预测
5.1 服务器端部署
5.1.1 安装与编译 Linux 预测库
- 直接下载安装
- 从源码编译
-
Server 端 预测源码编码
-
NVIDIA Jetson 嵌入式硬件预测库源码编译
-
- 准备环境
-
- 编译 paddle inference 预测库
-
- 样例测试
-
-
5.1.2 安装与编译 window 预测库
5.1.3 C++ 预测API介绍
-
使用 Predictor 进行高性能预测
paddle inference 采用 Predictor(非线程安全)进行预测。 Predictor 是一个高性能预测引擎,该引擎通过对计算图的分析,完成对计算图的一系列优化(如OP融合、内存/显存的优化、TensorRT等底层加速库的支持),能够大大提升预测性能。 -
Predictor 预测实例:
```
#include "paddle_inference_api.h"namespace paddle_infer{ void CreateConfig(Config* config, const std::string& model_dirname){ // 模型 从磁盘进行加载 config->SetModel(model_dirname + "/model", model_dirname + "/params"); // 如果从内存中加载, 可以使用 SetModelBuffer 接口 // config->SetModelBuffer(prog_buffer, prog_size, params_buffer, params_size) config->EnableUseGpu(100 /*设定GPU初始显存池MB*/, 0 /*设定GPU ID为0*/); // 开始GPU预测 } void RunAnalysis(int batch_size, std::string model_dirname){ // 1. 创建 AnalsisConfig Config config; CreateConfig(&config, model_dirname); // 2.根据config 创建 predictor auto predictor = CreatePredictor(config) int channels = 3; int height = 224; int width = 224; float = input[batch_size * channels * height * width] = {0}; // 3.创建输入 // 4. 运行预测引擎 CHECK(predictor->Run()) // 5. 获取输出 } } // namespace paddle_infer int main(){ paddle_infer::RunAnalysis(1, ",/mobilenet"); return 0 } ```
- 使用 Config 管理预测配置
config 管理 Predictor 的预测配置,提供了 模型路径设置、预测引擎运行设备选择、多种优化预测流程的选项。- 通用优化配置
config->SwitchInOptim(true); // 开启计算图分析优化,包括OP融合等; config->EnableMemory; // 开启内存/显存复用;
-
设置模型和参数路径
从磁盘加载模型时,根据模型和参数文件存储方式不同,设置Config 加载模型和参数的路径有两种方式:- 非combine模式: 模型文件夹model_dir下存在一个模型文件和多个参数文件时,传入模型文件夹路径,模型文件名默认为 model.
config->SetModel("./model_dir");
- combine形式: 模型文件夹model_dir下只有一个模型文件model和一个参数文件 params时,传入模型文件和参数文件路径。
config->SetModel("./model_dir/model", "./model_dir/params");
-
配置CPU预测:
-
配置GPU预测:
- 使用 Config 管理预测配置
-
使用 Tensor 管理输入输出
-
使用 PredictorPool 在多线程下进行预测
-
C++ 预测样例编译测试
-
性能调优
-
推理升级指南