tensorrt基本接口

Tensorr顶级接口,builder和runtime,使用必须提供logger

Builder,构建器,负责优化模型并生成Engine。

NetworkDefinition接口,用于定义网络,转换模型,转换模型的方法:
1、通过onnx格式模型,使用Tensorrt的ONNX解析器定义网络。
2、使用TensorRT的Layer和Tensor接口自定义网络。

BuilderConfig接口,用于指定TensorRT如何优化模型,可以配置模型的精度,控制内存和运行时执行速度,以及限制对CUDA内核的选择。

层融合权重怎么分配?

Runtime,运行时的接口,反序列化模型文件,创建执行上下文,进行推理。

Engine接口,优化的模型。
ExecutionContext接口,用于调用推理的主要接口,推理时,必须在适当的位置设置输入和输出缓冲区。
cudaStreamSynchronize,用于在CPU和GPU之间进行控制输出。
Plugin接口,用于自定义插件。

1、构建阶段
(1)创建构建器,IBuilder builder = createInferBuilder(logger);
(2)构建网络,INetworkDefinition network = builder->createNetworkv2(flag);
(3)ONNX解析器,IParser
paerser = createParser(network,logger);
(4)构建配置,
IBuilderConfig
config = builder->createBuilderConfig(); //指定如何优化模型
config->setMemoryPoolLimit(MemoryPoolType::kWORKSPACE,1U<<20);//设置设备全局内存大小1MB
IHostMemory
serializedModel = builder->builderSerializedNetwork(*network,*config);//指定配置构建网络
(5)删除解析器、网络定义、构建器配置、构建器。
delete parser;
delete network;
delete config;
delete builder
delete serializedModel;

2、运行阶段
(1)执行推理,IRuntime runtime = createInferRuntime(logger);
(2)反序列化读取模型,ICudaEngine
engine = runtime->deserializeCudaEngine(modelData,modelSize);
(3)执行推理,IExecutionContext *context = engine->createExecutionContext();
(4)设置用于输入和输出的TensorRT缓冲区,
int32_t inputIndex = engine->getBindingIndex(INPUT_NAME);
int32_t outputIndex = engine->getBindingIndex(OUTPUT_NAME);
void *buffers[2];
buffers[inputIndex] = inputBuffer;
buffers[outputIndex] = outputBuffer;
(5)异步启动推理,context->enqueueV2(buffers,stream,nullptr);

TensorRT对象不是线程安全的
预期的运行时并发模型是不同的线程将在不同的执行上下文操作,在不同线程中同时使用上下文会导致未定义的行为。
以下操作是线程安全的
(1)运行时或引擎模型上的非修改操作。
(2)从TensorRT运行时反序列化引擎。
(3)从引擎创建执行上下文。
(4)注册和注销插件。
在不同的线程中使用多个构建器没有线程安全问题,构建器使用时许来确定所提供参数的最快内核,并且使用具有相同GPU的多个构建器将扰乱时序和TensorRT构建最佳引擎的能力,使用多线程在不同的GPU构建不存在这也的问题。

在同一个线程中是如何做到的?

TensorRT序列化的模型仅能用于相同的操作系统、CPU架构、GPU模型和TensorRT版本一致时才能一起使用,TensorRT检查模型的以下属性,如果环境不一致,将无法反序列化。
(1)TensorRT的主要、次要、补丁版本号和构建版本
(2)计算能力主要版本号和次要版本号。
TensorRT还检查以下属性,若不匹配则会警告。
(1)全局内存总线带宽。
(2)二级缓存大小。
(3)每个块和多个处理器的最大内存、
(4)纹理对齐要求。
(5)多处理器数量。
(6)GPU设备是集成还是独立的。

TensorRT的batch
tensorrt支持两种网络的模式,显示批处理和隐式批处理。NCHW

Tensorrt的dynamic shape
输入shape在构建时式已知的,在运行时是张量的值

Tensorr的自定义插件
TensorRT 有一个 Plugin 接口,允许应用程序提供 TensorRT 本身不支持的操作的实现。在转换网络
时,ONNX 解析器可以找到使用 TensorRT 的 PluginRegistry 创建和注册的插件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值