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 文档翻译 的相关文章

随机推荐

  • 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