• paddle18-推理部署 【后续学习】


    推理部署

    5. 推理部署: 服务器部署已经训练好的模型进行预测

    5.1 服务器端部署
    5.1.1 安装与编译 Linux 预测库
    • 直接下载安装
    • 从源码编译
      • Server 端 预测源码编码

      • NVIDIA Jetson 嵌入式硬件预测库源码编译

          1. 准备环境
          1. 编译 paddle inference 预测库
          1. 样例测试
    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预测:

    • 使用 Tensor 管理输入输出

    • 使用 PredictorPool 在多线程下进行预测

    • C++ 预测样例编译测试

    • 性能调优

    • 推理升级指南

    5.1.4 C 预测API介绍
    5.1.5 python 预测API介绍
    5.2 移动端部署
    5.3 模型压缩: PaddleSlim 模型压缩工具库,包含 模型裁剪、定点量化、知识蒸馏、超参搜索、模型结构搜素等一些列模型压缩策略。
  • 相关阅读:
    Android使用LocalSocket抓取数据
    求一个数组的最长递减子序列 比如{9,4,3,2,5,4,3,2}的最长递减子序列为{9,5,4,3,2}
    链表A和B的有序合并,合并过程不产生新的节点,合并后B消失
    Android中intent如何传递自定义数据类型
    字符串的排列组合问题
    android.net.LocalSocket
    [转]OWC生成柱图,线图,饼图
    利用C#对远程服务进行操作
    域备份&域还原
    ActiveReports for .NET 简单使用
  • 原文地址:https://www.cnblogs.com/zhangtao-0001/p/14747051.html
Copyright © 2020-2023  润新知