3、CUDA与TensorRT环境配置:CUDA Toolkit安装、cuDNN库配置、TensorRT安装与版本匹配,验证推理引擎。
好,咱们进入第三章。这一章,说白了就是给Jetson装上「发动机」和「变速箱」。
CUDA Toolkit是GPU的驱动核心,cuDNN是加速深度学习的底层库,TensorRT则是咱们做推理优化的王牌工具。这三者版本必须严丝合缝,否则项目直接翻车。我见过太多人在这步卡了两三天,最后发现是版本没对上。
3.1 CUDA Toolkit安装:别用apt,用SDK Manager
很多人习惯用sudo apt install cuda,但在Jetson上,我强烈建议你别这么干。Jetson的CUDA是NVIDIA定制过的,跟桌面版不一样。
我个人习惯的做法是:
- 去NVIDIA官网下载Jetson专用的SDK Manager
- 选择你的Jetson型号(比如Orin NX、Xavier NX)
- 勾选CUDA Toolkit组件
- 一键刷机或安装
安装完成后,检查一下:
nvcc --version
你会看到类似这样的输出:
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2023 NVIDIA Corporation
Built on Wed_Nov_22_10:17:15_PST_2023
Cuda compilation tools, release 11.4, V11.4.315
关键点:Jetson的CUDA版本通常比桌面版低一些。比如Jetson Orin NX默认带的是CUDA 11.4,而桌面版已经到12.x了。别慌,这是正常的。
3.2 cuDNN库配置:别漏了软链接
cuDNN是CUDA的「加速包」。安装其实不复杂,但有个坑——软链接。
我记得有一次帮客户调试,他死活跑不起来模型,报错说找不到cuDNN库。我远程一看,好家伙,/usr/lib/aarch64-linux-gnu/下面只有libcudnn.so.8,没有libcudnn.so这个软链接。
正确的做法是:
sudo cp cudnn-linux-aarch64-8.x.x.x_cuda11-archive/include/cudnn*.h /usr/include/
sudo cp cudnn-linux-aarch64-8.x.x.x_cuda11-archive/lib/libcudnn* /usr/lib/aarch64-linux-gnu/
sudo chmod a+r /usr/include/cudnn*.h /usr/lib/aarch64-linux-gnu/libcudnn*
然后手动创建软链接:
sudo ln -sf /usr/lib/aarch64-linux-gnu/libcudnn.so.8.x.x /usr/lib/aarch64-linux-gnu/libcudnn.so
sudo ln -sf /usr/lib/aarch64-linux-gnu/libcudnn_ops_infer.so.8.x.x /usr/lib/aarch64-linux-gnu/libcudnn_ops_infer.so
警告:cuDNN版本必须跟CUDA版本严格匹配。比如CUDA 11.4只能用cuDNN 8.x系列,不能用cuDNN 9.x。查表确认,别凭感觉。
3.3 TensorRT安装与版本匹配
TensorRT是咱们做推理优化的核心工具。安装前,先确认一件事:你的CUDA和cuDNN版本。
我建议用这张表来对照:
| TensorRT版本 | CUDA版本 | cuDNN版本 | Jetson平台 |
|---|---|---|---|
| 8.5.x | 11.4 | 8.6 | Orin NX/AGX |
| 8.4.x | 11.4 | 8.4 | Xavier NX/AGX |
| 8.2.x | 10.2 | 8.2 | Nano/TX2 |
安装TensorRT有两种方式:
- 通过SDK Manager:最省心,自动匹配版本
- 手动下载deb包:适合离线环境
手动安装的步骤:
sudo dpkg -i nv-tensorrt-repo-ubuntu20.04-cuda11.4-trt8.5.2.2-ea_1-1_arm64.deb
sudo apt-key add /var/nv-tensorrt-repo-ubuntu20.04-cuda11.4-trt8.5.2.2-ea/7fa2af80.pub
sudo apt-get update
sudo apt-get install tensorrt
安装完验证一下:
dpkg -l | grep TensorRT
你应该能看到类似:
ii tensorrt 8.5.2.2-1+cuda11.4 arm64 Meta package for TensorRT
小技巧:如果你在Jetson上做开发,建议同时安装python3-libnvinfer和python3-libnvinfer-dev,这样Python也能直接调用TensorRT。
3.4 验证推理引擎:跑一个简单的demo
环境配好了,不跑个demo心里不踏实。我习惯用TensorRT自带的trtexec工具来验证。
先检查trtexec是否可用:
trtexec --version
然后跑一个简单的ONNX模型测试:
trtexec --onnx=resnet50.onnx --saveEngine=resnet50.engine --fp16
你会看到类似这样的输出:
[I] Engine built in 12.345 seconds.
[I] Average inference time: 3.456 ms
这说明TensorRT已经能正常工作了。
如果你用Python,可以这样验证:
import tensorrt as trt
print(trt.__version__)
输出应该是8.5.2.2之类的版本号。
避坑指南:我曾经遇到一个情况,trtexec能跑,但Python调用时报错。后来发现是python3-libnvinfer没装对版本。记住:Python的TensorRT版本必须跟系统安装的TensorRT版本一致。
3.5 常见问题与解决方案
环境配置这块,我踩过的坑比走过的路还多。总结几个高频问题:
- 问题1:
libcudnn.so.8: cannot open shared object file
解决:检查软链接,重新ldconfig - 问题2:
TensorRT version mismatch
解决:卸载重装,确保CUDA、cuDNN、TensorRT版本匹配 - 问题3:
trtexec: command not found
解决:确认/usr/src/tensorrt/bin/在PATH中
嗯,这一章的内容就到这。环境配置是枯燥的,但也是最重要的。你想想看,如果发动机都没装对,后面再怎么调优都是白搭。
下一章咱们开始真正搞模型转换和优化,那才是TensorRT大显身手的地方。