tensorRT部署之 代码实现 onnx转engine/trt模型

2023-11-20

tensorRT部署之 代码实现 onnx转engine/trt模型

  • 前提已经装好显卡驱动、cuda、cudnn、以及tensorRT
  • 下面将给出Python、C++两种转换方式

1. C++实现

  • 项目属性配置好CUDA、tensoeRT库
  • 通常在实际应用中会直接读取onnx模型进行判断,如果对应路径已经存在engine模型,将直接通过tensorrt读入engine,如果没有,则对onnx进行编译生成engine模型后在进行读入
  • TensorRT在线加载模型,并序列化保存支持动态batch的引擎,实现源码可参考 TextandCode
  • 一篇超级详细的onnx基础教程(非常好):TextandCode
  • 代码实现:
#include <iostream>
#include <fstream>
#include "NvInfer.h"
#include "NvOnnxParser.h"
 
// 实例化记录器界面。捕获所有警告消息,但忽略信息性消息
class Logger : public nvinfer1::ILogger
{
    void log(Severity severity, const char* msg) noexcept override
    {
        // suppress info-level messages
        if (severity <= Severity::kWARNING)
            std::cout << msg << std::endl;
    }
} logger;
 
 
void ONNX2TensorRT(const char* ONNX_file, std::string save_ngine)
{
    // 1.创建构建器的实例
    nvinfer1::IBuilder* builder = nvinfer1::createInferBuilder(logger);
 
    // 2.创建网络定义
    uint32_t flag = 1U << static_cast<uint32_t>(nvinfer1::NetworkDefinitionCreationFlag::kEXPLICIT_BATCH);
    nvinfer1::INetworkDefinition* network = builder->createNetworkV2(flag);
 
    // 3.创建一个 ONNX 解析器来填充网络
    nvonnxparser::IParser* parser = nvonnxparser::createParser(*network, logger);
 
    // 4.读取模型文件并处理任何错误
    parser->parseFromFile(ONNX_file, static_cast<int32_t>(nvinfer1::ILogger::Severity::kWARNING));
    for (int32_t i = 0; i < parser->getNbErrors(); ++i)
    {
        std::cout << parser->getError(i)->desc() << std::endl;
    }
 
    // 5.创建一个构建配置,指定 TensorRT 应该如何优化模型
    nvinfer1::IBuilderConfig* config = builder->createBuilderConfig();
 
    // 6.设置属性来控制 TensorRT 如何优化网络
    // 设置内存池的空间
    config->setMemoryPoolLimit(nvinfer1::MemoryPoolType::kWORKSPACE, 16 * (1 << 20));
    // 设置低精度   注释掉为FP32
    if (builder->platformHasFastFp16())
    {
        config->setFlag(nvinfer1::BuilderFlag::kFP16);
    }
 
    // 7.指定配置后,构建引擎
    nvinfer1::IHostMemory* serializedModel = builder->buildSerializedNetwork(*network, *config);
 
    // 8.保存TensorRT模型
    std::ofstream p(save_ngine, std::ios::binary);
    p.write(reinterpret_cast<const char*>(serializedModel->data()), serializedModel->size());
 
    // 9.序列化引擎包含权重的必要副本,因此不再需要解析器、网络定义、构建器配置和构建器,可以安全地删除
    delete parser;
    delete network;
    delete config;
    delete builder;
 
    // 10.将引擎保存到磁盘,并且可以删除它被序列化到的缓冲区
    delete serializedModel;
}
 
 
void exportONNX(const char* ONNX_file, std::string save_ngine)
{
    std::ifstream file(ONNX_file, std::ios::binary);
    if (!file.good())
    {
        std::cout << "Load ONNX file failed! No file found from:" << ONNX_file << std::endl;
        return ;
    }
 
    std::cout << "Load ONNX file from: " << ONNX_file << std::endl;
    std::cout << "Starting export ..." << std::endl;
 
    ONNX2TensorRT(ONNX_file, save_ngine);
 
    std::cout << "Export success, saved as: " << save_ngine << std::endl;
 
}
 
 
int main(int argc, char** argv)
{
    // 输入信息
    const char* ONNX_file  = "../weights/test.onnx";
    std::string save_ngine = "../weights/test.engine";
 
    exportONNX(ONNX_file, save_ngine);
 
    return 0;
}
 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

tensorRT部署之 代码实现 onnx转engine/trt模型 的相关文章

