[tensorrt实践] 官方demo采坑

这里的demo指的是在理论中提到的官方demo

NVIDIA/trt-samples-for-hackathon-cn: Simple samples for TensorRT programming (github.com)

  1. 测试环境:

    我目前测了两个部署环境

    • jetson xavier AGX, python3.6.9+tensorrt7.1.3.0+cuda10.2 直接使用的nvidia官方固件中预装的tensorrt和python3

    • x86平台 ,intel 10900K+RTX3080,python3.7.12+tensorrt8.2.5.1+cuda 11.1

  2. 安装tensorrt 官网下载安装包,tar格式的

    选择路径解压,然后将路径添加到bashrc里面

    比如export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/common/opt/TensorRT-8.2.5.1/lib

    然后conda切换到虚拟环境

    安装压缩包中对应的python文件(对应好python版本即可)

    pip install tensorrt-8.2.5.1-cp37-none-linux_x86_64.whl
  3. 安装pycuda

    直接 pip install pycuda即可

    但是如果现在运行demo,是无法import cuda的

    from cuda import cudart # 使用 cuda runtime API

    通过github上的issues可找到解决方案 需要安装 cuda-python

    NVIDIA/cuda-python: CUDA Python Low-level Bindings (github.com)

    git clone 代码,然后在需要的虚拟环境 pip install -e . 即可

    在jetson上由于cpu拉胯,运行build的时候会卡一会,所以安装比较慢,等一下就好。

  4. 修改多进程bug 官方代码如果直接用的话,能跑完但是有报错如下

    CUTENSOR ERROR: some argument is NULL. [TensorRT] ERROR: ../rtSafe/cuda/cutensorReformat.cpp (352) - cuTensor Error in executeCutensor: 7 (Internal cuTensor reformat failed) [TensorRT] ERROR: FAILED_EXECUTION: std::exception需要通过这个链接的方式,解决多线程问题。

    [(9条消息) 使用flask部署tensorrt模型时遇到的问题:TensorRT] ERROR: ../rtSafe/cuda/caskConvolutionRunner.cpp (408)_三叔家的猫的博客-CSDN博客

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的TensorRT C++ demo,该demo使用TensorRT推理引擎对MNIST数字进行分类: ```c++ #include <iostream> #include <cmath> #include <fstream> #include <sstream> #include "NvInfer.h" #include "NvInferPlugin.h" #include "NvOnnxParser.h" using namespace nvinfer1; using namespace plugin; int main(int argc, char** argv) { // Load the ONNX model std::string onnx_model_file = "mnist.onnx"; IBuilder* builder = createInferBuilder(gLogger); INetworkDefinition* network = builder->createNetwork(); auto parser = nvonnxparser::createParser(*network, gLogger); parser->parseFromFile(onnx_model_file.c_str(), -1); builder->setMaxBatchSize(1); builder->setMaxWorkspaceSize(1 << 30); // Set the input and output dimensions Dims input_dims = network->getInput(0)->getDimensions(); input_dims.d[0] = 1; // Set batch size to 1 network->getInput(0)->setDimensions(input_dims); network->getOutput(0)->setDimensions(Dims4(1, 10, 1, 1)); // Build the engine ICudaEngine* engine = builder->buildCudaEngine(*network); // Create execution context IExecutionContext* context = engine->createExecutionContext(); // Create input and output buffers void* input_buffer; void* output_buffer; cudaMalloc(&input_buffer, input_dims.numel() * sizeof(float)); cudaMalloc(&output_buffer, 10 * sizeof(float)); // Load the input data float input_data[28 * 28]; std::ifstream input_file("test_input.txt"); std::string line; int i = 0; while (getline(input_file, line)) { std::stringstream ss(line); ss >> input_data[i++]; } // Copy the input data to GPU cudaMemcpy(input_buffer, input_data, input_dims.numel() * sizeof(float), cudaMemcpyHostToDevice); // Run inference context->execute(1, &input_buffer, &output_buffer); // Copy the output back to CPU float output_data[10]; cudaMemcpy(output_data, output_buffer, 10 * sizeof(float), cudaMemcpyDeviceToHost); // Print the output std::cout << "Output: "; for (int i = 0; i < 10; i++) { std::cout << output_data[i] << " "; } std::cout << std::endl; // Clean up cudaFree(input_buffer); cudaFree(output_buffer); context->destroy(); engine->destroy(); network->destroy(); builder->destroy(); parser->destroy(); return 0; } ``` 这个demo将一个MNIST手写数字的28x28像素图像作为输入,输出一个包含10个元素的向量,其中每个元素代表一个数字的概率。在执行这个demo之前,需要先将ONNX模型转换为TensorRT格式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值