polygraphy深度学习模型调试器使用教程

news/2024/5/9 6:49:40/文章来源:https://blog.csdn.net/zyq880625/article/details/130156835

深度学习系列文章目录


文章目录

  • 深度学习系列文章目录
  • Polygraphy介绍
  • 一、安装
    • 源码安装:
    • 简单安装
    • 安装依赖
  • 二、简单使用
  • 三、使用教程
    • 2 、polygtaphy使用示例


Polygraphy介绍

Polygraphy在我进行模型精度检测和模型推理速度的过程中都有用到,因此在这做一个简单的介绍。polygraphy 是一个深度学习模型调试工具,包含 python API 和 命令行工具,它的功能如下:

使用多种后端运行推理计算,包括 TensorRT, onnxruntime, TensorFlow;
比较不同后端的逐层计算结果;
由模型生成 TensorRT 引擎并序列化为.plan;
查看模型网络的逐层信息;
修改 Onnx 模型,如提取子图,计算图化简;
分析 Onnx 转 TensorRT 失败原因,将原计算图中可以 / 不可以转 TensorRT 的子图分割保存;
隔离 TensorRT 终端 错误 tactic;

一、安装

源码安装:

Github地址:Polygraphy

根据自己的cuda以及cudnn版本选择对应的tensorrt版本,并将源码clone下来
使用anaconda创建虚拟环境(注:polygraphy不支持python2.x)

conda create -n polygraphy python=3.7

在polygraphy目录进入创建的虚拟环境 执行

python -m pip install colored polygraphy --extra-index-url pypi.ngc.nvidia.com
make install

完成polygraphy的安装。

简单安装

使用anaconda创建虚拟环境(注:polygraphy不支持python2.x)

conda create -n polygraphy python=3.7

进入创建的虚拟环境执行

pip install -i pypi.douban.com/simple nvidia-pyindex
python -m pip install colored polygraphy --extra-index-url pypi.ngc.nvidia.com

安装 colored 是为了让cli输出更加清晰明显

完成安装

安装依赖

Polygraphy 对其他 Python 包没有硬依赖。 但是,包含的大部分功能 确实需要其他 Python 包。 就比如对onnx和trt模型推理对比就需要安装onnxruntime和nvidia-tensorrt包。

自动安装依赖

当运行的程序需要哪些包时,程序会自动去安装对应的包要启用此功能可以在环境变量中做如下设置:

export POLYGRAPHY_AUTOINSTALL_DEPS=1

手动安装

如果你将tensorrt源码clone到了本地,那么可以在 tools/Polygraphy/polygraphy/backend 目录下的文件夹找到requirement.txt ,根据该文件你可以安装对应的包。

python -m pip install -r polygraphy/backend//requirements.txt

如果需要其他软件包,将记录警告或错误。 您可以使用以下方法手动安装其他软件包:

python -m pip install <package_name>

二、简单使用

在 polygraphy\example 目录下存放有多个示例,包括Python API,CLI,现在来简单介绍一下Polygraphy/examples/cli/run/01_comparing_frameworks 这个示例:

首先准备一个onnx模型

input name : data
input shape : batchsize x 3 x 224 x 224

使用polygraphy 生成trt引擎,并将onnxruntime 和 trt的计算结果进行对比

polygraphy run yawn_224.onnx --onnxrt --trt --workspace 256M --save-engine yawn-test.plan --fp16 --verbose --trt-min-shapes 'data:[1,3,224,224]' --trt-opt-shapes 'data:[3,3,224,224]' --trt-max-shapes 'data:[8,3,224,224]' > test.txt
    #  命令解析polygraphy run yawn_224.onnx  					# 使用onnx模型--onnxrt --trt 													# 使用 onnxruntime 和 trt 后端进行推理--workspace 256M												#  使用256M空间用于生成.plan 文件--save-engine yawn-test.plan 		 				#   保存文件--fp16 																	#   开启fp16模式--verbose 															#   显示生成细节--trt-min-shapes 'data:[1,3,224,224]'		# 设定 最小输入形状--trt-opt-shapes 'data:[3,3,224,224]'   # 设定 最佳输入形状--trt-max-shapes 'data:[8,3,224,224]'   # 设定 最大输入形状> test.txt                              # 将终端显示重定向test.txt 文件中 复制代码

Result

其中 onnxrt_runner 表示的是onnxruntime的推理输出,trt-runner 为trt的输出,两者之间的输出误差对比由 Error Metrics 给出.
误差参数含义

在这里插入图片描述

三、使用教程

2 、polygtaphy使用示例

mmdeploy用法:
polygraphy surgeon sanitize end2end.onnx --fold-constants -o end2end_folded.onnx
示例代码:
这里介绍一个polygraphy使用示例,对onnxruntime和TensorRT进行精度对比,流程差不多是这样的:
首先生成一个.onnx文件
其次使用polygraphy生成一个FP16的TRT引擎,并对比使用onnxruntime和TensorRT的计算结果;
然后使用polygraphy生成一个FP32的TRT引擎,将网络中所有层都标记为输出,并对比使用onnxruntime和TensorRT的计算结果(逐层结果对比);
相关代码示意如下:

