创作

完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>

3天内不再提示

TensorRT的C++接口解析

星星科技指导员 来源:NVIDIA 作者:Ken He 2022-05-13 15:41 次阅读

本章说明 C++++ API 的基本用法,假设您从 ONNX 模型开始。sampleOnnxMNIST更详细地说明了这个用例。

C++ API 可以通过头文件NvInfer.h访问,并且位于nvinfer1命名空间中。例如,一个简单的应用程序可能以:

#include “NvInfer.h”

using namespace nvinfer1;

TensorRT C++ API 中的接口类以前缀I开头,例如ILoggerIBuilder等。

CUDA 上下文会在 TensorRT 第一次调用 CUDA 时自动创建,如果在该点之前不存在。通常最好在第一次调用 TensoRT 之前自己创建和配置 CUDA 上下文。 为了说明对象的生命周期,本章中的代码不使用智能指针;但是,建议将它们与 TensorRT 接口一起使用。

3.1. The Build Phase

要创建构建器,首先需要实例化ILogger接口。此示例捕获所有警告消息,但忽略信息性消息:

class Logger : public ILogger           
{
    void log(Severity severity, const char* msg) noexcept override
    {
        // suppress info-level messages
        if (severity <= Severity::kWARNING)
            std::cout << msg << std::endl;
    }
} logger;

然后,您可以创建构建器的实例:

IBuilder* builder = createInferBuilder(logger);

3.1.1. Creating a Network Definition

创建构建器后,优化模型的第一步是创建网络定义:

uint32_t flag = 1U <
    (NetworkDefinitionCreationFlag::kEXPLICIT_BATCH); 

INetworkDefinition* network = builder->createNetworkV2(flag);

为了使用 ONNX 解析器导入模型,需要kEXPLICIT_BATCH标志。有关详细信息,请参阅显式与隐式批处理部分。

3.1.2. Importing a Model using the ONNX Parser

现在,需要从 ONNX 表示中填充网络定义。 ONNX 解析器 API 位于文件NvOnnxParser.h中,解析器位于nvonnxparserC++ 命名空间中。

#include “NvOnnxParser.h”

using namespace nvonnxparser;

您可以创建一个 ONNX 解析器来填充网络,如下所示:

IParser*  parser = createParser(*network, logger);

然后,读取模型文件并处理任何错误。

parser->parseFromFile(modelFile, 
    static_cast(ILogger::Severity::kWARNING));
for (int32_t i = 0; i < parser.getNbErrors(); ++i)
{
std::cout << parser->getError(i)->desc() << std::endl;
}

TensorRT 网络定义的一个重要方面是它包含指向模型权重的指针,这些指针由构建器复制到优化的引擎中。由于网络是通过解析器创建的,解析器拥有权重占用的内存,因此在构建器运行之前不应删除解析器对象。

3.1.3. Building an Engine

下一步是创建一个构建配置,指定 TensorRT 应该如何优化模型。

IBuilderConfig* config = builder->createBuilderConfig();

这个接口有很多属性,你可以设置这些属性来控制 TensorRT 如何优化网络。一个重要的属性是最大工作空间大小。层实现通常需要一个临时工作空间,并且此参数限制了网络中任何层可以使用的最大大小。如果提供的工作空间不足,TensorRT 可能无法找到层的实现。默认情况下,工作区设置为给定设备的总全局内存大小;必要时限制它,例如,在单个设备上构建多个引擎时。

config->setMemoryPoolLimit(MemoryPoolType::kWORKSPACE, 1U << 20);

一旦指定了配置,就可以构建引擎。

IHostMemory*  serializedModel = builder->buildSerializedNetwork(*network, *config);

由于序列化引擎包含权重的必要拷贝,因此不再需要解析器、网络定义、构建器配置和构建器,可以安全地删除:

delete parser;
delete network;
delete config;
delete builder;

然后可以将引擎保存到磁盘,并且可以删除它被序列化到的缓冲区。

delete serializedModel

注意:序列化引擎不能跨平台或 TensorRT 版本移植。引擎特定于它们构建的确切 GPU 模型(除了平台和 TensorRT 版本)。

3.2. Deserializing a Plan

假设您之前已经序列化了一个优化模型并希望执行推理,您将需要创建一个运行时接口的实例。与构建器一样,运行时需要一个记录器实例:

IRuntime* runtime = createInferRuntime(logger);

假设您已将模型从缓冲区中读取,然后可以对其进行反序列化以获得引擎:

ICudaEngine* engine = 
  runtime->deserializeCudaEngine(modelData, modelSize);

3.3. Performing Inference

引擎拥有优化的模型,但要执行推理,我们需要管理中间激活的额外状态。这是通过ExecutionContext接口完成的:

IExecutionContext *context = engine->createExecutionContext();

一个引擎可以有多个执行上下文,允许一组权重用于多个重叠的推理任务。 (当前的一个例外是使用动态形状时,每个优化配置文件只能有一个执行上下文。)

要执行推理,您必须为输入和输出传递 TensorRT 缓冲区,TensorRT 要求您在指针数组中指定。您可以使用为输入和输出张量提供的名称查询引擎,以在数组中找到正确的位置:

int32_t inputIndex = engine->getBindingIndex(INPUT_NAME);
int32_t outputIndex = engine->getBindingIndex(OUTPUT_NAME);

使用这些索引,设置一个缓冲区数组,指向 GPU 上的输入和输出缓冲区:

void* buffers[2];
buffers[inputIndex] = inputBuffer;
buffers[outputIndex] = outputBuffer;

然后,您可以调用 TensorRT 的 enqueue 方法以使用CUDA 流异步启动推理:

context->enqueueV2(buffers, stream, nullptr);

通常在内核之前和之后将cudaMemcpyAsync()排入队列以从 GPU 中移动数据(如果数据尚不存在)。enqueueV2()的最后一个参数是一个可选的 CUDA 事件,当输入缓冲区被消耗时发出信号,并且可以安全地重用它们的内存。

要确定内核(可能还有memcpy())何时完成,请使用标准 CUDA 同步机制,例如事件或等待流。

关于作者

Ken He 是 NVIDIA 企业级开发者社区经理 & 高级讲师,拥有多年的 GPU 和人工智能开发经验。自 2017 年加入 NVIDIA 开发者社区以来,完成过上百场培训,帮助上万个开发者了解人工智能和 GPU 编程开发。在计算机视觉,高性能计算领域完成过多个独立项目。并且,在机器人和无人机领域,有过丰富的研发经验。对于图像识别,目标的检测与跟踪完成过多种解决方案。曾经参与 GPU 版气象模式GRAPES,是其主要研发者。

审核编辑:郭婷

  • 机器人
    +关注

    关注

    196

    文章

    21396

    浏览量

    187215
  • NVIDIA
    +关注

    关注

    14

    文章

    2569

    浏览量

    94754
  • gpu
    gpu
    +关注

    关注

    27

    文章

    2741

    浏览量

    114629
