Paddle 模型转 TensorRT加速模型

news2024/12/24 21:59:45

Paddle 模型转 TensorRT加速模型

概述

NVIDIA TensorRT 是一个高性能的深度学习预测库,可为深度学习推理应用程序提供低延迟和高吞吐量。PaddlePaddle 采用子图的形式对TensorRT进行了集成,即我们可以使用该模块来提升Paddle模型的预测性能。在这篇文章中,我们会介绍如何使用Paddle-TRT子图加速预测。

当模型加载后,神经网络可以表示为由变量和运算节点组成的计算图。如果我们打开TRT子图模式,在图分析阶段,Paddle会对模型图进行分析同时发现图中可以使用TensorRT优化的子图并使用TensorRT节点替换它们。在模型的推断期间如果遇到TensorRT节点,Paddle会调用TensorRT库对该节点进行优化,其他的节点调用Paddle的原生实现。TensorRT除了有常见的OP融合以及显存/内存优化外,还针对性的对OP进行了优化加速实现,降低预测延迟,提升推理吞吐。

目前Paddle-TRT支持静态shape模式以及/动态shape模式。在静态shape模式下支持图像分类,分割,检测模型,同时也支持Fp16, Int8的预测加速。在动态shape模式下,除了对动态shape的图像模型(FCN, Faster rcnn)支持外,同时也对NLP的Bert/Ernie模型也进行了支持。

image.png

image.png

运行原理

当模型加载后,神经网络可以表示为由变量和运算节点组成的计算图。TensorRT在推断期间能够进行Op的横向和纵向融合,过滤掉冗余的Op,并对特定平台下的特定的Op选择合适的kernel等进行优化,能够加快模型的预测速度。

简单演示

转换前的网络

image.png

转换后的网络

image.png

安装

完整方式

1、pip安装

2、使用现有的docker镜像

paddle官方提供了整套的环境,可以在docker环境中直接使用

# 拉取镜像,该镜像预装Paddle 2.2 Python环境,并包含c++的预编译库,lib存放在主目录~/ 下。
## docker pull paddlepaddle/paddle:latest-dev-cuda11.0-cudnn8-gcc82  这个版本的镜像不可用   paddle都无法使用
nvidia-docker pull registry.baidubce.com/paddlepaddle/paddle:2.4.1-gpu-cuda11.2-cudnn8.2-trt8.0


sudo nvidia-docker run --name your_name -v $PWD:/paddle  --network=host -it registry.baidubce.com/paddlepaddle/paddle:2.4.1-gpu-cuda11.2-cudnn8.2-trt8.0  /bin/bash

3、手动编译

验证

paddle官方给了trt的paddle inference的推理demo,这里以yolov3目标检测为例

获取代码仓库
wget https://paddle-inference-dist.bj.bcebos.com/Paddle-Inference-Demo/yolov3_r50vd_dcn_270e_coco.tgz
tar xzf yolov3_r50vd_dcn_270e_coco.tgz
运行run.sh下载预测模型和图片  
sh run.sh

其中:

  • 文件utils.py包含了图像的预处理等帮助函数。
  • 文件infer_yolov3.py 包含了创建predictor,读取示例图片,预测,获取输出的等功能。

使用原生 GPU 运行样例

python infer_yolov3.py --model_file=yolov3_r50vd_dcn_270e_coco/model.pdmodel --params_file=yolov3_r50vd_dcn_270e_coco/model.pdiparams

使用 Trt Fp32 运行样例

python infer_yolov3.py --model_file=yolov3_r50vd_dcn_270e_coco/model.pdmodel --params_file=yolov3_r50vd_dcn_270e_coco/model.pdiparams --run_mode=trt_fp32

使用 Trt Fp16 运行样例

python infer_yolov3.py --model_file=yolov3_r50vd_dcn_270e_coco/model.pdmodel --params_file=yolov3_r50vd_dcn_270e_coco/model.pdiparams --run_mode=trt_fp16

使用 Trt Int8 运行样例

在使用 Trt In8 运行样例时,相同的运行命令需要执行两次。

生成量化校准表

python infer_yolov3.py --model_file=yolov3_r50vd_dcn_270e_coco/model.pdmodel --params_file=yolov3_r50vd_dcn_270e_coco/model.pdiparams --run_mode=trt_int8

生成校准表的log:

I0623 08:40:49.386909 107053 tensorrt_engine_op.h:159] This process is generating calibration table for Paddle TRT int8...
I0623 08:40:49.387279 107057 tensorrt_engine_op.h:352] Prepare TRT engine (Optimize model structure, Select OP kernel etc). This process may cost a lot of time.
I0623 08:41:13.784473 107053 analysis_predictor.cc:791] Wait for calib threads done.
I0623 08:41:14.419198 107053 analysis_predictor.cc:793] Generating TRT Calibration table data, this may cost a lot of time...

加载校准表执行预测

python infer_yolov3.py --model_file=yolov3_r50vd_dcn_270e_coco/model.pdmodel --params_file=yolov3_r50vd_dcn_270e_coco/model.pdiparams --run_mode=trt_int8

