Paddle Inference部署推理(一)

一:Paddle Inference推理 简介

Paddle Inference 是飞桨的原生推理库,提供服务器端的高性能推理能力。由于 Paddle Inference 能力直接基于飞桨的训练算子,因此它支持飞桨训练出的所有模型的推理。

Paddle Inference 功能特性丰富,性能优异,针对不同平台不同的应用场景进行了深度的适配优化,做到高吞吐、低时延,保证了飞桨模型在服务器端即训即用,快速部署。

Paddle Inference 推理流程

推理具体流程:

1. 准备模型

Paddle Inference原生支持由PaddlePaddle深度学习框架训练产出的推理模型。PaddlePaddle用于推理的模型分别通过paddle.jit.save(动态图)与paddle.static.save_inference_model(静态图)或paddle.Model().save(高层API)保存下来的。如果手中的模型是通过TnesorFlow、Pytorch等框架训练出来的,可以使用X2Paddle工具将模型转换为PaddlePaddle格式。
更详细的模型导出模型请参考模型导出文档。
可使用模型可视化工具来查看模型结构,已确认符合组网预期。

2. 准备环境

参照PaddlePaddle安装 页面,通过下载预编译库或者源码编译的方式准备Paddle Inference 的基础开发环境。

3.开发推理流程

Paddle Inference 采用 Predictor 进行推理。Predictor 是一个高性能推理引擎,该引擎通过对计算图的分析,完成对计算图的一系列的优化(如 OP 的融合、内存 / 显存的优化、 MKLDNN,TensorRT 等底层加速库的支持等),能够大大提升推理性能。
在这里插入图片描述

开发推理程序只需要简单的 5 个步骤 (这里以 C++ API 为例):

  • 配置推理选项 paddle_infer::Config,包括设置模型路径、运行设备、开启/关闭计算图优化、使用 MKLDNN / TensorRT 进行部署的加速等。

  • 创建推理引擎 paddle_infer::Predictor,通过调用 CreatePredictor(Config) 接口,一行代码即可完成引擎初始化,其中 Config 为第1步中生成的配置推理选项。

    准备输入数据,需要以下几个步骤

    • 将原始输入数据根据模型需要做相应的预处理,比如减均值等标准化操作

    • 先通过 auto input_names = predictor->GetInputNames() 获取模型所有输入 Tensor 的名称

    • 再通过 auto tensor = predictor->GetInputTensor(input_names[i]) 获取输入 Tensor 的指针

    • 最后通过 tensor->copy_from_cpu(data),将预处理之后的数据 data 拷贝到 tensor

  • 执行推理,只需要运行 predictor->Run() 一行代码,即可完成推理执行。

    获得推理结果并进行后处理,需要以下几个步骤:

    • 先通过 auto out_names = predictor->GetOutputNames() 获取模型所有输出 Tensor 的名称

    • 再通过 auto tensor = predictor->GetOutputTensor(out_names[i]) 获取输出 Tensor的 指针

    • 最后通过 tensor->copy_to_cpu(data),将 tensor 中的数据 copydata 指针上

    • 可以使用与训练完全相同的输入数据进行推理并对比结果一致性,或者批量推理验证数据集并计算模型精度的方式来判断推理结果的正确性。

    • 将模型推理输出数据进行后处理,比如根据检测框位置裁剪图像等

4.推理示例

Paddle Inference 提供了 C++, Python 两种 API 的使用示例和开发说明文档,您可以参考示例中的说明快速了解使用方法,并集成到您自己的项目中去。

  • c++示例
  • python示例
5.性能优化
1)根据实际场景开启相应的推理优化配置项

以C++API 为例,根据实际场景开启相关的优化开关,示例如下,具体参考C++API 文档。

  • CPU 推理:EnableMKLDNNEnableMkldnnBfloat16SetCpuMathLibraryNumThreadsEnableONNXRuntime
  • GPU 推理:EnableTensorRtEngine
  • 基础优化:SwitchIrOptimEnableMemoryOptim

