【TensorRT 10 C++ inference example】最新版本TensorRT c++ api的推理部署教程

TensorRT是英伟达推出的部署框架,我的工作经常需要封装我的AI算法和模型给到桌面软件使用,那么tensorRT对我来说就是不二之选。TensorRT和cuda深度绑定,在c++版本的推理教程中需要使用cuda进行数据的显存绑定,由于10之前的写法比较固定,我自己基于tensorRT和cuda写了一套部署框架,将模型转换和核心推理部分都封装了起来。

  但是最近在一个新项目上,我把cuda升级到了12.4,随着的tensorRT也用上了最新的10.11版本,然后我发现原来的代码报错了,仔细检查发现tensorRT10修改了很多原来的api,我在网上查询了一些方案,大部分都没有解决或者不是很清楚,还有些文章需要付费所以也看不了。后来我发现英伟达自己在tensorRT项目中给了很多sample,但是这些sample有点臃肿,所以在这里我分享一下我的方案。

  【关于如何生成trt的引擎文件我这里就不写了,tensorRT10和之前的版本在这里区别不大,而且tensorRT都会给一个转换的可执行文件。所以我直接从模型推理开始。】

  首先,我将回顾一个tensorRT的推理流程,然后会将一些最新版本和之前版本的区别,最后会给上最新版本推理的示例代码。

  TensorRT首先需要初始化模型引擎和执行会话,这个新旧版本都一样,这里放一下我的代码:

// 核心头文件
#include <NvOnnxParser.h>
#include <NvInfer.h>
#include <cuda_runtime_api.h>

// 首先定义cuda stream
cudaStream_t stream;
// 初始化变量
nvinfer1::IRuntime* model_runtime{ nullptr };
nvinfer1::ICudaEngine* model_engine{ nullptr };
nvinfer1::IExecutionContext* model_context{ nullptr };
// 模型路径
const char* modelFile =
要在Ubuntu 20.04系统上安装CUDA 11.4以及TensorRT 8,并利用它们提供的C++推理加速API,首先我们需要一步步完成环境搭建工作,然后再从GitHub等资源库中获取合适的代码示例。 ### 第一步:准备环境 #### 1. 安装 NVIDIA 驱动 确保您的显卡驱动已经正确安装并且兼容 CUDA 11.4。推荐使用官方支持的驱动版本(>= 465)。可以通过以下命令检查当前GPU信息及驱动状态: ```bash nvidia-smi ``` 如果尚未安装正确的驱动,则可以从[NVIDIA官方网站](https://www.nvidia.com/)下载并按照指引操作。 #### 2. 下载与安装 CUDA Toolkit 11.4 访问 [CUDA官网页面](https://developer.nvidia.com/cuda-toolkit-archive),选择对应版本进行下载。对于 Ubuntu 用户来说,通常可以选择.run文件或者.deb包的形式安装。 - 使用 `.run` 文件的方式需关闭图形界面;而`.deb`则可以直接添加到APT源列表里方便管理更新。 - 设置环境变量路径,在终端输入 `vim ~/.bashrc` 添加以下内容: ```shell script export PATH=/usr/local/cuda-11.4/bin:$PATH export LD_LIBRARY_PATH=/usr/local/cuda-11.4/lib64:${LD_LIBRARY_PATH+:${LD_LIBRARY_PATH}} ``` 验证是否成功加载CUDA工具链:`nvcc -V`. #### 3. TensorRT部署 由于TensorRT本身并不是完全开源的产品形式发布,开发者大多需要注册成为[开发者计划成员](https://developer.nvidia.com/tensorrt)后方能获得正式版二进制包或者其他相关资料链接地址。此外还存在部分社区贡献出来的简化封装接口可供参考学习用途。 当取得许可后的离线安装步骤大致如下所示(具体细节依据实际产品文档为准): - 解压缩tar.gz归档; - 将头文件拷贝至 `/usr/include`; - 动态链接库放置于标准搜索目录下(`lib`, `lib64`)或手动加入 `LD_LIBRARY_PATH`; 注意这里假定您已经有了合法授权许可去开展进一步动作! --- ### 第二步:寻找合适的应用场景& 示例工程 现在让我们回到主题——关于能够体现上述组件协同工作的公开可用项目。这里有几个方向可以帮助定位目标存储库: 1. **NVIDIA-Specific Repositories**: 直接浏览由英伟达维护的一系列示范作品集合,其中包含大量涉及深度神经网络模型优化、训练流程设计等方面的知识要点分享。例如[tensorrt-inference-server](https://github.com/triton-inference-server/server), 提供了一个通用的服务端架构允许远程客户端发起请求处理任务。 2. **Third Party Implementations & Tutorials**: 许多人也会将自己的实践经验记录下来上传互联网共享给更多人了解整个过程是如何运作起来的。像某些个人主页也许正好满足初学者快速入门的需求。尝试检索诸如 `"c++ tensorrt example"` 这样的关键词组合即可发现不少有用的内容来源点。 以下是其中一个简单的演示片段用于展示基本原理: ```cpp #include "NvInfer.h" #include <iostream> int main(){ // 创建Logger实例作为错误报告机制的一部分 nvinfer1::ILogger* logger = new SampleLogger(); // 构建Builder对象负责生成引擎描述符 IBuilder *builder = createInferBuilder(*logger); delete builder; return 0; } ``` 此段伪代码展示了如何启动构建一个最小化的TRT运行期环境结构雏形。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值