加载校准表预测的log:

I0623 08:40:27.217701 107040 tensorrt_subgraph_pass.cc:258] RUN Paddle TRT int8 calibration mode...
I0623 08:40:27.217834 107040 tensorrt_subgraph_pass.cc:321] Prepare TRT engine (Optimize model structure, Select OP kernel etc). This process may cost a lot of time.

使用 Trt dynamic shape 运行样例(以 Fp32 为例)

python infer_yolov3.py --model_file=yolov3_r50vd_dcn_270e_coco/model.pdmodel --params_file=yolov3_r50vd_dcn_270e_coco/model.pdiparams --run_mode=trt_fp32 --use_dynamic_shape=1

输出结果如下所示:

category id is 0.0, bbox is [216.26059 697.699   268.60815 848.7649 ]
category id is 0.0, bbox is [113.00742 614.51337 164.59525 762.8045 ]
category id is 0.0, bbox is [ 82.81181 507.96368 103.27139 565.0893 ]
category id is 0.0, bbox is [346.4539  485.327   355.62698 502.63412]
category id is 0.0, bbox is [520.77747 502.9539  532.1869  527.12494]
category id is 0.0, bbox is [ 38.75421 510.04153  53.91417 561.62244]
category id is 0.0, bbox is [ 24.630651 528.03186   36.35131  551.4408  ]
category id is 0.0, bbox is [537.8204 516.3991 551.4925 532.4528]
category id is 0.0, bbox is [176.29276 538.46545 192.09549 572.6228 ]
category id is 0.0, bbox is [1207.4629   452.27505 1214.8047   461.21774]
category id is 33.0, bbox is [593.3794    80.178375 668.2346   151.84273 ]
category id is 33.0, bbox is [467.13992 339.5424  484.5012  358.15115]
category id is 33.0, bbox is [278.30582 236.12378 304.95267 280.59497]
category id is 33.0, bbox is [1082.6643   393.12796 1099.5437   421.86935]
category id is 33.0, bbox is [302.35004 376.8052  320.6112  410.01248]
category id is 33.0, bbox is [575.6267 343.2629 601.619  369.2695]

img

过程中遇到的问题

1、paddle提供的部分docker镜像有问题,使用过程中最好看清楚版本号

2、使用TRT加速时需要在空闲的GPU上,在已经有人使用的GPU 上可能会无法运行

3、预测库默认是打开日志的,只要注释掉config.disable_glog_info()就可以打开日志

4、

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ubuntu显示时间不正确的问题解决

安装完ubuntu后,发现我的ubuntu显示的时间不对,和网络的时间根本对不上。网上查找了相关设置方法,这里总结一下。 一般来说,显示时间不正确的情况就两种情况,第一:是你系统设置的时区不对;第二…

多层感知机学习XOR实例

多层感知机学习XOR实例 多层感知机介绍使用多层感知机学习XOR实例传统统计数学方法(传统机器学习)使用多层感知机学习XOR 总结 多层感知机介绍 多层感知机(Multilayer Perceptron,MLP),又称为深度前馈网络…

Compose 二三事:绘制原理

setContent做了什么 我们基于一个最简单的例子进行分析 class MainActivity : ComponentActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContent {Text(text "Hello World!")}} }这里setContent做了什么…

【Jmeter入门】使用Jmeter做接口测试

目录 一、Jmeter简介 二、Jmeter相关插件安装: 三、Jmeter运行模式及参数 四、Jmeter函数 五、Jmeter属性与变量 六、Jmeter如何做接口测试 【1】、Jmeter 的使用步骤 【2】、接口请求实例 1. “用户定义的变量” 的应用 3. 建立接口间的关联 4…

Gaussian量子化学计算、LAMMPS分子动力学模拟

Gaussian是做半经验计算和从头计算使用最广泛的量子化学软件,可研究诸如分子轨道,结构优化,过渡态搜索,热力学性质,偶极矩和多极矩,电子密度和电势,极化率和超极化率,红外和拉曼光谱…

超越竞争的获客之道:DTC品牌出海策略全面解析

随着全球数字化的快速发展,DTC品牌正迎来一个全新的时代。然而,随着越来越多的DTC品牌进入国际市场,如何在激烈的竞争中脱颖而出,并获得新客户成为一个关键的挑战。本文Nox聚星将和大家深入探讨DTC品牌在出海时代如何破解获客困局…

外包干了五年,废了...

先说一下自己的情况。大专生,17年通过校招进入湖南某软件公司,干了接近5年的测试点点点,今年年上旬,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了五年的点工…

10年开发,浅谈eolink 、aifox、apipost 横向对比

功能对比 在实际工作中,eolink 、apifox、apipost 三个工具,我个人都有使用。接下来,我会对三款功能对比,于是我拉了个功能对比的清单。 特别说明:以下的对比,不吹不黑,只列功能,纯客观比对,不带有任何商业带货的意义。 eolink 、aifox、apipost 三款工具有很多功能模块,本次仅…