参考系统调优概述使用混合精度推理和多线程推理。

2) 使用 PaddleSlim 进行模型小型化

如果开启以上相关优化配置后,还需要进一步提升推理性能,可以在我们提供的深度学习模型压缩工具库 PaddleSlim 的帮助下,通过低比特量化、知识蒸馏、稀疏化和模型结构搜索等方式,进行模型小型化。

下一节:
paddle模型的保存及加载API详解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/924429.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

前端 vue3 + element-plus + ts 对话框示例

【父组件】&#xff1a;SampleInput.vue&#xff0c;局部代码片段 引入子组件 ApplyItemChooseDialog.vue&#xff0c;定义变量&#xff0c;用于渲染和显示标识 <script>片段代码 import ApplyItemChooseDialog from "/views/accept/ApplyItemChooseDialog.vue&q…

【最优清零方案——贪心+滑动窗口:暴力/线段树/单调队列】

题目 暴力 #include <bits/stdc.h> using namespace std; using ll long long; const int N 1e6 10; int a[N]; int main() {int n, k;cin >> n >> k;ll sum 0;for (int i 1; i < n; i)cin >> a[i], sum a[i];int minn 1e9, pos;ll cnt 0…

Python爬取豆瓣电影全部分类数据并存入数据库

在当今数字化的时代&#xff0c;网络上丰富的影视资源信息吸引着众多开发者去挖掘和利用。今天&#xff0c;我就来和大家分享一段有趣的代码&#xff0c;它能够从豆瓣电影平台获取相关数据并存储到数据库中哦。 结果展示&#xff08;文末附完整代码&#xff09;&#xff1a; 目…

数据结构 ——— 归并排序算法的实现

目录 归并排序的思想 归并排序算法的实现 归并排序的思想 将已经有序的子序列合并&#xff0c;得到完全有序的序列&#xff0c;即先使每个子序列有序后&#xff0c;再使子序列段间有序 若将两个有序表合并成一个有序表&#xff0c;称为二路归并 归并排序步骤示意图&#x…

vue2面试题11|[2024-11-25]

1.vue源码-模版解析 <!DOCTYPE html> <html> <head><title></title> </head> <body><div idapp><h1> {{ str }} </h1>{{ str }} </div></body><script type"text/javascript" srcvue.js…

web博客系统的自动化测试

目录 前言测试用例编写自动化脚本测试准备博客登录页相关测试用例登陆成功登录失败 博客首页相关测试用例登陆成功登录失败 博客详情页相关测试用例登录成功登录失败 博客编辑页相关测试用例登陆成功登录失败 编写测试文档测试类型内容 前言 本次测试是运用个人写的一个博客系…

MATLAB矩阵元素的修改及删除

利用等号赋值来进行修改 A ( m , n ) c A(m,n)c A(m,n)c将将矩阵第 m m m行第 n n n列的元素改为 c c c&#xff0c;如果 m m m或 n n n超出原来的行或列&#xff0c;则会自动补充行或列&#xff0c;目标元素改为要求的&#xff0c;其余为 0 0 0 A ( m ) c A(m)c A(m)c将索引…

告别 Kafka,拥抱 Databend:构建高效低成本的用户行为分析体系

用户行为数据埋点指标是数据仓库中不可或缺的重要数据源之一&#xff0c;同时也是企业最宝贵的资产之一。通常情况下&#xff0c;用户行为数据分析包含两大数据源&#xff1a;用户行为分析日志和上游关系型数据库&#xff08;如 MySQL&#xff09;。基于这些数据&#xff0c;企…

WEB攻防-通用漏洞文件上传中间件解析漏洞编辑器安全

中间件文件解析-IIS&Apache&Nginx Web应用编辑器-Ueditor文件上传安全 实例CMS&平台-中间件解析&编辑器引用 Vulhub是一个基于docker和docker-compose的漏洞环境集合&#xff0c;进入对应目录并执行一条语句即可启动一个全新的漏洞环境&#xff0c;让漏洞复现…

【算法day1】数组:双指针算法

