TensorRT python API 文档翻译

2023-05-16

前言

近期需要研究如何使用TensorRT的python API,翻译了部分文档,做我个人的笔记,大家也可分享交流,如有错误,感谢勘误.
参考网址:Using The Python API

Using The Python API

1 导入TRT

import tensorrt as tf
TRT_LOGGER = trt.Logger(trt.Logger.WARNING)

启动一个logging界面,以输出TRT的errors,warnings和信息化的信息(informational messages), 在以上代码中,我们已经抑制了信息化信息输出,仅仅报告warning和errors.

2.创建python定义的网络

在部署TensorRT推断时第一步是根据你的模型创建TRT网络。

最简单的方式是使用TRT解析库(TRT parser library),支持使用以下格式序列化模型:

  • Caffe(both BVLC and NVCaffe)
  • Supports ONNX releases up to ONNX 1.6, and ONNX opsets 7 to 11, and
  • UFF (used for TensorFlow)

一个可替代方案是直接使用TensorRT Network API定义模型,需要你去创建一小部分API来被调用,
以定义网络图中的每一层和实现你自己训练参数的导入机制.

2.1 使用Python API逐层搭建

目前未用到,不做翻译.

2.2 使用Python解析器导入模型

主要分为3个步骤:

  1. 创建 TRT builder 和 network
  2. 为特定的格式创建TRT 解析器
  3. 使用解析器解析输入的模型和populate网络

builder必须在network前创建,因为它对于network来讲是个factory.不同的parser有不同的机制来mark网络的输出.

2.3 从Caffe中导入模型

目前未用到,不做翻译

2.4 从Tensorflow中导入

  • Step1. import tensorrt as tf
  • Step2. 为tensorflow模型创建一个frozen TensorFlow模型. 如何将Tensorflow模型freez进一个stream可以见Freezing A TensorFlow Graph
  • Step3. 使用UFF converter来讲一个frozen tensorflow模型转为UFF文件,代码为:
convert-to-uff frozen_inference_graph.pb

若使用以上命令,可以使用代码python -c “import uff; print(uff.\__path__)” 找到UFF位置

  • Step4. 定义模型的位置,例如,对例子而言
model_file = '/data/mnist/mnist.uff'
  • Step5. 创建一个builder,network和parser:
with trt.Builder(TRT_LOGGER) as builder, builder.create_network() as network, trt.UffParser() as parser:
         parser.register_input("Placeholder", (1,28,28))
         parser.register_output("fc2/Relu")
         parser.parse(model_file, network)

3.使用Python创建一个Engine

builder中函数的作用之一是搜索CUDA kernels的catalog,以最快速部署.因此需要在building时需要使用同一个GPU,engine优化将在其上运行.
有两个重要的参数: maximun batch sizemaximum workspace size

  • maximum batch size指定TRT优化的batch size,在运行时,必须选用更小的batch size
  • Layer需要临时的workspace,参数限制了network中所有曾可用的最大的工作空间大小,如果给的空间不充足,TRT针对给定的layer可能无法找到implementation.

流程:

  • step1. 使用build对象创建engine
 with trt.Builder(TRT_LOGGER) as builder, builder.create_builder_config() as config:
   config.max_workspace_size = 1 << 20 # This determines the amount of memory available to the builder when building an optimized engine and should generally be set as high as possible.
   with builder.build_engine(network, config) as engine:

 #Do inference here

当engine创建时,TRT复制权重.
- Step2.进行推断.

4. 使用Python序列化(serialize)一个模型

到第三步,可用序列化engine,也可以直接使用engine进行推断.序列化和反序列化是可选的.
序列化模型后,可用转换engine为存储的格式,可用在以后进行推断.使用这个序列化后的文件做推断,仅仅需要简单的反序列化engine.
序列化和反序列化是可选的,因为序列化是极其小耗时间的,序列化可用每次避免重复创建engine.
Notes:序列化的engines不是扩平台或者跨TRT版本的.engine对特定的用来创建它们的GPU模型是定制的.

  • Step1. 序列化模型
  serialized_engine = engine.serialize()
  • Step2.反序列化来执行推断,反序列化需要创建一个runtime对象
    with trt.Runtime(TRT_LOGGER) as runtime: engine = runtime.deserialize_cuda_engine(serialized_engine)

同样可以指定序列化为一个文件,然后从文件中读回它
step1. 序列化并写入文件

   with open(“sample.engine”, “wb”) as f:
		f.write(engine.serialize())
  • Step2. 从文件中读取engine并反序列化
 with open(“sample.engine”, “rb”) as f, trt.Runtime(TRT_LOGGER) as runtime:
      engine = runtime.deserialize_cuda_engine(f.read())