随机推荐

  • 逍遥子突然辞去阿里一切职务!之前不再担任董事长,现在阿里云CEO也卸了

    金磊 发自 凹非寺量子位 公众号 QbitAI 阿里巴巴史上最大架构重组仅半年后 再次迎来重大变革 原集团CEO张勇 花名 逍遥子 正式卸任 同时辞去阿里云董事长和CEO职务 这一次 阿里巴巴掌门的接力棒交到了蔡崇信和吴泳铭 花名 东邪 手
  • dalle2:hierarchical text-conditional image generation with clip

    DALL E 2 论文精读 哔哩哔哩 bilibili更多论文 https github com mli paper reading 视频播放量 30350 弹幕量 256 点赞数 1767 投硬币枚数 1318 收藏人数 751 转发人数
  • Linux之编辑器强大的vim使用手册

    目录 vim三种模式 vim常用操作 环境参数配置 命令合集 方向命令 插入命令 定位命令 删除命令 复制和剪切命令 替换和取消命令 搜索和搜索替换命令 保存和退出命令 其他命令 使用技巧 把一个文件的内容导入当前文件中光标所在位置 定义快
  • swarm与kubernetes的对比

    前言 docker swarm 与kubernetes都是集群管理工具 一个是docker原生自带 一个是谷歌项目下的容器编排工具 那么到底他们到底有什么有缺点呢 kubernetes kubernetes 是Google多年大规模容器管理
  • Windows10如何添加开机启动项

    在日常生活中 偶尔要求其中的软件在开机时便能自动启动 比如MySQL一般被设置为自启动项 今天将为大家介绍window10中如何添加开机启动项 操作过程 1 按下win R调出运行窗口 并输入 shell startup 即可进入开机启动文
  • KPCA数据降维

    文章目录 效果一览 文章概述 部分源码 参考资料 效果一览 文章概述 KPCA数据降维 Matlab核主成分分析 数据降维 可直接运行 适合作为创新点 部分源码 清空环境变量 warning off 关闭报警信息 close all 关闭开
  • Java【多线程】笔记总结

    多线程 概念 方法间调用 普通方法调用 从哪里来就到那里去 闭合的一条路径 多线程调用 开辟了多条路径 在操作系统中运行的程序就是进程 如看视频 线程就是独立的执行路径 在程序运行时 即使没有自己创建线程 后台也会存在多个线程 如gc 线程
  • git本地仓库与远程仓库同步

    在学习和工作中 我们经常遇到这样的场景 我们已经在本地创建了一个git仓库 并添加了文件和修改记录 后面你又想在github或者gitlab上新建一个空白git仓库 并且让这2个仓库进行远程同步并且保存之前本地仓库的修改记录 这样一来git
  • Java 之 认识String类

    目录 一 String类的重要性 二 常用方法 1 字符串构造 2 String对象的比较 3 字符串查找 4 转化 5 字符串替换 6 字符串拆分 7 字符串截取 8 其他操作方法 9 字符串的不可变性 10 字符串修改 三 String
  • 《动手学深度学习 Pytorch版》 2.7 查阅文档

    2 7 1 查找模块中的所有函数和类 import torch 可以调用 dir 函数查询函数中有哪些模块和类 以 双下划线 开始和结束的函数是 Python 中的特殊对象 以 单下划线 开始的函数是内部函数 通常以上两种函数可以忽略 di
  • 如何下载英伟达NVIDIA旧版本驱动,旧版本驱动官方网址

    https www nvidia cn Download Find aspx lang cn 也可以直接搜索英伟达官网 点击驱动程序 然后点击试用版驱动程序 里面不但有试用版的驱动 还有之前发布的所有驱动
  • 2023年信息素养大赛智能算法挑战复赛初中组

    智能算法挑战复赛初中组 总共 4 道题 1 修复机器人的对话词库错误 题目描述 基于人工智能技
  • 深度学习模型参数量/计算量(附计算代码)

    参考 https mp weixin qq com s biz MzI4MDYzNzg4Mw mid 2247546551 idx 2 sn f198b6365e11f0a18832ff1203302632 chksm ebb70e63dc
  • unity 性能查看工具Profiler

    文章目录 前言 profiler工具介绍 菜单栏 帧视图 模块视图 模块详细信息 通过profiler分析优化游戏性能 最后 前言 每次进行游戏优化的时候都用这个工具查看内存泄漏啊 代码优化啊之类的东西 真的好用 但是之前也就是自己摸索一下
  • 【FPGA多周期时序约束详解】- 解读FPGA多周期时序约束的全过程

    FPGA多周期时序约束详解 解读FPGA多周期时序约束的全过程 FPGA作为数字电路设计的常见工具 其设计中必然会遇到时序约束的问题 而多周期时序约束更是FPGA设计中不可避免的难点之一 本文将详细介绍FPGA多周期时序约束的全过程 并结合
  • PHP 使用 Kafka 安装拾遗

    最近项目开发中需要使用 Kafka 消息队列 经过检索 PHP下面有通用的两种方式来调用 Kafka php rdkafka 扩展 以 PHP 扩展的形式进行使用是非常高效的 另外 该项目也提供了非常完备的 文档 不过在 Mac 环境中安装
  • Android9 默认开启/关闭GPS

    gps默认打开 需要关闭的话 修改以下文件 frameworks base packages SettingsProvider res values defaults xml 将
  • xp系统蓝屏,xp系统蓝屏的详细解决过程

    xp系统蓝屏的详细解决过程 现在XP系统微软停止开发了 服务也升级不得了 刚刚使用时还是好好的 能够正常的运行 怎么一言不合就蓝屏了呢 那么xp蓝屏怎么办呢 跟你们分享一下小编解决xp蓝屏的经验吧 重新启动 快速按F8 用箭头上下选择 最后
  • 2022VLMo: Unified Vision-Language Pre-Training with Mixture-of-Modality-Experts

    摘要 我们提出了一个统一的视觉 语言预训练模型 VLMo 该模型与一个模块化的transformer网络共同学习一个双编码器和一个融合编码器 具体地 我们引入了模态混合专家 MoME Transformer 其中每个块包含一个特定于模态的专
  • tensorRT部署之 代码实现 onnx转engine/trt模型

    tensorRT部署之 代码实现 onnx转engine trt模型 前提已经装好显卡驱动 cuda cudnn 以及tensorRT 下面将给出Python C 两种转换方式 1 C 实现 项目属性配置好CUDA tensoeRT库 通常