TensorRT的命令行程序

news2024/11/14 21:14:45

TensorRT的命令行程序

文章目录

  • TensorRT的命令行程序
    • A.3.1. trtexec
      • A.3.1.1. Benchmarking Network
      • A.3.1.2. Serialized Engine Generation
      • A.3.1.3. trtexec
      • A.3.1.4. 常用的命令行标志

在这里插入图片描述

点击此处加入NVIDIA开发者计划

A.3.1. trtexec

示例目录中包含一个名为trtexec的命令行包装工具。 trtexec是一种无需开发自己的应用程序即可快速使用 TensorRT 的工具。

trtexec工具有三个主要用途:

  • 它对于在随机或用户提供的输入数据上对网络进行基准测试很有用。
  • 它对于从模型生成序列化引擎很有用。
  • 它对于从构建器生成序列化时序缓存很有用。

A.3.1.1. Benchmarking Network

如果您将模型保存为 ONNX 文件、UFF 文件,或者如果您有 Caffe prototxt 格式的网络描述,则可以使用trtexec工具测试使用 TensorRT 在网络上运行推理的性能。 trtexec工具有许多选项用于指定输入和输出、性能计时的迭代、允许的精度和其他选项。

为了最大限度地提高 GPU 利用率, trtexec会提前将一个batch放入队列。换句话说,它执行以下操作:

enqueue batch 0 
-> enqueue batch 1 
-> wait until batch 0 is done 
-> enqueue batch 2 
-> wait until batch 1 is done 
-> enqueue batch 3 
-> wait until batch 2 is done 
-> enqueue batch 4 
-> ...

如果使用多流( --streams=N标志),则trtexec在每个流上分别遵循此模式。

trtexec工具打印以下性能指标。下图显示了trtexec运行的示例 Nsight 系统配置文件,其中标记显示了每个性能指标的含义。

Throughput

观察到的吞吐量是通过将执行数除以 Total Host Walltime 来计算的。如果这显着低于 GPU 计算时间的倒数,则 GPU 可能由于主机端开销或数据传输而未被充分利用。使用 CUDA 图(使用--useCudaGraph )或禁用 H2D/D2H 传输(使用--noDataTransfer )可以提高 GPU 利用率。当trtexec检测到 GPU 未充分利用时,输出日志提供了有关使用哪个标志的指导。

Host Latency

H2D 延迟、GPU 计算时间和 D2H 延迟的总和。这是推断单个执行的延迟。

Enqueue Time

将执行排入队列的主机延迟,包括调用 H2D/D2H CUDA API、运行主机端方法和启动 CUDA 内核。如果这比 GPU 计算时间长,则 GPU 可能未被充分利用,并且吞吐量可能由主机端开销支配。使用 CUDA 图(带有--useCudaGraph )可以减少排队时间。

H2D Latency

单个执行的输入张量的主机到设备数据传输的延迟。添加--noDataTransfer以禁用 H2D/D2H 数据传输。

D2H Latency

单个执行的输出张量的设备到主机数据传输的延迟。添加--noDataTransfer以禁用 H2D/D2H 数据传输。

GPU Compute Time

为执行 CUDA 内核的 GPU 延迟。

Total Host Walltime

从第一个执行(预热后)入队到最后一个执行完成的主机时间。

Total GPU Compute Time

所有执行的 GPU 计算时间的总和。如果这明显短于 Total Host Walltime,则 GPU 可能由于主机端开销或数据传输而未得到充分利用。

图 1. 在 Nsight 系统下运行的正常trtexec的性能指标(ShuffleNetBS=16,best,TitanRTX@1200MHz)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TWHksjxo-1676555438176)(trtexec.png)]

--dumpProfile标志添加到trtexec以显示每层性能配置文件,这使用户可以了解网络中的哪些层在 GPU 执行中花费的时间最多。每层性能分析也适用于作为 CUDA 图启动推理(需要 CUDA 11.1 及更高版本)。此外,使用--profilingVerbosity=detailed标志构建引擎并添加--dumpLayerInfo标志以显示详细的引擎信息,包括每层详细信息和绑定信息。这可以让你了解引擎中每一层对应的操作及其参数。

A.3.1.2. Serialized Engine Generation

如果您生成保存的序列化引擎文件,您可以将其拉入另一个运行推理的应用程序中。例如,您可以使用TensorRT 实验室以完全流水线异步方式运行具有来自多个线程的多个执行上下文的引擎,以测试并行推理性能。有一些警告;例如,如果您使用 Caffe prototxt 文件并且未提供模型,则会生成随机权重。此外,在 INT8 模式下,使用随机权重,这意味着 trtexec 不提供校准功能。

