TensorRT推理、NCNN推理、TVM推理、openvino推理

该文展示了使用TensorRT、NCNN、TVM和OpenVINO四个不同的框架进行深度学习推理的示例代码。每个框架中,都包括了加载模型、创建执行上下文、准备输入输出数据及运行推理的过程。这些框架旨在优化模型在GPU或其他硬件上的性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TensorRT推理

#include <iostream>
#include "NvInfer.h"
#include "NvOnnxParser.h"
#include "NvInferPlugin.h"

using namespace nvinfer1;
using namespace std;

int main(int argc, char** argv)
{
    // create TensorRT inference engine
    IBuilder* builder = createInferBuilder(gLogger);
    INetworkDefinition* network = builder->createNetwork();

    // create ONNX parser
    IParser* parser = createParser(*network, gLogger);
    parser->parseFromFile("model.onnx", -1);

    // build TensorRT engine
    builder->setMaxBatchSize(1);
    builder->setMaxWorkspaceSize(1 << 30);
    ICudaEngine* engine = builder->buildCudaEngine(*network);

    // create execution context
    IExecutionContext* context = engine->createExecutionContext();

    // create input and output buffers
    float* input = new float[3 * 224 * 224];
    float* output = new float[1000];

    // run inference
    context->execute(1, { { 0, input } }, { { 0, output } });

    // print results
    for (int i = 0; i < 1000; i++)
    {
&nbs

### 推理网络的概念与实现方法 #### 什么是推理网络? 推理网络是指用于执行已训练好的机器学习或深度学习模型的计算框架。其主要功能是在实际应用场景中接收输入数据,通过加载预训练模型进行前向传播(Forward Propagation),最终输出预测结果[^2]。 #### 常见的推理框架及其特点 1. **NCNN** NCNN是由腾讯开源的一个轻量级神经网络推理框架,专注于端侧设备上的高效运行。它不支持模型的设计与训练,而是侧重于解析并执行由其他框架生成的网络结构文件和权重参数文件。这种特性使其非常适合移动终端或其他资源受限环境中的实时推理任务[^1]。 2. **TensorRT** NVIDIA TensorRT 是一种高性能 GPU 加速库,专为优化深度学习推理而设计。通过对模型图层融合、精度降低以及多流处理等方式提升性能表现,尤其适用于需要高吞吐率的应用场景如自动驾驶汽车视觉感知系统等。 3. **ONNX Runtime** ONNX(Open Neural Network Exchange)Runtime 提供了一个跨平台解决方案来加速不同框架间转换后的模型推断速度。借助该工具开发者无需修改原始代码即可轻松切换目标硬件架构从而获得最佳效率收益[^3]。 4. **TVM** Apache TVM 是一个灵活高效的自动调优编译器栈项目, 它允许用户定义自己的算子操作并通过高级 IR 表达形式描述整个计算流程; 同时还提供了丰富的后端绑定选项使得生成的目标程序能够在多种异构平台上无缝工作包括但不限于 CPU/GPU/FPGA 等. #### 推理网络的实现方法 为了构建有效的推理管道,以下是几个关键步骤: - **模型量化**: 将浮点数表示改为定点数或者更低位宽的形式,在减少存储需求的同时维持较高的准确性水平。 - **图形优化**: 删除冗余节点合并相似表达式调整布局顺序等等措施都可以显著改善整体延时指标。 - **特定领域定制化开发**: 针对企业内部具体业务逻辑编写专属插件扩展原生能力边界满足个性化诉求。 ```python import onnxruntime as ort from PIL import Image import numpy as np def preprocess_image(image_path): img = Image.open(image_path).resize((224, 224)) input_data = np.array(img).astype('float32') / 255. return np.expand_dims(input_data.transpose([2,0,1]), axis=0) session = ort.InferenceSession("resnet50.onnx") input_name = session.get_inputs()[0].name output_name = session.get_outputs()[0].name image_tensor = preprocess_image("example.jpg") result = session.run([output_name], {input_name: image_tensor}) print(np.argmax(result)) # 输出分类索引号 ``` 以上脚本展示了如何利用 `onnxruntime` 对一张图片完成 ResNet-50 的类别判断过程。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值