pytorch模型tensorrt加速之-pth转onnx转trt,在推理trt模型测试模型速度

本文介绍了如何将PyTorch模型通过TensorRT进行加速,详细讲解了从.pth模型转换为.onnx,再转为.trt模型的过程。在Ubuntu 18.4环境下,使用Python 3.8、PyTorch 1.8+cu11和TensorRT 7.2.3,通过torch2trt库完成模型转换。转换后的TRT模型在推理时速度比原始.pth模型快了4-5倍。
摘要由CSDN通过智能技术生成

首先需要安装两个必要的包tensorrt和torch2trt,tensorrt的话要在官网下载tar压缩包,建议下载tar包安装,官网,我下载的是7.2.3版本,torch2trt可以在GitHub上克隆项目。
我的环境(tensorrt目前好像Linux上可以用,我在win10上没有搞成功,tar包里面没有对应的whl文件):
ubuntu18.4
python3.8
pytorch1.8+cu11
tensorrt7.2.3
pycuda2021

解压安装tensorrt

tar -zxvf TensorRT-7.2.3.4.Ubuntu-18.04.x86_64-gnu.cuda-11.1.cudnn8.1.tar.gz
cd TensorRT-7.2.3.4
# 这个目录会有四个文件,python,uff,graphsurgeon,onnx_graphsurgeon,分别进入目录安装对应的whl文件
pip install xxxxx.whl
# 配置环境变量
vim /etc/profile
# 最后面加上如下命令,路径需看自己的安装路径,注意这个lib文件夹可能是个软连接,我当时因为这个报错了,要lib的正真路径
export TRT_RELEASE=`pwd`/TensorRT-7.2.3.4
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TRT_RELEASE/lib

# 使文件立刻生效
source /etc/profile

安装torch2trt

git clone https://github.com/NVIDIA-AI-IOT/torch2trt
cd torch2trt
python setup.py install

这两个安装好之后就可以转模型了,首先的有一个.pth文件,就是ptorch训练的模型,我用的是mnist数据集训练测试的,训练如下

import torch
import numpy as np
from torch.nn import Module
from torch.autograd import Variable
import torch.nn as nn
from torch import nn,optim
from torch.utils.data import DataLoader
from torchvision import datasets, transforms

batch_size = 64
learning_rate = 1e-2
num_epochs = 10

# 加载mnist数据集,构建训练集测试集的迭代器
data_tf = transforms.Compose([transforms.ToTensor(), transforms.Normalize([0.5], [0.5])])
train_dataset = datasets.MNIST(root='./data', train=True, transform=data_tf, download=True)
test_dataset = datasets.MNIST(root='./data', train=False, transform=data_tf)
train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=batch_size, shuffle=False)

# cnn网络
class SimpleCnn(Module):
    def __init__(self):
        super(SimpleCnn, self).__init__() #b, 3, 32, 32
        self.layer1 = nn.Sequential()
        self.layer1.add_module('conv1', nn.Conv2d(1, 32,
PyTorch模型可以通过以下步骤换为TensorRT: 1. 定义PyTorch模型并加载预训练权重。 2. 使用ONNXPyTorch模型换为ONNX格式。 3. 使用TensorRTONNX解析器将ONNX模型换为TensorRT引擎。 4. 在TensorRT引擎上执行推理。 下面是一个简单的示例代码: ```python import torch import tensorrt as trt import numpy as np import onnx import onnx_tensorrt.backend as backend # 定义PyTorch模型并加载预训练权重 class MyModel(torch.nn.Module): def __init__(self): super(MyModel, self).__init__() self.fc1 = torch.nn.Linear(10, 5) self.fc2 = torch.nn.Linear(5, 2) def forward(self, x): x = self.fc1(x) x = torch.nn.functional.relu(x) x = self.fc2(x) return x model = MyModel() model.load_state_dict(torch.load('model.pth')) # 使用ONNXPyTorch模型换为ONNX格式 dummy_input = torch.randn(1, 10) input_names = ['input'] output_names = ['output'] torch.onnx.export(model, dummy_input, 'model.onnx', verbose=False, input_names=input_names, output_names=output_names) # 使用TensorRTONNX解析器将ONNX模型换为TensorRT引擎 onnx_model = onnx.load('model.onnx') engine = backend.prepare(onnx_model, device='CUDA:0') # 在TensorRT引擎上执行推理 input_data = np.random.randn(1, 10).astype(np.float32) output_data = engine.run(input_data)[0] ``` 在上面的代码中,我们首先定义了一个简单的PyTorch模型,并加载了预训练权重。然后,我们使用`torch.onnx.export()`将PyTorch模型换为ONNX格式,并定义了输入和输出的名称。接着,我们使用ONNX解析器将ONNX模型换为TensorRT引擎。最后,我们使用TensorRT引擎执行推理,得到输出数据。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值