# 生成一个 .onnx 模型作为 polygraphy 的输入
# export model.onnx from pytorch
# or
# export model.onnx from tensorflow# 使用上面生成的 model.onnx 构建 TensorRT 引擎,使用 FP16 精度同时在 TensorRT 和 onnxruntime 中运行
polygraphy run model.onnx \--onnxrt --trt \--workspace 100000000 \--save-engine=model_FP16.plan \--atol 1e-3 --rtol 1e-3 \--fp16 \--verbose \--trt-min-shapes 'x:0:[1,1,28,28]' \--trt-opt-shapes 'x:0:[4,1,28,28]' \--trt-max-shapes 'x:0:[16,1,28,28]' \--input-shapes 'x:0:[4,1,28,28]' \> result-run-FP16.txt
​
# 使用上面生成的 model.onnx 构建 TensorRT 引擎,使用 FP32 精度同时在 TensorRT 和 onnxruntime 中运行
# 输出所有层的计算结果作对比
polygraphy run model.onnx \--onnxrt --trt \--workspace 100000000 \--save-engine=model_FP32_MarkAll.plan \--atol 1e-3 --rtol 1e-3 \--verbose \--onnx-outputs mark all \--trt-outputs mark all \--trt-min-shapes 'x:0:[1,1,28,28]' \--trt-opt-shapes 'x:0:[4,1,28,28]' \--trt-max-shapes 'x:0:[16,1,28,28]' \--input-shapes 'x:0:[4,1,28,28]' \> result-run-FP32-MarkAll.txt

选取FP16推理对比结果进行展示,如下:
在这里插入图片描述

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

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

相关文章

腾讯云GPU服务器NVIDIA P40 GPU、P4、T4和GPU自由卡详解

腾讯云GPU云服务器&#xff0c;GPU云服务器实例可选GN8机型、GN6S机型、GN7机型等规格&#xff0c;搭载 NVIDIA P40 GPU&#xff0c;最长可3年&#xff0c;云服务器吧来详细说下腾讯云GPU云服务器&#xff1a; 目录 腾讯云GPU云服务器 腾讯云GPU自由卡 腾讯云GPU云服务器 腾…

归并排序(递归+非递归)

目录一、什么是归并排序&#xff1f;二、归并排序&#xff08;递归&#xff09;三、归并排序&#xff08;非递归&#xff09;一、什么是归并排序&#xff1f; 归并排序&#xff0c;是创建在归并操作上的一种有效的排序算法。算法是采用分治法&#xff08;Divide and Conquer&a…

epoll 反应堆模型(Libevent库核心思想)

epoll 反应堆模型是从 libevent 库里面抽取的核心代码。 epoll ET模式 非阻塞、轮询 void *ptr 代码流程 原来的代码&#xff1a; socket、bind、listen efd epoll_create 创建监听&#xff08;红黑树&#xff09; epoll_ctl 向树上添加一个监听 fd for(;;) { 满足数组…

4.12~4.13学习总结

File 相对路径和绝对路径的区别&#xff1a; 相对路径不带盘符&#xff0c;绝对路径带盘符 小知识点&#xff1a;1KB1024字节&#xff0c;1MB1024KB,1GB1024MB; File对象就表示一个路径&#xff0c;可也是文件的路径&#xff0c;也可以是文件夹的路径 这个路径可以是存在的也可…

MongoDB 介绍和基本操作

一、MongoDB数据库 1、MongoDB是一种非关系型数据库&#xff0c;是用C语言编写的。其特点是高性能、易部署、易使用&#xff0c;存储数据方便。 2、MongoDB特点&#xff1a; 面向集合存储&#xff0c;易于存储对象类型数据&#xff1b;支持动态查询&#xff0c;支持完全索引&…

计算机网络第1章(概述)

文章目录1.1、计算机网络在信息时代的作用1.2、因特网概述1、网络、互连网&#xff08;互联网&#xff09;和因特网2、因特网发展的三个阶段3、因特网的标准化工作4、因特网的组成1.3 三种交换方式1、电路交换&#xff08;Circuit Switching&#xff09;2、分组交换&#xff08…

JSON Web Tokens (JWT) — the only explanation you will ever need

本文摘抄自 Ariel Weinberger 博客JSON Web Tokens (JWT) — the only explanation you will ever need | by Ariel Weinberger | MediumJSON Web Tokens (JWT) — the only explanation you will ever need JSON Web Tokens are changing the world for the better. Acting as…

第1章-JVM与Java体系结构

1、本系列博客&#xff0c;主要是面向Java8的虚拟机。如有特殊说明&#xff0c;会进行标注。 2、本系列博客主要参考尚硅谷的JVM视频教程&#xff0c;整理不易&#xff0c;所以图片打上了一些水印&#xff0c;还请读者见谅。后续可能会加上一些补充的东西。 3、尚硅谷的有些视频…