acwing提高——DFS之连通性问题+搜索顺序

1 连通性问题&#xff08;内部搜索&#xff09; 内部搜索一般不用恢复现场 1.迷宫 题目http://ybt.ssoier.cn:8088/problem_show.php?pid1215 #include<bits/stdc.h> using namespace std; const int N110; bool st[N][N]; char g[N][N]; int n; int sx,sy,ex,ey; …

95后字节八年测开晒出工资单:狠补了这个,真香···

最近一哥们跟我聊天装逼&#xff0c;说他最近从字节跳槽了&#xff0c;我问他跳出来拿了多少&#xff1f;哥们表示很得意&#xff0c;说跳槽到新公司一个月后发了工资&#xff0c;月入5万多&#xff0c;表示很满足&#xff01;这样的高薪资着实让人羡慕&#xff0c;我猜这是税后…

2022年深圳杯数学建模B题基于用电可靠性的配电网规划解题全过程文档及程序

2022年深圳杯数学建模 B题 基于用电可靠性的配电网规划 原题再现&#xff1a; 如果一批用户变压器&#xff08;下面简称用户&#xff09;仅由一个电源变电站&#xff08;下面简称电源&#xff09;供电&#xff0c;称为单供。这时配电网由电线和开关联接成以电源为根节点的树状…

k8s使用ECK形式部署elasticsearch+kibana

文章目录 前言一、ECK是什么&#xff1f;二、安装ECK1.crd.yaml2.operator.yaml 三、安装es&#xff0c;elasticsearch-cluster.yaml四、安装kibana总结 前言 在k8s上基于ECK&#xff08;2.4&#xff09;部署elasticsearch&#xff0c;简单记录一下&#xff0c;主要是quicksta…

《程序员面试金典(第6版)》面试题 02.03. 删除中间节点(特殊的删除节点操作)

题目描述 若链表中的某个节点&#xff0c;既不是链表头节点&#xff0c;也不是链表尾节点&#xff0c;则称其为该链表的「中间节点」。 题目传送门&#xff1a;面试题 02.03. 删除中间节点 假定已知链表的某一个中间节点&#xff0c;请实现一种算法&#xff0c;将该节点从链表中…

服务(第二十九篇)zabbix

zabbix 是什么&#xff1f; zabbix 是一个基于 Web 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。 zabbix 能监视各种网络参数&#xff0c;保证服务器系统的安全运营&#xff1b;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。 zabbi…

太阳升起和落下(长文警告)

今天分享一个太阳升起落下的动画场景。 有朋友问我为什么只发代码不做说明&#xff0c;今天我们尝试下对代码进行注解说明一下。 首先这个场景大致的可拆分为4个部分&#xff1a;太阳/月亮&#xff0c;右下角的按钮&#xff0c;天上的云和最显眼的建筑。 我们先做一个按钮&am…

stable diffusion AI绘图工具的安装和使用centos7.8系统

stable diffusion 作图工具本地部署 重要【AI作画】stable diffusion webui Linux虚拟机 Centos 详细部署教程 服务器CentOS 7 安装 Stable Diffusion WebUI &#xff0c;并映射到本地浏览器 CentOs7 Stable Diffusion Novel AI实现AI绘画 stable diffusion webui安装部署…

二、数据仓库详细介绍

基础概念 架构与框架&#xff0c;架构是结构&#xff0c;框架是规范 模块与组件&#xff0c;模块是逻辑概念&#xff0c;通过分解使复杂问题简单化&#xff0c;组件是物理概念&#xff0c;将具体的模块落地&#xff0c;且各个组件间保持松散耦合 定义&#xff1a;架构&#x…

分布式全局唯一id实现总结

前言&#xff1a;本文意在对借助db和程序生成分布式id进行一些总结&#xff0c;以及对其特性进行比较分析&#xff1b; 1 实现方式&#xff1a; Db 通过配置步长和初始值的方式&#xff0c;使得每个db库生成id 的不同性&#xff0c;如 3个db 实例情况下&#xff1a;其步长均设…

我3年前写的博客,又被别人抄去发论文了,该论文整个正文部分几乎直接照抄我的博客

我想说每一篇原创博客都是作者的心血&#xff0c;有时候写一篇博客也许会花一天&#xff0c;甚至好几天的时间&#xff0c;尊重原创&#xff0c;营造好的环境&#xff0c;才有可能出现更多优质的博文&#xff0c;而不是到处都是抄来抄去的低质量水文。 前几天接到来自粉丝的私信…

加密解密软件VMProtect教程(八)许可制度之集成到应用程序

VMProtect是新一代软件保护实用程序。VMProtect支持德尔菲、Borland C Builder、Visual C/C、Visual Basic&#xff08;本机&#xff09;、Virtual Pascal和XCode编译器。 同时&#xff0c;VMProtect有一个内置的反汇编程序&#xff0c;可以与Windows和Mac OS X可执行文件一起…