原创作品,转载时请务必以超链接形式标明文章原始出处: http://www.dapalm.com/?p=203,作者:大数据,怕了么?
本手册为TensorRT 4.0.1.6 GA版英文手册翻译而来,博主英文水平一般般,主要作为备忘所用,分享出来以供更多开发者使用。TensorRT Developer Guide手册一共分为四个章节,主要内容在第二、三章,看懂这两章,写代码够用了。第一章为TensorRT综述,就是自吹有多牛逼。第四章为示例,介绍demo的代码结构及功能。开篇是目录,前三章每章为两到三篇,最后第四章示例,会拆分几个关键示例进行详细说明。
这是第二章关于Python接口使用的说明,个人觉得没有什么用,一般使用TensorRT都是为了优化部署,很少去用python,所以我也不太了解,不过流程与C++接口是一模一样的,很容易上手。下一篇是是第二章的最后一部分内容,关于自定义层、混合精度、以及产品部署。
第二章 TensorRT任务
2.8Python初始化TensorRT
TensorRT的两种初始化方法(流程与C++一样):
‣创建IBuilder对象去优化网络(创建后可生成序列化文件)
‣创建IRuntime对象去执行优化网络(从序列化文件导入)
在任何一种情况下,您都必须实现一个日志记录接口,TensorRT通过该接口打印错误,警告和信息性消息。 以下代码显示了如何实现日志记录接口。 在这种用例中,我们已经禁止了信息性消息,只打印警告性和错误性消息。简单地调用trt.infer.ConsoleLogger获得句柄即可。
G_LOGGER = trt.infer.ConsoleLogger(trt.infer.LogSeverity.ERROR)
日志记录接口可用于创建多个运行时和构建器实例,但是日志记录接口是一个单件(整个应用程序中只有一个类实例且这个实例所占资源在整个应用程序中是共享的),所以你必须为每个对象使用同一个日志记录实例。
创建构建器或运行时时,将随着线程而创建GPU上下文。 虽然默认上下文如果不存在,会自动创建它,但还是建议创建构建器或运行时实例之前,创建和配置CUDA上下文。
2.9 Python创建网络定义
使用TensorRT首先需要将训练好的模型转换成TensorRT的表示形式,然后再构建优化的运行时。
下面将在Python中使用两种方式导入模型,一种是通过解析器导入,一种从框架导入现有模型。不管怎样,Python接口的使用方式与2.3节中使用C++创建网络定义非常类似。
注:TensorRT Python API只在x86_64平台有效。
2.9.1 Python使用解析器导入模型
要使用Python 解析器API导入模型,你需要执行以下主要步骤:
1.创建构建器和网络
2.针对指定格式,创建相应的解析器
3.使用解析器解析导入的模型并填充网络。
先创建构建器(作为网络工厂),再创建网络。 不同的解析器有不同的标记网络输出机制。
2.9.2 使用Python导入Caffe模型
这个例子教你使用NvCaffeParser和Python API直接导入Caffe模型,例子在../examples/caffe_to_trt/caffe_mnist.py中,更多信息,请参考示例sampleMNIST。
1.导入TensorRT包和其他包
Import tensorrt as trt
2.定义数据类型,这里使用float32
datatype = trt.infer.DataType.FLOAT
3.传入所需文件路径
MODEL_PROTOTXT = ‘/data/mnist/mnist.prototxt’
CAFFE_MODEL = ‘/data/mnist/mnist.caffemodel’
4.创建构建器
builder = trt.infer.create_infer_builder(G_LOGGER)
5.创建网络
network = builder.create_network()
6.创建解析器
par