收藏 人收藏

    评论

    相关推荐

    管道诊断师-HHL23S管道检测机器人

    对于一个城市来说,一到遇到倾盆大雨,最希望什么能够给力,当然是平时勤勤恳恳的地下管道可以在这个时候畅....
    的头像 hhwlcctv 发表于 06-27 17:34 211次 阅读

    机器人开发丨三明治夹子机器人系统开发(逻辑部署)

    区块的一些基本概念,大家可以了解一下。因为是纯理论的东西,所以内容有点枯燥。 区块/ Block 区....
    的头像 開发Whi366 发表于 06-27 16:04 34次 阅读

    浅谈人工智能机器人领域的趋势分析

    在新旧需求拉动下,我国工业机器人产量放量增长。MIR数据显示,今年一季度国内工业机器人出货量为6.6....
    发表于 06-27 15:52 100次 阅读

    首届NVIDIA DPU中国黑客松圆满收官

    2022 年 4 月 17 日,首届 NVIDIA DPU 中国黑客松圆满收官。本次比赛有 4 只队....
    的头像 NVIDIA英伟达企业解决方案 发表于 06-27 14:44 45次 阅读

    NVIDIA T4 GPU和TensorRT提高微信搜索速度

    腾讯公司深耕模型量化开发,且长期与 NVIDIA 团队合作,成功将深度学习模型精度从 FP32 压缩....
    的头像 NVIDIA英伟达企业解决方案 发表于 06-27 14:34 45次 阅读

    NVIDIA RTX A6000和 NVIDIA Omniverse助力天问一号“发射”

    为纪念天问一号火星探测器成功着陆火星一周年,国家航天局和中央广播电视总台(China Media G....
    的头像 NVIDIA英伟达企业解决方案 发表于 06-27 14:30 80次 阅读

    NVIDIA Jetson赋能智骋致想智惠农业平台

    NVIDIA Jetson 赋能智骋致想智惠农业平台,助力 AI 在农业领域的不断发展。
    的头像 NVIDIA英伟达企业解决方案 发表于 06-27 14:27 53次 阅读

    NVIDIA与合作伙伴利于AI技术推动气候灾害管理

    联合国的一个项目使用 NVIDIA 技术和面向全球数据科学家的免费深度学习培训中心课程推动气候灾害管....
    的头像 NVIDIA英伟达企业解决方案 发表于 06-27 14:23 172次 阅读

    NVIDIA EGX 平台能改进洪水预测GPU 加速模型

    为了推动改善气候行动,创造健康的全球环境,NVIDIA 正与联合国卫星中心(UNOSAT)合作,发挥....
    的头像 科技绿洲 发表于 06-27 14:21 160次 阅读

    双臂人形机器人即将问世,未来智能机器人时代可期

    特斯拉CEO埃隆·马斯克6月3日表示将于9月30日特斯拉AI日公布人形机器人Optimus,最早将于....
    的头像 大象机器人科技 发表于 06-27 13:04 33次 阅读
    双臂人形机器人即将问世,未来智能机器人时代可期

    立得空间空地协同遥感观测获21年度“湖北省技术发明奖一等奖”

    湖北省科学技术奖在大会上揭晓。湖北省科学技术奖由湖北省人民政府组织,为深入实施创新驱动战略,建设创新....
    的头像 科技绿洲 发表于 06-27 11:02 402次 阅读

    骁龙X65调制解调器为玩家带来高速、低时延的网络连接

    游戏对局中,场上形势瞬息万变,某个关键瞬间往往能影响到比赛的走向。下面为大家盘点一下游戏中那些让人心....
    的头像 科技绿洲 发表于 06-27 10:28 127次 阅读

    吉咖智能机器人有限公司总部开业仪式在苏州举行

    吉咖智能机器人有限公司总部开业仪式在苏州举行   6月23日,由吉利汽车集团和亿咖通科技联合创立的吉....
    发表于 06-27 10:14 286次 阅读
    吉咖智能机器人有限公司总部开业仪式在苏州举行

    GPUImageFiltersCamera模仿Filckr照相功能

    ./oschina_soft/GPUImageFiltersCamera.zip
    发表于 06-27 09:22 6次 阅读
    GPUImageFiltersCamera模仿Filckr照相功能

    管道无线潜望镜在自来水管中的应用

    为对管网建设,管理和养护工作提供更加安全、科学有效的依据,确保排水管网运营维护工作具备科学的决策,提....
    发表于 06-24 17:05 9次 阅读

    工业运营商需要5G URLLC以及他们如何实现

    5G 网络最大的架构差异是核心网络从集中位置移动到边缘的分布式点。网络功能虚拟化 (NFV) 和软件....
    发表于 06-24 16:43 209次 阅读
    工业运营商需要5G URLLC以及他们如何实现

    节卡机器人亮相东南亚机加工展会,全球化布局多点开花

    6月22-25日,METALTECH AUTOMEX(马来西亚吉隆坡国际机床、金属加工设备与自动化科....
    的头像 话说科技 发表于 06-24 16:41 358次 阅读
    节卡机器人亮相东南亚机加工展会,全球化布局多点开花

    IEEE标准推进工业4.0的五种方式

      毫无疑问,TSN 标准是承诺工业 4.0 及其将改变的许多应用的关键基础构件——引领下一代技术彻....
    的头像 星星科技指导员 发表于 06-24 16:00 376次 阅读

    Realsense+大象机器人手眼标定方案详解

    踩坑 手眼标定的算法网上是比较多的,但是很多都不好用。github上高赞的easy_handeye,....
    的头像 大象机器人科技 发表于 06-24 15:49 3945次 阅读
    Realsense+大象机器人手眼标定方案详解

    NVIDIA Riva 2.0的功能亮点有哪些

    NVIDIA Riva 可提供经过全面优化的流程,用于部署实时 AI 语音应用(例如转录和虚拟助理)....
    的头像 NVIDIA英伟达企业解决方案 发表于 06-24 15:33 132次 阅读

    艺术家使用NVIDIA Omniverse创造出照明效果逼真的3D模型

    创意人员使用 Autodesk、Adobe Substance 3D 应用和 NVIDIA Omni....
    的头像 NVIDIA英伟达企业解决方案 发表于 06-24 15:27 82次 阅读

    使用AI技术推动精准医疗的发展

    来自英国的 NVIDIA 初创加速计划成员 PrecisionLife 使用 AI 主导的数据分析确....
    的头像 NVIDIA英伟达 发表于 06-24 15:21 606次 阅读

    NLP的工作原理是什么 有哪些用例

    自然语言处理是一项利用计算机和软件获取人类语言(书面或口语)含义的技术。
    的头像 NVIDIA英伟达 发表于 06-24 15:19 84次 阅读

    NVIDIA DOCA数据处理器软件正式开放

    NVIDIA 联合发起 Linux 基金会项目,致力于实现数据中心创新的大众化;进一步向软件提供商、....
    的头像 NVIDIA英伟达 发表于 06-24 15:00 105次 阅读

    普渡科技机器人助力建设智慧餐厅

    说起周麻婆,很多人的脑海中便会立即涌现出麻婆豆腐、麻婆泡菜鱼、麻婆香水鱼、榕城荔枝肉、麻婆脆皮鸭等一....
    的头像 普渡科技 发表于 06-24 14:35 338次 阅读

    管道检测机器人施工流程和注意事项的介绍

    使用管道检测机器人的操作人员有义务确保安全,不进行危险性的操作。维护和安装人员必须非常熟悉 各自的工....
    发表于 06-24 11:23 7次 阅读

    CCTV管道机器人让管道检测工作变的得心应手

    如今,人工智能已逐步替代了人工。为我们带来了便捷,对于世界来说,人工智能即将带来新一轮的产业变革,管....
    的头像 hhwlcctv 发表于 06-24 11:21 47次 阅读

    Apple Watch进军运动市场的新挑战 英国打造VR儿童医院

    简讯:根据IFR数据统计,全球工业机器人销售额已持续两年维持在150亿美元以下,与之形成鲜明对比的是....
    的头像 大联大 发表于 06-24 10:57 221次 阅读

    NVIDIA DRIVE助力小马智行控制器大规模量产

    6 月 22 日,领先自动驾驶企业小马智行宣布正式对客户交付基于 NVIDIA DRIVE Hype....
    的头像 科技绿洲 发表于 06-24 10:50 1147次 阅读

    NVIDIA DOCA库API已向开发者公开提供

    本周,NVIDIA 成为 Linux 基金会开放可编程基础设施(OPI – Open Program....
    的头像 科技绿洲 发表于 06-24 10:38 260次 阅读

    普渡机器人联合周麻婆共同打造智慧餐厅

    01周麻婆的“小食代” 秉持着让顾客“在家吃顿舒心饭”的初衷,于2012年在福州创立的“周麻婆”品牌....
    的头像 话说科技 发表于 06-23 20:13 67次 阅读
    普渡机器人联合周麻婆共同打造智慧餐厅

    龙芯中科LoongBlock青少年编程平台助力“双减”工作落实落地

    近日,江苏省青少年科技中心公布第一批科教资源“双进”助推“双减”开展课后服务单位名单,龙芯中科成功入....
    的头像 科技绿洲 发表于 06-23 17:42 379次 阅读

    自动焊接机器人为各行业注入了新鲜血液

    自动焊接机器人凭借着焊接效率高、产出成本低、焊接质量好、生产周期短等优势逐渐代替了传统焊接,这也为各....
    发表于 06-23 17:20 11次 阅读

    NVIDIA RTX GPU产品能够支持4K大屏渲染和扩展内容渲染

    此前,七维科技帮助河南广播电视台完成了演播室改造项目,打造了 XR 沉浸式 4K 超高清演播室。这一....
    的头像 科技绿洲 发表于 06-23 15:11 272次 阅读

    NVIDIA正在建造一台AI超级计算机来驱动地球的数字孪生

    元宇宙是互联网向 3D 网络进化过程中的下一个重要阶段,将为娱乐、汽车、制造业、机器人等各个行业带来....
    的头像 科技绿洲 发表于 06-23 15:06 235次 阅读

    NVIDIA 3D MoMa技术可为虚拟爵士乐队调校乐器

    爵士乐的精髓在于即兴演奏, NVIDIA 正在通过 AI 研究向这一流派致敬。也许有一天,图形创作者....
    的头像 科技绿洲 发表于 06-23 14:53 196次 阅读

    NVIDIA RTX A6000助力实现高效渲染输出高质量画面

    电视演播室作为电视节目制作的重要场所,承担了除外拍节目外的大部分节目录制和制作任务,随着设备技术突飞....
    的头像 NVIDIA英伟达企业解决方案 发表于 06-23 12:06 182次 阅读

    NVIDIA在自动驾驶领域取得的新突破

    此前,NVIDIA 中国区软件解决方案总监卓睿代表 NVIDIA 参加了视频采访,针对 NVIDIA....
    的头像 NVIDIA英伟达企业解决方案 发表于 06-23 12:03 575次 阅读

    七腾科技发布七腾机器人原创IP形象全球征集活动

    6月23日,石化巡检头部企业重庆七腾科技有限公司发布七腾机器人原创IP形象全球征集活动,面向全球对石....
    的头像 焦点讯 发表于 06-23 11:31 106次 阅读
    七腾科技发布七腾机器人原创IP形象全球征集活动

    NVIDIA如何以最好的方式来构建元宇宙

    元宇宙是互联网向 3D 网络进化过程中的下一个重要阶段,将为娱乐、汽车、制造业、机器人等各个行业带来....
    的头像 NVIDIA英伟达企业解决方案 发表于 06-23 11:13 176次 阅读

    NVIDIA 3D MoMa:基于2D图像创建3D物体

    可逆渲染流程 NVIDIA 3D MoMa 将于本周在新奥尔良举行的计算机视觉和模式识别会议 CVP....
    的头像 NVIDIA英伟达企业解决方案 发表于 06-23 11:00 184次 阅读

    海涵物联HHL-QW1无线潜望镜迎来了全面升级

    好消息,海涵物联HHL-QW1无线潜望镜,迎来了华丽的升级,新品HHL-QW1无线潜望镜适用于100....
    发表于 06-23 10:13 14次 阅读

    管道检测机器人保障城市地下管网畅通无阻

    6月20日,武汉海涵立科技有限公司测试车间,工作人员正在对HHL-23SCCTV检测机器人进行出厂的....
    发表于 06-23 10:11 13次 阅读

    香橙派RK3399开发板OrangePi4 LTS在linux上的GPU测试说明

    1、Linux4.4 和 Linux5.10 Debian 系统 GPU 的测试说明 注意,Linux4.4 Debian10 和 Linux5.10 Debian11 系统使用的...
    发表于 06-22 20:17 421次 阅读
    香橙派RK3399开发板OrangePi4 LTS在linux上的GPU测试说明

    线跟随机器人如何导航?

    描述 线路跟随器PCB 线路跟随器阵列是一个长板,由八个红外传感器组成,这些传感器已配置为读取为数字位!我们设计了线跟...
    发表于 06-22 09:11 86次 阅读

    基于Arduino设计的手势控制机器人

    描述 如何在家制作 DIY Arduino 手势控制机器人 接收器(坦克)所需的零件: 1) 机器人坦克底盘 2) Arduino Nano V...
    发表于 06-20 09:21 151次 阅读

    每周精选 | 履带四足复合机器人开源分享,OpenHarmony开源开发者成长计划

    大家好,电子发烧友精选一周社区好帖推送给大家,同时欢迎大家留言推荐更多好帖子,一旦入选将获得电子发烧友月度vip奖励! 1、...
    发表于 06-10 10:49 10969次 阅读

    机器人工业应用等步进电机驱动MS4989参数与应用

    描述MS4989 是一款双极微步进电机驱动芯片,内置有4bit DAC,可以实现全步进,1/2,1/16,1/64,4 种步进模式;芯片具有最大...
    发表于 05-24 21:12 6765次 阅读

    移动复合机器人科教平台

    发表于 05-18 08:59 7144次 阅读

    【小凌派RK2206开发板试用体验】小凌派手势应用之原力控制星球大战BB-8机器人

    在上一篇文章中,我分享了  ,这次再给大家分享一个更有趣的智能手势应用----小凌派RK2206开发板赋予你原力,隔空控...
    发表于 05-11 12:52 9101次 阅读
    【小凌派RK2206开发板试用体验】小凌派手势应用之原力控制星球大战BB-8机器人

    想设计一个能运动的机器人运动模块买什么器件?

    想设计一个能运动的机器人运动模块买什么器件?...
    发表于 05-10 19:04 2893次 阅读

    请问在RK3399pro中间计算时能否调用GPU的一些现成数据库或函数来计算

    我在用RK3399pro的NPU做深度学习计算,使用了两个rknn模型进行推理,但是在这两个rknn模型之间需要进行一些中间计算(从第一...
    发表于 05-09 15:26 3558次 阅读

    tf代码为什么在rk3399上训练比没有gpu的电脑慢很多

    把tf代码从电脑上放到rk3399上运行训练,比电脑慢的很多很多,板子不是带有npu吗?是不是代码需要改动什么啊? ...
    发表于 04-22 16:23 8554次 阅读