题目引用 这里以 1、LeetCode704.二分查找 2、LeetCode27.移除元素 3、LeetCode977.有序数组的平方 这三道题举例来说明数组中双指针的妙用。 1、二分查找 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜…

快速理解微服务中Sentinel怎么实现限流

Sentinel是通过动态管理限流规则&#xff0c;根据定义的规则对请求进行限流控制。 一.实现步骤 1.定义资源&#xff1a;在Sentinel中&#xff0c;资源可以是URL、方法等&#xff0c;用于标识需要进行限流的请求&#xff1b;(在Sentinel中&#xff0c;需要我们去告诉Sentinel哪些…

controller中的参数注解@Param @RequestParam和@RequestBody的不同

现在controller中有个方法&#xff1a;&#xff08;LoginUserRequest是一个用户类对象&#xff09; PostMapping("/test/phone")public Result validPhone(LoginUserRequest loginUserRequest) {return Result.success(loginUserRequest);}现在讨论Param("login…

OpenCV截取指定图片区域

import cv2 img cv2.imread(F:/2024/Python/demo1/test1/man.jpg) cv2.imshow(Image, img) # 显示图片 #cv2.waitKey(0) # 等待按键x, y, w, h 500, 100, 200, 200 # 示例坐标 roi img[y:yh, x:xw] # 截取指定区域 cv2.imshow(ROI, roi) cv2.waitKey(0) cv…

【经典】星空主题的注册界面HTML,CSS,JS

目录 界面展示 完整代码 说明&#xff1a; 这是一个简单的星空主题的注册界面&#xff0c;使用了 HTML 和 CSS 来实现一个背景为星空效果的注册页面。 界面展示 完整代码 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8&…

后端:事务

文章目录 1. 事务2. Spring 单独配置DataSource3. 利用JdbcTemplate操作数据库4. 利用JdbcTemplate查询数据5. Spring 声明式事务6. 事务的隔离级别6.1 脏读6.2 不可重复读6.3 幻读6.4 不可重复读和幻读的区别6.5 三种方案的比较 7. 事务的传播特性8. 设置事务 只读(readOnly)9…

vue element-ui的el-image 和 el-table冲突层级冲突问题问题preview-teleported

问题: 解决代码:preview-teleported <el-image style"width: 50px; height: 50px" :src"props.row.url" :zoom-rate"1.2" :max-scale"7":min-scale"0.2" :preview-src-list"[props.row.url]" :initial-index&…

vue3 开发利器——unplugin-auto-import

这玩意儿是干啥的&#xff1f; 还记得 Vue 3 的组合式 API 语法吗&#xff1f;如果有印象&#xff0c;那你肯定对以下代码有着刻入 DNA 般的熟悉&#xff1a; 刚开始写觉得没什么&#xff0c;但是后来渐渐发现&#xff0c;这玩意儿几乎每个页面都有啊&#xff01; 每次都要写…

FreeSWITCH 简单图形化界面34 - 网络环境安全的情况下,进行任意SIP注册

FreeSWITCH 简单图形化界面34 -网络环境安全的情况下&#xff0c;进行任意SIP注册 测试环境1、前言2、参数3、实践一下 测试环境 http://myfs.f3322.net:8020/ 用户名&#xff1a;admin&#xff0c;密码&#xff1a;admin FreeSWITCH界面安装参考&#xff1a;https://blog.cs…

基于Matlab深度学习的CT影像识别系统研究与实现

通过使用AlexNet、GoogLeNet和VGGNet等预训练模型&#xff0c;并结合迁移学习技术&#xff0c;对CT影像进行特征提取和分类。系统在公开数据集上进行了训练和测试&#xff0c;结果表明&#xff0c;该方法能够有效区分COVID-19和非COVID-19的CT影像&#xff0c;具有较高的准确率…

如何使用postman做接口测试?

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 常用的接口测试工具主要有以下几种&#xff1a; Postman: 简单方便的接口调试工具&#xff0c;便于分享和协作。具有接口调试&#xff0c;接口集管理&#…