第2章:环境搭建——NVIDIA Jetson Orin环境配置、CUDA/cuDNN/TensorRT安装、Docker镜像构建
好,咱们直接进入正题。
上一章我们聊了YOLO在ADAS中的整体定位,说白了就是「车上的眼睛怎么用AI看路」。但光有算法不行,你得有个能跑的环境。这一章,我就带你手把手把Jetson Orin的开发环境搭起来。
我个人习惯是:先刷机,再装驱动,最后上Docker。三步走,稳得很。
2.1 硬件准备与初始烧录
拿到一块Jetson Orin NX或者AGX,第一件事是什么?不是通电,是确认你的电源和散热。我在项目中遇到过好几次,板子刚跑起来就过热降频,排查半天发现是散热片没贴好。嗯,这坑我替你们踩过了。
烧录系统我用的是NVIDIA官方的SDK Manager。你可以在PC上装好这个工具,然后通过USB-C连接Orin的开发板。流程大致如下:
- 将Orin置于强制恢复模式(按住FORCE RECOVERY键,再按一下RST键)
- PC端打开SDK Manager,选择对应的Jetson型号
- 选择JetPack版本——我个人建议用JetPack 5.1.2或更高,对YOLOv8支持最好
- 勾选「Host Machine」和「Target Machine」两个选项
- 点击下载并烧录,等大约20-30分钟
2.2 CUDA/cuDNN/TensorRT的安装
JetPack其实已经帮你把CUDA、cuDNN、TensorRT都打包好了。但很多人装完发现找不到这些库,为什么?因为环境变量没配。
你可以在Orin的终端里先检查一下:
# 查看CUDA版本
nvcc --version
# 查看TensorRT版本
dpkg -l | grep tensorrt
# 查看cuDNN版本
cat /usr/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
如果这些命令报错,别慌。大概率是路径没加到.bashrc里。我一般这样配:
echo 'export PATH=/usr/local/cuda/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
配完之后再跑一遍上面的检查命令,应该就能看到了。
2.3 验证环境是否正常
环境装好之后,我习惯跑一个简单的TensorRT推理来验证。写个Python脚本:
import tensorrt as trt
print("TensorRT version:", trt.__version__)
import torch
print("PyTorch version:", torch.__version__)
# 检查CUDA是否可用
print("CUDA available:", torch.cuda.is_available())
print("CUDA device count:", torch.cuda.device_count())
如果输出显示CUDA可用,TensorRT版本正常,那恭喜你,环境基本没问题了。
2.4 Docker镜像构建——为什么我推荐用Docker
你可能会问:环境都装好了,为什么还要折腾Docker?
原因很简单:隔离和复现。我在项目中遇到过好几次,同一个模型在不同板子上跑出不同结果,最后发现是cuDNN版本不一致。用Docker,你直接把环境打包成镜像,到哪都一样。
NVIDIA官方提供了Jetson专用的Docker镜像,叫nvcr.io/nvidia/l4t-pytorch。拉取命令如下:
# 拉取PyTorch镜像
docker pull nvcr.io/nvidia/l4t-pytorch:r35.3.1-pth2.0-py3
# 拉取TensorRT镜像
docker pull nvcr.io/nvidia/l4t-tensorrt:r35.3.1-py3
我个人习惯基于l4t-pytorch镜像来构建自己的YOLO部署镜像。写一个Dockerfile:
FROM nvcr.io/nvidia/l4t-pytorch:r35.3.1-pth2.0-py3
# 安装必要的依赖
RUN apt-get update && apt-get install -y \
libgl1-mesa-glx \
libglib2.0-0 \
libsm6 \
libxext6 \
libxrender-dev \
libgomp1 \
&& rm -rf /var/lib/apt/lists/*
# 安装YOLO相关库
RUN pip install ultralytics opencv-python
# 设置工作目录
WORKDIR /workspace
CMD ["/bin/bash"]
构建镜像:
docker build -t yolo-adas:1.0 .
启动容器时,记得挂载你的模型和数据集目录:
docker run -it --rm --runtime nvidia \
-v /home/nvidia/models:/workspace/models \
-v /home/nvidia/data:/workspace/data \
yolo-adas:1.0
--runtime nvidia来调用GPU,而不是--gpus all。这个和x86的Docker不一样,别搞混了。我曾经因为这个参数写错,折腾了一下午才发现。
2.5 环境验证清单
最后,我列一个检查清单,你照着跑一遍,确保环境没问题:
| 检查项 | 预期结果 | 验证命令 |
|---|---|---|
| CUDA版本 | ≥ 11.4 | nvcc --version |
| cuDNN版本 | ≥ 8.6 | cat /usr/include/cudnn_version.h | grep CUDNN_MAJOR |
| TensorRT版本 | ≥ 8.5 | dpkg -l | grep tensorrt |
| PyTorch版本 | ≥ 2.0 | python -c "import torch; print(torch.__version__)" |
| Docker运行 | 容器内可调用GPU | docker run --runtime nvidia nvcr.io/nvidia/l4t-base:r35.3.1 nvidia-smi |
嗯,到这里,你的Jetson Orin开发环境就搭好了。下一章,我们会把YOLOv8模型导出成TensorRT的engine文件,然后跑一个真正的推理demo。到时候你会发现,前面这些环境配置的功夫,全都没白费。