Pytorch模型转TensorRT模型部署(一.环境的搭建)

0.前言

AI模型部署的常见方案
参考: pytorch模型转TensorRT模型部署

  1. cpu: pytorch->onnx->onnxruntime
  2. gpu: pytorch->onnx->onnx2trt->tensorRT
  3. arm: pytorch->onnx->ncnn/mace/mnn

在这里我们使用的是GPU的模型部署:pytorch->onnx->onnx2trt->tensorRT

1.环境的搭建(Linux)

重要的依赖

  • CUDA
  • cudnn
  • TensorRT
  • pytorch

CUDA的安装

step1.你需要查看你电脑显卡驱动所支持的最大CUDA版本

查看GPU信息的命令

watch -n 0.5 nvidia-smi

在这里插入图片描述

比如卡驱动所支持的最大CUDA版本

CUDA Version: 12.0

step2.下载CUDA

链接: CUDA下载官网:CUDA Toolkit Archive | NVIDIA Developer
在这里插入图片描述
在这里插入图片描述
下载之后你将得到一个.run的文件
在这里插入图片描述

step3.进行安装

sudo chmod +x cuda_11.6.0_510.39.01_linux.run #给文件权限
./ cuda_11.6.0_510.39.01_linux.run

在这里插入图片描述
在这里插入图片描述
对于已经按照显卡驱动的我们老说,应该按回车取消驱动的安装。
在这里插入图片描述
Options中是关于安装路径和链接的设置,我选择默认。

step4.环境变量的设置

安装完成后

cd /usr/local/

你将会看到cuda和cuda11.6,cuda是指向cuda11.6的链接。
在这里插入图片描述
如果你安装了多了cuda,比如cuda11.6和cuda11.7,那么需要使用cuda11.7时候把cuda这个文件指向cuda11.7,这个操作可能实在安装的时候帮你自动完成的。
设置环境变量

sudo gedit ~/.bashrc 
export LD_LIBRARY_PATH="/usr/local/cuda/lib64:$LD_LIBRARY_PATH"
export PATH="/usr/local/cuda/bin:$PATH"
export CUDA_HOME="/usr/local/cuda:$CUDA_HOME"

保存退出后,你需要在每个终端进行刷新

source ~/.bashrc 

或者重启你的电脑。

cudnn我们先不安装,等待TensorRT版本确定之后再根据TensorRT的要求的cudnn版本进行安装。如果不这样做,在使用TensorRT时会出现警报,我们最好避免。cudnn的按照将出现在TensorRT的安装章节中。

step5.验证

nvcc -V

在这里插入图片描述

Pytorch的安装

step1.安装Miniconda并创建环境用于pytorch的安装

链接: linux安装miniconda3
python版本,我选择3.8

step2.安装pytorch版本

链接: pytorch
在这里插入图片描述
在这里你可以选择更多pytorch的版本,根据你所安装的cuda版本选择。
在这里插入图片描述
我选择的版本

1.12.0+cu116

TensorRT的安装

step1.下载TensorRT

链接: NVIDIA TensorRT Download
选择一个版本进行下载,注意确保这个版本所支持的CUDA与你的版本对应。
在这里插入图片描述
我的下载所得
在这里插入图片描述
下面我们去安装cudnn,TensorRTu要求按照的cudnn版本是8.6.

step2.cudnn的安装

链接: cuDNN Download
在这里插入图片描述
下载解压后你将得到
在这里插入图片描述
之后使用命令将include和lib中的文件复制到cuda-11.6的文件夹中,/usr/local/cuda-11.6
在这里插入图片描述
链接: Linux之cuda、cudnn安装及版本切换

sudo cp include/cudnn* /usr/local/cuda-11.6/include/

sudo cp lib/lib* /usr/local/cuda-11.6/lib64/

sudo chmod a+r /usr/local/cuda-11.6/include/cudnn* /usr/local/cuda-11.6/lib64/libcudnn*

step3.TensorRT-python的安装

切换到pytorch环境

conda activate pytorch

进入TensorRT-python的安装文件夹中
在这里插入图片描述
根据你的python版本按照
在这里插入图片描述

pip install tensorrt-8.5.1.7-cp38-none-linux_x86_64.whl

pip list
在这里插入图片描述
之后你的pytorch环境中才可以

import tensorrt as trt

打印环境信息

import torch
import cv2
import tensorrt
print(torch.__version__)# 1.12.1+cu116
print(torch.version.cuda)# 11.6
print(torch.backends.cudnn.version())#   8600
print(cv2.__version__)
print(tensorrt.__version__)

注意,cudnn版本的打印适合tensorrt有关的,如果你更新了cuda或者cudnn的版本,那么你需要重新安装pytorch环境中的tensorrt工具包。

torch.backends.cudnn.version()
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
将YOLOv5 PyTorch模型换为TensorRT模型需要以下步骤: 1. 安装TensorRTPyTorch。 2. 下载并安装yolov5。 3. 使用PyTorch将yolov5模型换为ONNX格式。 ``` python models/export.py --weights yolov5s.pt --img 640 --batch 1 --include onnx # yolov5s ``` 4. 安装ONNX-TensorRT。 ``` git clone https://github.com/onnx/onnx-tensorrt.git cd onnx-tensorrt git submodule update --init --recursive mkdir build && cd build cmake .. -DTENSORRT_ROOT=/path/to/tensorrt -DCMAKE_CXX_COMPILER=g++-7 make -j sudo make install ``` 5. 使用ONNX-TensorRT将ONNX模型换为TensorRT模型。 ``` import onnx import onnx_tensorrt.backend as backend model = onnx.load("yolov5s.onnx") # Load the ONNX model engine = backend.prepare(model, device="CUDA:0") # Prepare the TensorRT model with open("yolov5s.engine", "wb") as f: # Serialize the TensorRT engine f.write(engine.serialize()) ``` 6. 测试TensorRT模型的性能和准确性。 ``` import pycuda.driver as cuda import pycuda.autoinit import numpy as np import time # Load the TensorRT engine with open("yolov5s.engine", "rb") as f: engine = cuda.Context().deserialize_cuda_engine(f.read()) # Create the TensorRT inference context context = engine.create_execution_context() # Allocate the input and output buffers input_shape = engine.get_binding_shape(0) output_shape = engine.get_binding_shape(1) input_buffer = cuda.mem_alloc(np.prod(input_shape) * 4) output_buffer = cuda.mem_alloc(np.prod(output_shape) * 4) # Prepare the input data input_data = np.random.rand(*input_shape).astype(np.float32) # Copy the input data to the input buffer cuda.memcpy_htod(input_buffer, input_data) # Run inference start_time = time.time() context.execute_v2(bindings=[int(input_buffer), int(output_buffer)]) end_time = time.time() # Copy the output data to the output buffer output_data = np.empty(output_shape, dtype=np.float32) cuda.memcpy_dtoh(output_data, output_buffer) # Print the inference time and output data print("Inference time: {} ms".format((end_time - start_time) * 1000)) print("Output shape: {}".format(output_shape)) print("Output data: {}".format(output_data)) ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值