国家出手管人工智能AI了

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 全球都在封杀AI&#xff0c;国家也出手了&#xff0c;人工智能AI的强监管来了!这次反应速度算是很快了。国家出手&#xff0c;AI必须管。 国家网信办拟针对生成式人工智能服务出台管理办法&#…

【Redis数据库】异地公网远程登录连接Redis教程

文章目录1. Linux(centos8)安装redis数据库2. 配置redis数据库3. 内网穿透3.1 安装cpolar内网穿透3.2 创建隧道映射本地端口4. 配置固定TCP端口地址4.1 保留一个固定tcp地址4.2 配置固定TCP地址4.3 使用固定的tcp地址连接转发自CSDN远程穿透的文章&#xff1a;公网远程连接Redi…

算法之归并排序

文章目录一、归并排序&#xff08;递归版&#xff09;二、归并排序&#xff08;非递归版&#xff09;一、归并排序&#xff08;递归版&#xff09; 归并排序思想&#xff1a;将数组划分为两个区间&#xff0c;左区间&#xff0c;右区间 然后对这两个区间内容进行排序 &#xff…

linux 修改主机名称

1、hostname命令进行临时更改 如果只需要临时更改主机名&#xff0c;可以使用hostname命令&#xff1a; sudo hostname <new-hostname> 例如&#xff1a; 只需重新打开session终端&#xff0c;就能生效&#xff0c; 但是&#xff0c;重启计算机后会回到旧的主机名。…

总结一下Redis的缓存雪崩、缓存击穿、缓存穿透

缓存是提高系统性能的一种常见手段&#xff0c;其中Redis是一种常用的高性能缓存数据库。但是在使用缓存时&#xff0c;可能会遇到一些问题&#xff0c;比如缓存击穿、缓存穿透、缓存雪崩等问题&#xff0c;本文将介绍这些问题的概念、原因以及解决方案。 缓存击穿 缓存击穿指…

深度学习中的目标识别

博主简介 博主是一名大二学生&#xff0c;主攻人工智能研究。感谢让我们在CSDN相遇&#xff0c;博主致力于在这里分享关于人工智能&#xff0c;c&#xff0c;Python&#xff0c;爬虫等方面知识的分享。 如果有需要的小伙伴可以关注博主&#xff0c;博主会继续更新的&#xff0c…

拓展系统命令

文章目录拓展系统命令使用方式拓展系统命令快速运行方法命令 - ZFASTRUN安全运行方法命令 - ZFASTSAFERUN快速运行Query方法命令 - ZFASTQUERY安全运行Query方法 命令 - ZSAFEQUARY防止调试时误将数据提交命令 - ZTRN在Terminal执行SQL语句命令 - ZSQL安全Global命令 - ZSAFEKI…

Windows命令提示符之常见命令--动态更新

序言&#xff1a; 在大家接触Windows电脑的过程中&#xff0c;一般是直接通过鼠标来进行操作&#xff0c;很少甚至没有用到过命令来执行操作&#xff0c;而想必大家都看过电影里面的黑客大神都是通过密密麻麻的指令来操作的&#xff0c;并且执行的速度也会比我们用鼠标块&…

二进制插入与查找组成一个偶数最接近的两个素数

二进制插入 链接&#xff1a;二进制插入_牛客题霸_牛客网 (nowcoder.com) 描述&#xff1a;给定两个32位整数n和m&#xff0c;同时给定i和j&#xff0c;将m的二进制数位插入到n的二进制的第j到第i位,保证n的第j到第i位均为零&#xff0c;且m的二进制位数小于等于i-j1&#xff…

在unreal中的基于波叠加的波浪水面材质原理和制作

关于水的渲染模型 如何渲染出真实的水体和模拟&#xff0c;是图形学&#xff0c;游戏开发乃至仿真领域很有意思的一件事 记得小时候玩《Command & Conquer: Red Alert 3》&#xff0c;被当时的水面效果深深震撼&#xff0c;作为一款2008年出的游戏&#xff0c;现在想起它…

没想到大厂Adobe还有这些“猫腻”!

北京时间周四晚间&#xff0c;图像及视频生产力工具大厂Adobe发布公告&#xff0c;宣布旗下的视频创作应用Premiere Pro将喜提一系列新的AI功能。这也是Adobe上个月发布AIGC创作功能“萤火虫”后的最新动作。综合Adobe的官方公告和演示视频&#xff0c;最大亮点就是基于文字的视…

什么是线性回归?线性回归有什么特征?

什么是线性回归 线性回归定义与公式 线性回归(Linear regression)是利用回归方程(函数)对一个或多个自变量(特征值)和因变量(目标值)之间关系进行建模的一种分析方式。 特点&#xff1a;只有一个自变量的情况称为单变量回归&#xff0c;多于一个自变量情况的叫做多元回归 线…