A.3.1.3. trtexec

如果您向--timingCacheFile选项提供时序缓存文件,则构建器可以从中加载现有的分析数据并在层分析期间添加新的分析数据条目。计时缓存文件可以在其他构建器实例中重用,以提高构建器执行时间。建议仅在相同的硬件/软件配置(例如,CUDA/cuDNN/TensorRT 版本、设备型号和时钟频率)中重复使用此缓存;否则,可能会出现功能或性能问题。

A.3.1.4. 常用的命令行标志

该部分列出了常用的trtexec命令行标志。

构建阶段的标志

  • --onnx=<model> :指定输入 ONNX 模型。

  • --deploy=<caffe_prototxt> :指定输入的 Caffe prototxt 模型。

  • --uff=<model> :指定输入 UFF 模型。

  • --output=<tensor> :指定输出张量名称。仅当输入模型为 UFF 或 Caffe 格式时才需要。

  • --maxBatch=<BS> :指定构建引擎的最大批量大小。仅当输入模型为 UFF 或 Caffe 格式时才需要。如果输入模型是 ONNX 格式,请使用--minShapes--optShapes--maxShapes标志来控制输入形状的范围,包括批量大小。

  • --minShapes=<shapes> , --optShapes=<shapes> , --maxShapes=<shapes> :指定用于构建引擎的输入形状的范围。仅当输入模型为 ONNX 格式时才需要。

  • --workspace=<size in MB> :指定策略允许使用的最大工作空间大小。该标志已被弃用。您可以改用--memPoolSize=<pool_spec>标志。

  • --memPoolSize=<pool_spec> :指定策略允许使用的工作空间的最大大小,以及 DLA 将分配的每个可加载的内存池的大小。

  • --saveEngine=<file> :指定保存引擎的路径。

  • --fp16--int8--noTF32--best :指定网络级精度。

  • --sparsity=[disable|enable|force] :指定是否使用支持结构化稀疏的策略。

    • disable :使用结构化稀疏禁用所有策略。这是默认设置。
    • enable :使用结构化稀疏启用策略。只有当 ONNX 文件中的权重满足结构化稀疏性的要求时,才会使用策略。
    • force :使用结构化稀疏启用策略,并允许 trtexec 覆盖 ONNX 文件中的权重,以强制它们具有结构化稀疏模式。请注意,不会保留准确性,因此这只是为了获得推理性能。
  • --timingCacheFile=<file> :指定要从中加载和保存的时序缓存。

  • --verbose :打开详细日志记录。

  • --buildOnly :在不运行推理的情况下构建并保存引擎。

  • --profilingVerbosity=[layer_names_only|detailed|none] :指定用于构建引擎的分析详细程度。

  • --dumpLayerInfo , --exportLayerInfo=<file> :打印/保存引擎的层信息。

  • --precisionConstraints=spec :控制精度约束设置。

    • none :没有限制。
    • prefer :如果可能,满足--layerPrecisions / --layerOutputTypes设置的精度约束。
    • obey:满足由--layerPrecisions / --layerOutputTypes设置的精度约束,否则失败。
  • --layerPrecisions=spec :控制每层精度约束。仅当PrecisionConstraints设置为服从或首选时才有效。规范是从左到右阅读的,后面的会覆盖前面的。 “ * ”可以用作layerName来指定所有未指定层的默认精度。

    • 例如: --layerPrecisions=*:fp16,layer_1:fp32将所有层的精度设置为FP16 ,除了 layer_1 将设置为 FP32
  • --layerOutputTypes=spec :控制每层输出类型约束。仅当PrecisionConstraints设置为服从或首选时才有效。规范是从左到右阅读的,后面的会覆盖前面的。 “ * ”可以用作layerName来指定所有未指定层的默认精度。如果一个层有多个输出,则可以为该层提供用“ + ”分隔的多种类型。

    • 例如: --layerOutputTypes=*:fp16,layer_1:fp32+fp16将所有层输出的精度设置为FP16 ,但 layer_1 除外,其第一个输出将设置为 FP32,其第二个输出将设置为 FP16

