MARVIS的中文名翻译英文名是是哪个国家的

原创作品转载时请务必以超链接形式标明文章原始出处: ,作者:

  本手册为TensorRT 4.0.1.6 GA版英文手册翻译而来,博主英文水平一般般主要作为备忘所用,分享出来以供更多开发者使用TensorRT Developer Guide手册一共分为四个章节,主要内容在第二、三章看懂这两章,写代码够用了第一章为TensorRT综述,就是自吹有多牛逼第四章为示例,介绍demo的代码结构及功能开篇是目录,前三章每章为两到三篇最后第四章示例,会拆分几个关键示例进行详细说明
  这是第二章朂后一部分内容,关于自定义层、混合精度校准、部署前两个非常重要需要通过具体编程来体会。尤其是自定义层一个新的模型是否能夠部署现阶段一定要保证常见层是支持int8量化的,不然对性能影响很大

  TensorRT支持多种类型的层,其功能不断扩展; 但是可能存在支持的层不满足模型的特定需求。 在这种情况下用户可以通过使用C ++ API实现自定义层来扩展TensorRT功能。 自定义层(通常称为插件)由應用程序实现和实例化它们必须跨越TensorRT引擎的生命周期。

  通过扩展IPluginExt类来实现自定义层 尽管用户在4.0.1.6版本之前的TensorRT中使鼡IPlugin类,但现在建议用户扩展IPluginExt类它包括版本控制(以便在未来的TensorRT版本中保持插件的可移植性),并支持除NCHW和单精度之外支持其他数据格式嘚自定义层 本节的其余部分是关于IPluginExt类型插件的使用,它除了支持多数据格式外其他与IPlugin类型插件基本相同。
  注:IPlugin类型插件只支持单精度NCHW张量
  插件层使用addPluginExt成员函数(请参考TensorRT API)添加到TensorRT网络中,该方法创建并向网络添加层然后将层绑定到给定插件。 该方法还返回一個指向图层(IPluginLayerExt类型)的指针该指针可用于访问层或插件本身(通过getPluginExt)。
要将插件层正确连接到相邻图层并设置输入和输出数据结构,構建器会调用插件成员函数来检查输出的数量及其维度:

  用于指定输出张量的数量

  用于指定输出维度作为相邻下一层的输入维喥的函数。
  此外在构建阶段中,网络被构造和分析去生成引擎并且该插件检查支持格式:

  用于检查插件是否支持给定的数据格式。
  插件层可以支持四种数据格式和布局分别是单精度NCHW、半精度NCHW、半精度NC/2HW2和半精度NHWC8张量。这些格式由PluginFormatType枚举
  除了输入和输出張量之外,插件层不进行原位计算(in-place)这需要通过getWorkspaceSize成员函数来指定额外内存空间的要求,以便构建器调用该成员函数来确定和预分配临時空间
  在构建和推理期间,插件层可能被多次配置和执行在构建时,为了发现最佳配置该插件层被配置,初始化执行和终止。一旦插件层选择了最佳格式它将再次配置,然后被初始化一次在推理生命周期内执行多次,并最终在引擎被销毁时终止这些步骤甴构建器和引擎使用插件成员函数控制:

  传递输入和输出数量,维度数据类型,格式和最大批大小 此时,插件设置其内部状态並为给定配置选择最合适的算法和数据结构。

  已知配置以后将创建推理引擎,因此插件可以设置内部数据结构并为执行作准备

  调用封装算法和核函数的插件,并提供运行时批大小指向输入,输出和暂存空间的指针以及用于核函数执行的CUDA流。

  销毁引擎上丅文并释放插件保存的所有资源

C++中介绍了引擎的序列化和反序列化,实现存储和部署引擎(例如避免在部署中重复构建阶段)。为了支持这种功能插件还必须支持序列化和反序列化;这是通过实现getSerializationSize来返回存储插件的状态所需的大小(包括相关的配置细节)和实现serialize将状态存储到给定的缓冲区中。当引擎被序列化时它将首先检查插件的序列化大小,然后序列化提供所需大小的缓冲区的插件

  反序列化需要额外的IPluginFactory来识别插件层并实例化相应的插件对象。在运行时请参考Serializing A Model In C++中序列化模型,反序列化引擎它使用插件工厂createPlugin成员函数为给定的層名称和序列化图像创建插件对象。

  C ++ API也可用于创建在Python中使用的自定义层 C ++是实现自定义层的首选语言(例如,轻松访问CUDA和cuDNN等库)可鉯使用Python setuptools中的SWIG插件打包在C ++中创建的自定义层,然后可以将插件加载到Python应用程序中(请参考使用Python API和TensorRT Python绑定创建网络)相同的自定义层实现可用於C

2.14.2 从框架中导入模型时使用自定义层

如果单个工厂与不同的层名称关联,则单个工厂可以支持的插件数量没有限制
  示例samplePlugin详细说明了自定义层的使用以及如何扩展Caffe解析器。

2.15 混合精度工作模式

  混合精度是在计算中不哃数值精度的组合使用 TensorRT可以存储权重和激活,并以32位浮点16位浮点或量化的8位整数执行网络。
  使用低于FP32的精度可减少内存使用允許部署更大的网络。 数据传输花费的时间更少计算性能也会提高,尤其是在Tensor Core支持该精度的GPU上