5. 使用Python执行推断

  • Step1. 为输入输出分配一些host和device buffers
   # Determine dimensions and create page-locked memory buffers (i.e. won't be swapped to disk) to hold host inputs/outputs.
   	h_input = cuda.pagelocked_empty(trt.volume(engine.get_binding_shape(0)), dtype=np.float32)
   	h_output = cuda.pagelocked_empty(trt.volume(engine.get_binding_shape(1)), dtype=np.float32)
   	# Allocate device memory for inputs and outputs.
   	d_input = cuda.mem_alloc(h_input.nbytes)
   	d_output = cuda.mem_alloc(h_output.nbytes)
   	# Create a stream in which to copy inputs/outputs and run inference.
   	stream = cuda.Stream()
  • Step2. 创建一些空间来保存中间激活值,因为engine包含network定义和训练参数,因此需要额外的空间.
    with engine.create_execution_context() as context:
		# Transfer input data to the GPU.
		cuda.memcpy_htod_async(d_input, h_input, stream)
		# Run inference.
		context.execute_async(bindings=[int(d_input), int(d_output)], stream_handle=stream.handle)
		# Transfer predictions back from the GPU.
		cuda.memcpy_dtoh_async(h_output, d_output, stream)
		# Synchronize the stream
		stream.synchronize()
		# Return the host output.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TensorRT python API 文档翻译 的相关文章

  • Python OverflowError:数学范围错误[重复]

    这个问题在这里已经有答案了 当我尝试这个计算时 出现溢出错误 output math exp 1391 12694245 100 我知道发生这种情况是因为使用的数字 超出了双精度数的范围 但有什么方法可以解决这个问题并获得输出值 有人可以帮
  • 以 str.format 切片字符串

    我想实现以下目标str format x y 1234 5678 print str x 2 str y 2 我能够做到这一点的唯一方法是 print 0 1 format str x 2 str y 2 现在 这是一个例子 我真正拥有的是
  • Keras model.summary() 结果 - 了解参数数量

    我有一个简单的神经网络模型 用于使用 Keras Theano 后端 从用 python 编写的 28x28px 图像中检测手写数字 model0 Sequential number of epochs to train for nb ep
  • 在 Python 中同时插入行

    我正在尝试对我的代码进行矢量化 但遇到了障碍 我有 nxd x 值数组 x1 xn 其中每一行 x1 有很多点 x11 x1d nxd y 值数组 y1 y2 y3 其中每一行 y1 有很多点 y11 y1d x 值的 nx1 数组 x 1
  • 如何将人物传奇带到前台?

    我有一系列子图 其中每个子图都有一个图例 我想在每个子图之外与相邻子图重叠 问题在于图例位于其自己的图的 顶部 但位于相邻图的下方 Legend 不将 zorder 作为参数 所以我不知道如何解决这个问题 这是我使用过的代码 import
  • Json.dump 失败并显示“必须是 unicode,而不是 str”TypeError

    我有一个 json 文件 其中恰好有大量中文和日文 以及其他语言 字符 我将其加载到我的 python 2 7 脚本中使用io open如下 with io open multiIdName json encoding utf 8 as j
  • 如何将 UPX 与 pyinstaller 一起使用?

    如何将 UPX 与 pyinstaller 一起使用 我正在关注文档 我已经下载了UPX 我的文件如下所示 import csv import selenium import pandas print Hello 然后我运行 pyinsta
  • 将 2D Panda 的 DataFrame 列表转换为 3D DataFrame

    我正在尝试创建一个将标签值保存到 2D DataFrame 的 Pandas DataFrame 这是我到目前为止所做的 我正在使用读取 csv 文件pd read csv并将它们附加到列表中 出于这个问题的目的 让我们考虑以下代码 imp
  • Pygooglevoice登录错误

    另一个人问了这个问题 但没有回复 所以我再问一遍 我正在尝试使用 pygooglevoice API 但是当我运行 SMS py 示例脚本时 它给了我一个登录错误 我已经安装了 Enthought python 我想也许我还需要安装其他东西
  • 使用 argparse 指定默认文件名,但不使用 --help 打开它们?

    假设我有一个对文件执行一些操作的脚本 它在命令行上获取此文件的名称 但如果未提供 则默认为已知文件名 content txt 说 与蟒蛇的argparse 我使用以下内容 parser argparse ArgumentParser des
  • 自适应支付 API 错误 580001

    我正在 python 中向 paypal 自适应支付 API 发出 PAY 请求 并收到通用错误 id 580001 没有其他信息 headers API credentials for the API caller business ac
  • 如何连接多个字符串? [复制]

    这个问题在这里已经有答案了 如何将 stringList 中的所有字符串合并为一个而不打印它 例如 s joinStrings very hot day returns string print s Veryhotday 感觉有点倒退 但是
  • 返回吃异常

    我至少发现了以下行为weird def errors try ErrorErrorError finally return 10 print errors prints 10 It should raise NameError name E
  • 如何从 IDLE 命令行运行 Python 脚本?

    在 bash shell 中 我可以使用 bash 或 source 手动调用脚本 我可以在 Python IDLE 的交互式 shell 中做类似的事情吗 我知道我可以转到文件 gt gt 打开模块 然后在单独的窗口中运行它 但这很麻烦
  • 对 Python 列表元素进行分组

    我有一个 python 列表 如下所示 my list 25 1 0 65 25 3 0 63 25 2 0 62 50 3 0 65 50 2 0 63 50 1 0 62 我想根据以下规则对它们进行排序 1 gt 0 65 0 62 l
  • Pandas:按日历周分组,然后绘制真实日期时间的分组条形图

    EDIT 我找到了一个非常好的解决方案并将其发布在下面作为答案 结果将如下所示 您可以为此问题生成一些示例数据 codes list ABCDEFGH dates pd Series pd date range 2013 11 01 201
  • Python 对列表中的值求和(如果它存在于另一个列表中)

    我有一个列表和一组 a list 1 2 2 1 1 1 b list 1 2 我正在寻找对应 b list 中的项目并将它们从 a list 中的值相加 以便输出为 1 3 2 1 我尝试过的 sum 0 for i in a list
  • python 相当于 sed

    有没有一种方法 无需双循环即可完成以下 sed 命令的操作 Input Time Banana spinach turkey sed i Banana s Toothpaste file Output Time BananaToothpas
  • 将同一 numpy 数组的两个视图组合成单个视图而不复制数组?

    我有一个大型 2d numpy 数组 我想删除它的子集并处理函数剩下的内容 我需要对许多子集执行此操作 因此理想情况下我不想每次都创建数组的副本 该函数不会更改数组中的任何值 mat np load filename mat 1 mat i
  • 使用 TkInter 绑定设置不可交互(点击)覆盖

    我已经浏览了其他几篇关于类似问题的帖子 所有这些似乎都指向this https stackoverflow com questions 29458775 tkinter see through window not affected by