推理阶段的标志

  • --loadEngine=<file> :从序列化计划文件加载引擎,而不是从输入 ONNX、UFF 或 Caffe 模型构建引擎。
  • --batch=<N> :指定运行推理的批次大小。仅当输入模型为 UFF 或 Caffe 格式时才需要。如果输入模型是 ONNX 格式,或者引擎是使用显式批量维度构建的,请改用--shapes
  • --shapes=<shapes> :指定要运行推理的输入形状。
  • --warmUp=<duration in ms> , --duration=<duration in seconds> , --iterations=<N> : 指定预热运行的最短持续时间、推理运行的最短持续时间和推理运行的迭代。例如,设置--warmUp=0 --duration=0 --iterations允许用户准确控制运行推理的迭代次数。
  • --useCudaGraph :将推理捕获到 CUDA 图并通过启动图来运行推理。当构建的 TensorRT 引擎包含 CUDA 图捕获模式下不允许的操作时,可以忽略此参数。
  • --noDataTransfers :关闭主机到设备和设备到主机的数据传输。
  • --streams=<N> :并行运行多个流的推理。
  • --verbose :打开详细日志记录。
  • --dumpProfile, --exportProfile=<file> :打印/保存每层性能配置文件。

有关所有受支持的标志和详细说明,请参阅trtexec --help

有关如何构建此工具及其使用示例的详细信息,请参阅GitHub:trtexec/README.md文件。

更多精彩内容:
https://www.nvidia.cn/gtc-global/?ncid=ref-dev-876561

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

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

相关文章

关于表的操作+1 数据库(4)

素材&#xff1a; 学生表&#xff1a;Student (Sno, Sname, Ssex , Sage, Sdept) 学号&#xff0c;姓名&#xff0c;性别&#xff0c;年龄&#xff0c;所在系 Sno为主键 课程表&#xff1a;Course (Cno, Cname) 课程号&#xff0c;课程名 Cno为主键 学生选课表&#xff1a;SC (…

常见的5大软件项目风险,如何进行规避?

1、客户没有或很少参与项目 日常项目开发中&#xff0c;容易出现这样的风险&#xff1a;客户在最开始的时候提交了一份文档&#xff0c;在项目启动、计划和执行阶段&#xff0c;客户没有参与&#xff0c;只是在项目收尾时进行验收&#xff0c;客户一旦发现开发结果与预期需求相…

第42天|LeetCode121. 买卖股票的最佳时机、LeetCode122. 买卖股票的最佳时机 II

1.题目链接&#xff1a;121. 买卖股票的最佳时机 题目描述&#xff1a; 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票&#xff0c;并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法…

C++类基础(十六)

