96SEO 2026-02-19 09:36 0
C重要提示覆盖检查索引小于pos的连接的格式/类型但绝不能检查索引大于pos的连接的格式/类型。

该示例使用case
Description注意基于IPluginV2的插件在引擎级别共享而不是在执行上下文级别共享因此这些可能被多个线程同时使用的插件需要以线程安全的方式管理它们的资源。
创建ExecutionContext时会克隆基于IPluginV2Ext和派生接口的插件因此这不是必需的。
9.4.3.
Description注意传递给createPlugin函数的数据应该由调用者分配并在程序被销毁时最终由调用者释放。
createPlugin函数返回的插件对象的所有权被传递给调用者并且也必须被销毁。
9.5.
支持多种类型的层其功能不断扩展但是在某些情况下支持的层不能满足模型的特定需求。
mode?IPluginV2Ext5.1LimitedNoImplicit
onlyIPluginV2IOExt6.0.1GeneralNoImplicit
onlyIPluginV2DynamicExt6.0.1GeneralYesExplicit
。
不是直接注册插件而是为插件注册一个工厂类的实例派生自PluginCreator
)。
插件创建者类还提供有关插件的其他信息它的名称、版本和插件字段参数。
您必须从插件的基类之一派生插件类。
在支持具有不同类型/格式的输入/输出或具有动态形状的网络方面它们具有不同的表达能力。
下表总结了基类按从最不具表现力到最具表现力的顺序排列。
库包含可以加载到您的应用程序中的插件。
有关开源插件的列表请参阅GitHubTensorRT
插件必须加载libnvinfer_plugin.so库并且必须通过在应用程序代码中调用initLibNvInferPlugins来注册所有插件。
如果您有自己的插件库则可以包含一个类似的入口点以便在唯一命名空间下的注册表中注册所有插件。
这确保了在构建期间跨不同插件库的插件名称没有冲突。
有关这些插件的更多信息请参阅NvInferPlugin.h文件以供参考。
调用IPluginCreator::createPlugin()返回IPluginV2类型的插件对象。
您可以使用addPluginV2()将插件添加到
getPluginRegistry()-getPluginCreator(pluginName,
creator-createPlugin(layerName,
pluginData必须在传递给createPlugin之前在堆上分配PluginField条目。
前面描述的
方法在堆上创建一个新的插件对象并返回一个指向它的指针。
如前所示确保销毁
IPluginV2类型插件的插件类型、插件版本和命名空间如果存在
从插件注册表中查找插件创建者并调用IPluginCreator::deserializePlugin()
引擎通过调用IPluginV2::destroy()方法在内部销毁。
IPluginV2类型插件的插件类型、插件版本和命名空间如果存在,
从插件注册表中查找插件创建者并调用IPluginCreator::deserializePlugin()
引擎通过调用IPluginV2::destroy()方法在内部销毁。
要支持动态形状您的插件必须从IPluginV2DynamicExt派生。
第二个输出是两个输入的串联沿着第一个维度所有类型/格式必须相同并且是线性格式
getOutputDimensions的覆盖根据输入维度返回输出维度的符号表达式。
您可以使用传递给getOutputDimensions的IExprBuilder从输入的表达式构建表达式。
在示例中不必为案例
BarPlugin::getOutputDimensions(int
exprBuilder.operation(DimensionOperation::kSUM,
}supportsFormatCombination的覆盖必须指示是否允许格式组合。
接口将输入/输出统一索引为“connections”从第一个输入的
开始然后依次为其余输入然后为输出编号。
在示例中输入是connections
使用supportsFormatCombination来询问给定的格式/类型组合是否适用于连接给定的格式/类型用于索引较少的连接。
因此覆盖可以假设较少索引的连接已经过审查并专注于与索引pos的连接。
BarPlugin::supportsFormatCombination(int
}这里的局部变量in和out允许通过输入或输出编号而不是连接编号检查inOut
重要提示覆盖检查索引小于pos的连接的格式/类型但绝不能检查索引大于pos的连接的格式/类型。
该示例使用case
使用configurePlugin在运行时设置插件。
这个插件不需要configurePlugin来做任何事情所以它是一个空操作
BarPlugin::configurePlugin(const
}如果插件需要知道它可能遇到的最小或最大尺寸它可以检查字段DynamicPluginTensorDesc::min或DynamicPluginTensorDesc::max的任何输入或输出。
格式和构建时维度信息可以在DynamicPluginTensorDesc::desc中找到。
任何运行时维度都显示为
最后重写BarPlugin::enqueue必须完成这项工作。
由于形状是动态的因此
supportsFormatCombination的覆盖必须指示允许哪个
PoolPlugin::supportsFormatCombination(int
TensorFormat::kLINEAR;condition
张量尺度。
校准无法确定插件内部张量的动态范围。
对量化数据进行操作的插件必须为内部张量计算自己的动态范围。
调用configurePlugin方法通过PluginTensorDesc将信息传递给插件这些信息存储为成员变量序列化和反序列化。
PoolPlugin::configurePlugin(const
mInputDims.d[0];mPoolingParams.mH
mInputDims.d[1];mPoolingParams.mW
mInputDims.d[2];mPoolingParams.mP
mOutputDims.d[1];mPoolingParams.mQ
比例可以从PluginTensorDesc::scale获得。
最后重写UffPoolPluginV2::enqueue必须完成这项工作。
它包括一组核心算法可在运行时通过使用实际批量大小、输入、输出、cuDNN
{...CHECK(cudnnPoolingForward(mCudnn,
有一个名为add_plugin_v2的函数可让您将插件节点添加到网络。
以下示例说明了这一点。
它创建了一个简单的TensorRT网络并通过查找TensorRT插件注册表来添加一个
trt.Logger()trt.init_libnvinfer_plugins(TRT_LOGGER,
trt.get_plugin_registry().plugin_creator_listdef
get_trt_plugin(plugin_name):plugin
trt.PluginFieldType.FLOAT32)field_collection
trt.PluginFieldCollection([lrelu_slope_field])plugin
plugin_creator.create_plugin(nameplugin_name,
field_collectionfield_collection)return
builder.create_builder_config()config.max_workspace_size
network.add_input(nameinput_layer,
network.add_plugin_v2(inputs[input_layer],
pluginget_trt_plugin(LReLU_TRT))lrelu.get_output(0).name
outputsnetwork.mark_output(lrelu.get_output(0))9.3.
解析器会自动尝试将无法识别的节点作为插件导入。
如果在插件注册表中找到与节点具有相同op_type的插件则解析器将节点的属性作为插件字段参数转发给插件创建者以创建插件。
默认情况下解析器使用“1”作为插件版本
节点中设置plugin_version或plugin_namespace字符串属性来覆盖此行为。
之前对其进行修改。
例如用插件节点替换一组操作。
为此您可以使用ONNX
添加自定义层中描述的插件基类之一派生类。
此外新插件还应调用REGISTER_TENSORRT_PLUGIN(...)宏以将插件注册到
插件注册表或创建等效于initLibNvInferPlugins()的init函数。
6.0.x。
但是新插件应针对IPluginV2DynamicExt或IPluginV2IOExt接口而旧插件应重构以使用这些接口。
0;迁移到IPluginV2DynamicExt或IPluginV2IOExt的指南
getOutputDimensions实现给定输入的输出张量维度的表达式。
supportsFormatCombination检查插件是否支持指定输入/输出的格式和数据类型。
configurePlugin模仿IPluginV2Ext中等效的configurePlugin的行为但接受张量描述符。
getWorkspaceSize和enqueue模仿IPluginV2Ext中等效
以下部分介绍IPluginV2类的功能。
要将插件层连接到相邻层并设置输入和输出数据结构构建器通过调用以下插件方法检查输出的数量及其维度。
用于获取给定索引处输出的数据类型。
返回的数据类型必须具有插件支持的格式。
除了输入和输出张量之外不计算所有数据并且需要内存空间的插件可以使用getWorkspaceSize方法指定额外的内存需求该方法由构建器调用以确定和预分配暂存空间。
在构建和推理期间可能会多次配置和执行插件层。
在构建时为了发现最佳配置层被配置、初始化、执行和终止。
为插件选择最佳格式后再次配置插件然后在推理应用程序的生命周期内初始化一次并执行多次最后在引擎销毁时终止。
这些步骤由构建器和引擎使用以下插件方法控制
传达输入和输出的数量、所有输入和输出的维度和数据类型、所有输入和输出的广播信息、选择的插件格式和最大批量大小。
此时插件设置其内部状态并为给定配置选择最合适的算法和数据结构。
此时配置是已知的并且正在创建推理引擎因此插件可以设置其内部数据结构并准备执行。
封装插件的实际算法和内核调用并提供运行时批处理大小、指向输入、输出和暂存空间的指针以及用于内核执行的CUDA流。
每次创建包含此插件层的新构建器、网络或引擎时都会调用它。
它必须返回一个带有正确参数的新插件对象。
用于销毁插件对象和/或每次创建新插件对象时分配的其他内存。
每当构建器或网络或引擎被破坏时都会调用它。
set/getPluginNamespace(设置/获取插件命名空间)
该方法用于设置该插件对象所属的库命名空间默认可以是“”。
来自同一个插件库的所有插件对象都应该具有相同的命名空间。
IPluginV2Ext支持可以处理广播输入和输出的插件。
此功能需要实现以下方法
对每个输入调用此方法其张量在批次中进行语义广播。
如果canBroadcastInputAcrossBatch返回true
不会复制输入张量。
插件应该在批处理中共享一个副本。
如果它返回false
这由构建器在initialize()之前调用。
它为层提供了基于
PluginTensorDesc和最大批量大小进行算法选择的机会。
注意基于IPluginV2的插件在引擎级别共享而不是在执行上下文级别共享因此这些可能被多个线程同时使用的插件需要以线程安全的方式管理它们的资源。
创建ExecutionContext时会克隆基于IPluginV2Ext和派生接口的插件因此这不是必需的。
IPluginCreator类中的以下方法用于从插件注册表中查找和创建适当的插件
要成功创建插件需要了解插件的所有字段参数。
此方法返回PluginFieldCollection结构其中填充了PluginField条目以反映字段名称和PluginFieldType
此方法用于使用PluginFieldCollection参数创建插件。
应填充PluginField条目的数据字段以指向每个插件字段条目的实际数据。
注意传递给createPlugin函数的数据应该由调用者分配并在程序被销毁时最终由调用者释放。
createPlugin函数返回的插件对象的所有权被传递给调用者并且也必须被销毁。
引擎根据插件名称和版本在内部调用。
它应该返回要用于推理的插件对象。
在该函数中创建的插件对象在引擎被销毁时被
必须释放插件中分配的内存以确保没有内存泄漏。
如果在initialize()函数中获取资源则需要在terminate()函数中释放它们。
应该释放所有其他内存分配最好在插件类析构函数中或在destroy()方法中。
使用
添加自定义层详细概述了这一点并提供了一些使用插件时的最佳实践说明。
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback