【TensorRT踩坑记录】安装与使用
TensorRT安装
1、安装onnx和onnxruntime模块
因为转tensorrt需要先转成onnx(我也不确定,先这样说吧),直接pip安装即可。
pip install onnx
pip install onnxruntime
2、安装TensorRT
(1) 首先,查看CUDA版本。win+R输入cmd打开命令行窗口,输入nvcc-V
nvcc -V
(2) 下载tensorrt安装包
https://developer.nvidia.com/tensorrt/download
选择自己需要的版本
选择具体的版本号,一般选后缀是GA的,最稳定
选择和自己CUDA对应的进行下载,注意看清楚系统版本
(3)进行安装
1)解压TensorRT8.6的安装包,选中以下两个文件夹,复制(记住解压的位置,后面还要用)
2)首先,找到自己CUDA的安装位置,打开文件夹。如果自己没改过,一般都是以下路径:
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1
3)把第1)步复制的文件夹,直接粘贴到CUDA/v12.1文件夹下。(对的,就在直接粘贴)
4)修改环境变量,将自己解压的TensorRT的文件夹下的bin文件夹,添加到环境变量path。
# 这是我自己的解压路径
D:\Edge\TensorRT-8.6.1.6.Windows10.x86_64.cuda-12.0\TensorRT-8.6.1.6\bin
(4)验证
首先,打开cmd命令窗口,进入CUDA/v12.1文件夹下(路径一定是这个,要不然trtexec
命令没用),输入:
trtexec --help
显示以下以下帮助信息,说明TensorRT中的trtexec程序可用。
然后,验证trtexec是否可成功执行,打开python,写下如下python代码:
import torch
import torchvision.models as models
import onnx
import onnxruntime# 加载 PyTorch 模型
model = models.resnet18(pretrained=True)
model.eval()# 定义输入和输出张量的名称和形状
input_names = ["input"]
output_names = ["output"]
batch_size = 1
input_shape = (batch_size, 3, 224, 224)
output_shape = (batch_size, 1000)# 将 PyTorch 模型转换为 ONNX 格式
torch.onnx.export(model, # 要转换的 PyTorch 模型torch.randn(input_shape), # 模型输入的随机张量"resnet18.onnx", # 保存的 ONNX 模型的文件名input_names=input_names, # 输入张量的名称output_names=output_names, # 输出张量的名称dynamic_axes={input_names[0]: {0: "batch_size"}, output_names[0]: {0: "batch_size"}} # 动态轴,即输入和输出张量可以具有不同的批次大小
)# 加载 ONNX 模型
onnx_model = onnx.load("resnet18.onnx")
onnx_model_graph = onnx_model.graph
onnx_session = onnxruntime.InferenceSession(onnx_model.SerializeToString())# 使用随机张量测试 ONNX 模型
x = torch.randn(input_shape).numpy()
onnx_output = onnx_session.run(output_names, {input_names[0]: x})[0]print(f"PyTorch output: {model(torch.from_numpy(x)).detach().numpy()[0, :5]}")
print(f"ONNX output: {onnx_output[0, :5]}")
如果代码运行成功,会输出一个resnet18.onnx
文件。
然后,将onnx转为trt文件。(注意,我实际操作下来,必须先进入C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1
路径下,才能使用trtexec
命令,但是参考的某大佬博客确没说这一细节tensorRT安装详解(linux与windows))
# 自己填写onnx的所在路径和想要存放trt文件的路径
trtexec --onnx=resnet18.onnx --saveEngine=resnet18.trt
输出以下内容,即到此成功。