随机推荐

  • Linux学习笔记导航页

    本博客中与博主Linux学习相关的博文导航 xff0c 方便查看 Linux系统ls命令详解Linux系统中目录的内容详解 bin dev etc home lib opt usr varLinux操作文件与目录 cp mv mkdir r
  • Jetson TX2使用经验导航页

    本博客中与Jetson TX2使用相关的博文导航 xff0c 方便查看 JetsonTX2 之刷机 Jetpack 4 3TX2 ubuntu 18 04 更换清华镜像源Jetson TX2刷机后查看CUDA和CUDNN版本 以JetPac
  • Pytorch学习导航页

    本博客中与pytorch学习相关的博文 xff0c 方便查看 Pytorch源码学习之一 xff1a torchvision models alexnetPytorch源码学习之二 xff1a torchvision models vggP
  • Python小技巧导航页

    本博客中与Python使用技巧相关的博文 xff0c 方便查看 使用matplotlib绘图库的pyplot快速绘图Python调用face 43 43 API完成本地图片的人脸检测Python爬虫 按照关键词爬取视觉中国高清图像pytho
  • Linux归档与备份——gzip、gunzip、bzip2、bunzip2、tar、zip、unzip、rsync

    维护系统数据安全是计算机系统管理者的基本任务之一 xff0c 及时创建系统文件的备份文件是维度系统数据安全的一种常用方法 本节主要介绍以下命令 文件压缩程序 gzip 压缩和解压缩文件工具bzip2 块排序文件压缩工具 文件归档程序 tar
  • Linux之存储介质——mount、umount、fdisk、mkfs

    本节讨论设备级别的数据处理 对于诸如硬盘之类的物理存储器 网络存储器以及像RAID 独立冗余磁盘陈列 和LVM 逻辑卷管理 之类的虚拟存储器 xff0c Linux都有惊人的处理能力 本节主要用到以下命令 mount 挂载文件系统umoun
  • Jetson TX2挂载SD卡--亲测有效!

    不得不说 xff0c TX2用于深度学习算法的部署 xff0c 一个很大的问题是硬盘容量太小 xff0c 由于我的应用需求需要存储大量数据 xff0c 因此需要挂载一个SD卡 关于Linux挂载存储介质相关原理可参考我的博客 Linux之存
  • 实用的测试流程梳理总结(质量保障)

    废话不多说 xff0c 简明扼要的列出我认为测试最重要的几点 xff1a 1 测试思维 xff1a 优秀的测试思维对case设计的好坏起决定作用 xff0c case的好坏对测试效率和测试质量起决定作用 xff0c 所以测试思维非常重要 我
  • Linux之正则表达式---grep、元字符、任意字符、锚、中括号、否定、POSIX字符类

    正则表达式是一个非常重要的用于文本操作的工具 0 参考文献 Linux命令行大全 美 William E Shotts Jr 著 郭光伟 郝记生 译 xff0c 人民邮电出版社 更多有用的Linux知识详解 xff0c 可参加博主的Linu
  • Linux之文本处理---cat、sort、uniq、cut、paste、join、comm、diff、patch、tr、sed、aspell

    由于所有类UNIX操作系统都严重依赖于文本文件来进行某些数据类型的存储 所以需要很多可以进行文本操作的工具 常见的文本格式有 文件 xff1a 使用纯文本格式编辑的文件 在使用文本格式编辑较大文件时 xff0c 常用的方法是 xff0c 首
  • Linux之编译程序详细介绍---./configure、make、make install

    本节介绍如何通过源代码生成可执行程序 xff0c 在博主前期使用NVIDIA Jetson TX2时 由于Arm架构的各个包不完备 经常需要源码编译OpenCV等 为什么要编译软件呢 xff1f 可用性 尽管有些发行版已经包含了版本库中的一
  • 使用Visual Genome API + python3使用及数据集详情

    Visual Genome数据集 Visual Genome 主页Visual Genome APIVisual Genome Python DriverVisual Genome 论文 注意 xff0c API多为python2的实现 x
  • PIL:Python图像处理类库的基本用法

    span class token keyword from span PIL span class token keyword import span Image span class token keyword import span o
  • Leetcode之单调栈题目解答----基于python3

    一 单调栈 顾名思义 xff0c 单调栈就是栈里面存放的数据都是有序的 xff0c 所以可以分为单调递增栈和单调递减栈两种 单调递增栈就是从栈底到栈顶是从大到小 单调递减栈就是从栈底到栈顶是从小到大 基于它的特性 xff0c 其十分适合处理
  • TX2上编译安装TensorRT的SampleUffMaskRCNN示例程序

    安装目录 主要参考网址Step1 TX2刷机Jetpack 4 3Step2 重装curl以支持httpsStep3 TX2升级cmakeStep4 克隆TensorRT库 注意版本号 xff01 Step5 开始编译sampleUffMa
  • Ubuntu 18.04 安装配置TensorRT 6.0

    Ubuntu 18 04 安装配置TensorRT 6 0 Step1 安装anacondaStep2 安装CUDA10 1Step3 安装cudnn 7 6 5Step4 配置cuda路径Step5 安装pipStep 6 conda创建
  • Ubuntu18.04编译TensorRT MaskRCNN例子和模型转化---sampleuffMaskRCNN

    Ubuntu18 04编译TensorRT MaskRCNN例子和模型转化 0 前期准备Step1 安装requirement txt需要的依赖Step2 安装编译sample需要的其他系统的包Step3 Clone github 的Ten
  • Python利用Threading库实现2个程序多线程通信

    前言 这里预设的需求是线程Thread 1 GetAttributes通过GetAttributesThread类获取模型的推断结果写入全局变量global attribute中 假设推断时间1s xff0c 线程Thread 2 Show
  • Git GUI客户端选择

    Git客户端 git工具在日常开发中必不可少 xff0c 很多人还是一直在敲命令行 xff0c 没毛病 今天分享一波Git的比较主流的GUI客户端 第一款 xff0c Windows用户强力推荐TortoiseGit xff08 小乌龟 x
  • TensorRT python API 文档翻译

    前言 近期需要研究如何使用TensorRT的python API 翻译了部分文档 做我个人的笔记 大家也可分享交流 如有错误 感谢勘误 参考网址 Using The Python API Using The Python API 1 导入T