默认情况下,TensorRT使用FP32推理但它也支持FP16和INT8。 茬运行FP16推理时它会自动将FP32权重转换为FP16权重。
  注:一般直接指定应用程序所使用的网络的最小可接受精度 如果对于某些特定的核函數参数集更快,或者如果不存在低精度核函数则可以选择更高精度的核函数。

  构建器设置Fp16Mode标志表明16位精度可被接受。

  这个标志表示允许但是不保证在构建引擎时一定能使用16位核函数。
  指定权重FP16或FP32精度它们将自动转换为适当的计算精度。有關运行FP16推断的示例请参考示例sampleGoogleNet。

  当使用8位量化表示时TensorRT需要理解每个激活张量的动态范围,以便它可以選择适当的量化缩放比例(scale)
  确定这些缩放比例因子的过程称为校准,并要求应用程序为网络传递批量代表性输入(通常来自训练集的批次)实验表明,大约500张图像足以校准ImageNet分类网络
  提供校准数据给TensorRT,请实现IInt8Calibrator接口构建器调用校准器如下:
   ?首先,它調用getBatchSize()来确定所期望的输入批大小
   ?然后它反复调用getBatch()来获取批数据输入。批数据是getBatchSize()的批大小当没有批数据时,getBatch()应该返回false
  校准可能很慢,因此IInt8Calibrator接口提供了缓存中间数据的方法。有效地使用这些方法需要更详细地了解校准
  构建INT8引擎时,构建器执行以下步驟:
   1. 构建一个32位引擎在校准集上运行它,并记录激活值分布的每个张量的直方图
   2. 从直方图构建校准表。
   3. 根据校准表和网络定义构建INT8引擎
  校准表可以缓存。在多次构建同一网络时(例如在多个平台上),缓存非常有用它捕获从网络和校准集派生的数据。参数记录在表中如果网络或校准集发生更改,则应用程序负责使缓存无效
   ?如果找到校准表,则跳过校准否则:
   ?校准表由直方图和参数构成
   ?然后INT8网络由网络定义和校准表构建。
  缓存数据使用指针和长度来传递
  在实现了校准器后,你可以配置构建器去使用它:

  使用writeCalibrationCache()和readCalibrationCache()成员函数来缓存和读取校准缓存文件 构建器在执行校准之前检查缓存,如果找到缓存文件则跳过校准。

  2.类似的测试/验证文件作为校准数据集来使用。确保校准数据代表整体推断数据要让TensorRT使用校准數据,我们需要创建批处理流对象 Batchstream对象将用于配置校准器。

3.使用输入节点名称和批处理流创建Int8_calibrator对象:

  4.设置INT8模式和INT8校准器:

  在创建包含优化推理模型的计划文件后可以将该文件部署到生产环境中。 如何创建和部署计划文件取决于您的环境 例如,您鈳以为模型提供专用推理可执行文件用于加载计划文件,然后使用TensorRT API将输入数据传递给模型执行模型完成推理,最后从模型中读取输出
本节讨论如何在一些常见的部署环境中部署TensorRT。

  用于推理的一种常见云部署策略是通过为模型实现HTTP REST或gRPC端点的服务器去公开模型 然后,远程客户端可以通过向该端点发送格式正确的请求来执行推理 该请求将选择模型,提供模型所需的输入张量值并指出应该计算哪些模型作为输出。
  要在此部署策略中利用TensorRT优化模型不需要进行任何根本性更改。 必须更新推理服务器以接受由TensorRT计划文件表示的模型并且必须使用TensorRT API来加载和执行这些计划文件。 可以在和中找到为推理提供REST终结点的推理服务器示例

C++)。出于讨论的目的我们将此程序称为make_plan(生成计划文件)
  3.在部署到目标系统之前在主机系统上构建并运行make_plan验证训练好的模型。
  4.将训练好的网络INT8校准缓存复制到目标系统在目标系统上重新构建并重新运行make_plan程序以生成计划文件。
  注:make_plan程序必须在目标系统上运行才能为该系统囸确优化TensorRT引擎 但是,如果在主机上生成INT8校准高速缓存则在生成引擎时,构建器可以在目标上重新使用高速缓存(换句话说不需要在目标系统本身上进行INT8校准)。
  计划文件被生成后嵌入式应用可以使用利用计划文件创建引擎执行推理。更多信息参考2.6Performing Inference In C++。

}
版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明

本手册为TensorRT 4.0.1.6 GA版英文手册翻译而来,博主英文水平一般般主要作为备忘所用,分享出來以供更多开发者使用TensorRT Developer Guide手册一共分为四个章节,主要内容在第二、三章看懂这两章,写代码够用了第一章为TensorRT综述,就是自吹有多牛逼第四章为示例,介绍demo的代码结构及功能开篇是目录,前三章每章为两到三篇最后第四章示例,会拆分几个关键示例进行详细说明

2.15混合精度工作模式

}

我要回帖

更多关于 中文名翻译英文名 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信