类的继承——继承与特殊成员函数 ● 派生类合成的…… – 缺省构造函数会隐式调用基类的缺省构造函数 – 拷贝构造函数将隐式调用基类的拷贝构造函数 – 赋值函数将隐式调用基类的赋值函数 struct Base {Base(){std::cout << "Base()\n";}Base(const Base&…

重生之我是赏金猎人-SRC漏洞挖掘(五)-轻松GET某src soap注入

0x01 挖掘 在对某SRC测试时&#xff0c;本人根据其证书信息收集到了部分深度子域&#xff0c;并找到了其对应的业务IP段 写了个shell脚本ffuf批量fuzz某src c段资产目录 发现了xxSRC c段的一个提供了webservice的服务器 http://180.x.x.x/webservice/ 获取到接口 http://1…

全国计算机等级考试报名照片要求以及证件照制作教程

马上就全国计算机等级考试就要开始了&#xff0c;相信现在很多同学都在网上进行报名呢&#xff0c;报名的时候肯定需要用到个人证件照片&#xff0c;所以问题来了&#xff0c;我们怎么自己制作证件照片呢&#xff1f;计算机等级考试报名时对证件照都有哪些要求呢&#xff1f;该…

06 antdesign react Anchor 不同页面之间实现锚点

react Anchor 不同页面之间实现锚点一、定义二、使用步骤三、开发流程(一)、组件(二)、页面布局(三)、点击事件(四)、总结说明一、react单页面应用&#xff0c;当前页面的锚点二、react单页面应用&#xff0c;不同页面的锚点思路&#xff1a;锚点只能在当前页面使用&#xff0c…

central cache设计及实现

你好&#xff0c;我是安然无虞。 central cache 设计及实现 central cache 也是一个哈希桶结构, 而且它的哈希桶的映射关系跟 thread cache 是一样的, 不同的是 central cache 每个哈希桶位置上挂的是 SpanList 双向链表结构, 而且每个哈希桶下面的 span 中的大块内存被按映射…

大数据之数据中台

目录数据仓库传统数据仓库无法支撑互联网时代的商业智能数据埋点数据仓库 数据仓库是在企业管理和决策中面向主题的、集成的、与时间相关的、不可修改的数据集合。 在电商场景中&#xff0c;有一个数据库专门存放订单的数据&#xff0c;另外一个数据库存放会员相关的数据。构建…

订单服务:订单流程

订单流程 订单流程是指从订单产生到完成整个流转的过程&#xff0c;从而行程了一套标准流程规则。而不同的产品类型或业务类型在系统中的流程会千差万别&#xff0c;比如上面提到的线上实物订单和虚拟订单的流程&#xff0c;线上实物订单与 O2O 订单等&#xff0c;所以需要根据…

[Datawhale][CS224W]图机器学习(三)

目录一、简介与准备二、教程2.1 下载安装2.2 创建图2.2.1 常用图创建&#xff08;自定义图创建&#xff09;1.创建图对象2.添加图节点3.创建连接2.2.2 经典图结构1.全连接无向图2.全连接有向图3.环状图4.梯状图5.线性串珠图6.星状图7.轮辐图8.二项树2.2.3 栅格图1.二维矩形栅格…

如何修改 类名::静态变量?

好久没更新了&#xff0c;其中经历了备战省赛&#xff0c;重装电脑&#xff0c;换服务器&#xff0c;重新搭建博客等一系列事&#xff0c;受到许多技术大牛的指点&#xff0c;而且新人太厉害了&#xff0c;卷卷卷&#xff01; Geek Challenge 2021有一道BabyPOP&#xff0c;这…

vue写一个翻页的时间插件

读秒效果有一个从上向下的翻页效果 效果图 clock代码 <template><div class"dateClock"><div class"todayClass"><p class"datep">{{dateToday}}</p><span style"float:right;font-size:16px">…

基于 VPX 总线的工件台运动控制系统研究与开发-DSP+FPGA硬件架构(一)

作为光刻机核心单元之一&#xff0c;超精密工件台主要负责实现快速扫描、上下片、精密定位、调平调焦等功能。目前&#xff0c;较为成熟的方案大多采用 VME 并行总线架构来建立超精密工件台控制系统&#xff0c;由于随着系统性能要求的提升&#xff0c;VME 总线以及相应的处理器…

最大连续子列和

给定一个数组&#xff0c;求它的最大连续子列和。这个问题有四种解法。 1、暴力循环(O(n^3))分析这个问题&#xff0c;既然是子列&#xff0c;那么它最长为n&#xff0c;最短为1。要想求和我们一般需要知道这个子列的左端下标和右端下标&#xff0c;再求这个子列的和。最简单的…

深入浅出带你学习Nginx中间件常见漏洞

前言 上篇文章总结了APACHE中间件的常见漏洞&#xff0c;本文介绍一个同样很常用的中间件——nginx&#xff0c;本文会讲解关于nginx中间件的常见漏洞利用方式与危害&#xff0c;下面展开来给大家讲解。 Nginx是什么&#xff1f; 在讲漏洞之前我们需要先知道什么是nginx,简单…

《SQL基础》11. 索引

SQL - 索引索引概述结构B-TreeBTreeHash思考分类语法SQL性能分析SQL执行频率慢查询日志profile详情explain执行计划索引失效情况范围查询索引列运算字符串不加引号模糊查询or连接条件数据分布影响使用规则最左前缀法则SQL提示覆盖索引前缀索引设计原则索引 概述 索引&#xf…

linux安装minio,注册服务实现开机自启动

一、安装1.创建安装目录mkdir -p /usr/local/soft/minio2.下载文件cd /usr/local/soft/miniowget -q http://dl.minio.org.cn/server/minio/release/linux-amd64/minio3.新建数据存储目录mkdir -p /home/minio/data4.授予可执行权限chmod x minio5.设置账号密码export MINIO_AC…

yolov8代码梳理 训练自己的数据 最终版

1.总结一下 最开始为了检测不规则的麻包袋&#xff0c;所以采用了目标检测。yolov3&#xff0c;fasterrcnn&#xff0c;ssd。这种矩形框还是可以用。后面检测的物体变成了规则的纸箱&#xff0c;我们还用目标检测发现&#xff0c;没有旋转角度&#xff0c;因为箱子的摆放不是正…

深度学习算法面试常问问题(三)

pooling层是如何进行反向传播的&#xff1f; average pooling&#xff1a; 在前向传播中&#xff0c;就是把一个patch的值取平均传递给下一层的一个像素。因此&#xff0c;在反向传播中&#xff0c;就是把某个像素的值平均分成n份 分配给上一层。 max pooling&#xff1a; 在前…