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定制过的,跟桌面版不一样。

我个人习惯的做法是:

  1. 去NVIDIA官网下载Jetson专用的SDK Manager
  2. 选择你的Jetson型号(比如Orin NX、Xavier NX)
  3. 勾选CUDA Toolkit组件
  4. 一键刷机或安装

安装完成后,检查一下:

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有两种方式:

  1. 通过SDK Manager:最省心,自动匹配版本
  2. 手动下载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-libnvinferpython3-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大显身手的地方。