TensorRT学习笔记(三)

  1. 云栖社区>
  2. 博客>
  3. 正文

TensorRT学习笔记(三)

night李 2018-02-26 23:08:59 浏览5083
展开阅读全文

TENSORRT工作流程:
下表列出了TensorRT功能及其支持的API。
2
下列表显示TensorRT支持的平台
2
关键词:
UFF:
通用框架格式(UFF)是描述DNN(深度神经网络)的执行图的数据格式,并且从该执行图与其输入和输出进行绑定。 它有一个明确的核心语言,但也将支持对其核心操作和完全自定义操作的扩展。
格式包括:

  • 序列化格式的具体语法,采用protobuf模式。
  • 每个操作符的有效性定义,表示为一组python描述符。
  • 记录每个核心操作的行为(以便将来交付)。

PLAN文件:
PLAN文件是运行时引擎用来执行网络的序列化数据。 它包括权重,内核执行网络的时间表,以及应用程序可以查询的网络信息,以确定如何绑定输入和输出缓冲区。
工作流程图:
下图展示了一个典型的开发工作流程,用户通过训练数据模型来生成训练有素的网络。 训练好的网络可以用于推断。
正在将网络导入TensorRT。 用户将训练好的网络导入TensorRT,TensorRT优化网络以生成PLAN。 例如,该PLAN被用于推断,以验证优化是否已正确执行。
PLAN也可以被序列化到磁盘,以便稍后重新加载到TensorRT运行时,而不必再次执行优化步骤。
4
NVCaffe C ++工作流程:
TensorRT可以通过NvCaffeParser界面直接导入NVCaffe模型。
使用NvCaffeParser解析器的示例可以在SampleMNIST中找到。 在那里,TensorRT网络定义结构使用NvCaffeParser库从NVCaffe模型直接填充:

INetworkDefinition* network = builder->createNetwork();
CaffeParser* parser = createCaffeParser();
std::unordered_map<std::string, infer1::Tensor> blobNameToTensor;
const IBlobNameToTensor* blobNameToTensor =
parser->parse(locateFile(deployFile).c_str(),
    locateFile(modelFile).c_str(),
    *network,
    DataType::kFLOAT);

指示NvCaffeParser生成一个权重为32位浮点数的网络,但我们可以通过DataType :: kHALF生成一个16位权重的模型。
除填充网络定义外,解析器还会返回一个从NVCaffe blob名称映射到TensorRT张量的字典。
TensorRT网络定义没有就地操作的概念,例如,ReLU的输入和输出张量是不同的。 当NVCaffe网络使用就地操作时,字典中返回的TensorRT张量对应于最后一次写入该blob。 例如,如果卷积创建了一个blob,然后是一个就地的ReLU,那么该Blob的名称将映射到作为ReLU输出的TensorRT张量。
由于NVCaffe模型不会告诉哪些张量是网络的输出,需要在解析后明确指定这些张量:

for (auto& s : outputs)
      network->markOutput(*blobNameToTensor->find(s.c_str()));

对输出张量的数量没有限制,但是,将张量标记为输出,可能禁止对张量进行一些优化。
不要立即释放解析器对象,因为网络定义通过引用NVCaffe模型来保存权重,而不是按值。 只有在构建过程中才会从NVCaffe模型中读取权重。
timg

网友评论

登录后评论
0/500
评论
night李
+ 关注