重要说明:此贴经过多次修改。第一次安装的的为trt8.6.1版本。第二次安装的10.0.0.6版本。有些地方可能没改过来,比如链接向导,我懒得改了,但是流程是对的。
cuda和cudnn版本对应关系
tensorRT历史发行版本
CUDA历史发行版本
cudnn历史发行版本
NVIDIA驱动安装
CUDA对显卡驱动的要求
不要看这个博客:pth转onnx模型、onnx转tensorrt模型、python中使用tensorrt进行加速推理(全网最全,不信你打我)
1、选择TensorRT版本号
- 因为CUDA为12.4版本的,2024年4月25日能支持这个CUDA的trt只有TensorRT10.0.0。所以我把cudnn改为了8.9.7版本
- 查看cuda版本号,cuda12.4,cudnn8.9.7,pytorch2.0
- google搜索tensorrt release notes 参考快速查找cudnn、tensorrt、cuda之间匹配对应的版本
- 选择TensorRT版本,比如本机是CUDA12.4,选择TensorRT8.9.7
- TensorRT10.0.0.6最高支持CUDA12.4,最低支持CUDA11.0,并且在cudnn8.9.7上进行过测试,就选这个。
2、安装TensorRT
- 找到自己的版本发行说明TensorRT历史版本发行
- 进去NVIDIA TensorRT Archived Documentation
- 进去NVIDIA TensorRT Installation Guide(如果安装本版一致的话,直接看这个也行)
- 文档第一步先确认: 如果您正在使用 TensorRT Python API,并且 CUDA-Python 尚未安装在您的系统上,请参考 NVIDIA CUDA-Python 安装指南进行安装。
-
- conda环境下面,
conda list
查看有没有python-cuda
这个包
- conda环境下面,
- linux安装方式有:Debian或RPM软件包、Python wheel文件、tar文件或zip文件。windows只支持zip安装方式。
2.1、安装python索引
python
python3 -m pip install --upgrade pip
python3 -m pip install wheel
python
python3 -m pip install --pre --upgrade tensorrt
python
python3 -m pip install --pre --upgrade tensorrt_lean
python3 -m pip install --pre --upgrade tensorrt_dispatch
- 测试
python
python3
>>> import tensorrt
>>> print(tensorrt.__version__)
>>> assert tensorrt.Builder(tensorrt.Logger())
python
python3
>>> import tensorrt_lean as trt
>>> print(trt.__version__)
>>> assert trt.Runtime(trt.Logger())
python3
>>> import tensorrt_dispatch as trt
>>> print(trt.__version__)
>>> assert trt.Runtime(trt.Logger())
- 不要问为什么,我抄官方文档的
2.2、tar安装方式
- 从下载页面,进去。
- 点击Download Now,下面图片是第一次安装8.6的截图,现在安装的是,10.0.0.6版本。所以下面图片仅供参考。
- 选择自己要的版本,这里我选第7个下载。
4. cd到下载的目录那里,tar -zxvf 包名字
5. 添加环境变量export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<TensorRT-${version}/lib>
,,,,,,<TensorRT-${version}是解压包的名字,不要直接CV啊。
6. 正式安装,Install the Python TensorRT wheel file (replace cp3x with the desired Python version, for example, cp310 for Python 3.10).(看句洋文,自己改下)
bash
cd TensorRT-${version}/python
python3 -m pip install tensorrt-*-cp3x-none-linux_x86_64.whl
python3 -m pip install tensorrt_lean-*-cp3x-none-linux_x86_64.whl
python3 -m pip install tensorrt_dispatch-*-cp3x-none-linux_x86_64.whl
- 如果用tensorflow,安装下
bash
cd TensorRT-${version}/uff
python3 -m pip install uff-0.6.9-py2.py3-none-any.whl
which convert-to-uff
- 安装Python的graphsurgeon wheel文件
bash
cd TensorRT-${version}/graphsurgeon
python3 -m pip install graphsurgeon-0.4.6-py2.py3-none-any.whl
- 安装onnx-graphsurgeon文件
bash
cd TensorRT-${version}/onnx_graphsurgeon
python3 -m pip install onnx_graphsurgeon-0.3.12-py2.py3-none-any.whl
安装OVER!!!
3、将pytorch模型导出为onnx模型
python
model = models.vgg16(num_classes=2)
# 加载模型权重
model.load_state_dict(torch.load(model_pth, map_location=device))
model.eval()
dummy_input = torch.randn(batch_size, 3, 224, 224)
torch_out = model(dummy_input)
torch.onnx.export(model,
dummy_input,
onnx_path,
opset_version=10,
do_constant_folding=True,
input_names=["input"],
output_names=["output"],
dynamic_axes={"input": {0: "batch_size"},
"output": {0: "batch_size"}
},
verbose=False
)
4、ONNX导出为.engine或者.trt(trt10.0.0)文件
python
lzy@haha:~/TensorRT-10.0.0.6/bin$
# 输入
./trtexec --onnx=vgg16.onnx --saveEngine=vgg16.engine --fp16
记得开头那个博客吗???知道他怎么运行的吗??
python
sudo ./trtexec --onnx=/home/photo-de/mm.onnx --saveEngine=m1.engine --fp16
我🍀你****************************************************************************************************************************************************************************************************************************************************************************************************************************
5、使用engine或者trt模型进行推理
具体怎么使用参考这个:Understanding TensorRT Runtimes
直接copy这个代码,实例化这里面的类就能用。根据输出略微修改就行。
python
from onnx_helper import ONNXClassifierWrapper
N_CLASSES = 1000 # Our ResNet-50 is trained on a 1000 class ImageNet task
trt_model = ONNXClassifierWrapper("resnet_engine.trt", [BATCH_SIZE, N_CLASSES], target_dtype = PRECISION)
BATCH_SIZE=32
dummy_input_batch = np.zeros((BATCH_SIZE, 224, 224, 3), dtype = PRECISION)
predictions = trt_model.predict(dummy_input_batch)