第三章 环境搭建与工具链:CUDA、cuDNN、PyTorch、TensorRT、DeepStream配置

好,咱们直接进入正题。

环境搭建这事儿,说难不难,说简单也真能折腾死人。我见过太多同学在配置环境上花了两三天,最后发现是CUDA版本和PyTorch没对齐。嗯,这节课我就把我在多个安防项目里踩过的坑、总结的经验,一次性给你讲透。

3.1 CUDA:GPU计算的基石

CUDA是NVIDIA的并行计算平台。说白了,就是让GPU干CPU的活,而且干得更快。

版本选择

我个人习惯是:选新不选旧,但别追最新。比如现在CUDA 12.x已经出了,但我建议你用CUDA 11.8或12.1。为什么?因为PyTorch和TensorRT对这些版本的兼容性最好。

⚠️ 我曾经踩过的坑: 有一次为了尝鲜装了CUDA 12.3,结果发现PyTorch官方还没出对应的二进制包,只能自己从源码编译,折腾了一整天。后来我学乖了,先看PyTorch官网的安装命令,它支持哪个CUDA版本,我就装哪个。

安装步骤

  1. 去NVIDIA官网下载对应系统的runfile或deb包
  2. 安装前先卸载旧版本:sudo apt-get purge nvidia*
  3. 安装命令示例:sudo sh cuda_11.8.0_520.61.05_linux.run
  4. 配置环境变量,加到~/.bashrc
export PATH=/usr/local/cuda-11.8/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH

装完后跑一下 nvcc --version,看到版本号就说明成了。

3.2 cuDNN:深度学习的加速器

cuDNN是NVIDIA针对深度学习优化的库。它专门加速卷积、池化、归一化这些操作。你想想看,YOLO里全是卷积,没有cuDNN的话,推理速度至少慢3-5倍。

安装要点

  • 需要注册NVIDIA开发者账号才能下载
  • 版本必须和CUDA匹配。比如CUDA 11.8对应cuDNN 8.9.x
  • 安装其实就是把文件拷贝到CUDA目录下
# 解压后执行
sudo cp cuda/include/cudnn*.h /usr/local/cuda/include/
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64/
sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*
💡 小技巧: 验证cuDNN是否装好,可以编译它自带的sample程序。我在项目中遇到过好几次,明明拷贝了文件,但权限没给对,结果程序运行时一直报错。所以记得加 chmod a+r

3.3 PyTorch:模型训练与推理的框架

PyTorch现在已经是深度学习的事实标准了。YOLOv5、v8、v10都是用PyTorch训练的。

安装命令

我建议用pip安装,别用conda。为什么?因为pip的包更新更快,而且不容易出现依赖冲突。

# CUDA 11.8版本
pip install torch==2.1.0 torchvision==0.16.0 torchaudio==2.1.0 --index-url https://download.pytorch.org/whl/cu118

# CUDA 12.1版本
pip install torch==2.1.0 torchvision==0.16.0 torchaudio==2.1.0 --index-url https://download.pytorch.org/whl/cu121

验证安装

import torch
print(torch.__version__)
print(torch.cuda.is_available())  # 应该返回True
print(torch.cuda.get_device_name(0))  # 显示你的GPU型号

🔑 关键点: 如果 torch.cuda.is_available() 返回False,99%是CUDA版本和PyTorch版本不匹配。别慌,卸载重装对应版本就好。

3.4 TensorRT:推理加速的利器

TensorRT是NVIDIA的推理优化引擎。它能把PyTorch模型转成TensorRT引擎,推理速度提升2-5倍。在安防场景里,这意味着同样的GPU能多跑几路视频流。

安装方式

有两种方式:

  • deb包安装:适合Ubuntu系统,一键安装
  • tar包安装:适合自定义路径,我比较喜欢这种方式
# tar包安装示例
tar -xzvf TensorRT-8.6.1.6.Linux.x86_64-gnu.cuda-11.8.tar.gz
sudo mv TensorRT-8.6.1.6 /usr/local/
# 配置环境变量
export LD_LIBRARY_PATH=/usr/local/TensorRT-8.6.1.6/lib:$LD_LIBRARY_PATH
# 安装Python包
pip install /usr/local/TensorRT-8.6.1.6/python/tensorrt-8.6.1-cp39-none-linux_x86_64.whl
⚠️ 注意: TensorRT的版本必须和CUDA、cuDNN严格对应。我曾经因为cuDNN版本高了0.1,结果TensorRT死活加载不了引擎。查了半天才发现是版本号没对齐。

3.5 DeepStream:安防监控的完整Pipeline

DeepStream是NVIDIA推出的视频分析SDK。它把解码、预处理、推理、后处理、编码整个流程都封装好了。你只需要写一个配置文件,就能跑起一个完整的安防监控系统。

安装步骤

  1. 先装好CUDA、cuDNN、TensorRT
  2. 安装GStreamer依赖:sudo apt-get install libgstreamer1.0-0 gstreamer1.0-tools
  3. 下载DeepStream SDK,运行安装脚本
sudo ./deepstream-6.3_6.3.0-1_amd64.deb
# 或者用tar包
tar -xvf deepstream_sdk_v6.3.0_x86_64.tbz2
cd deepstream_sdk_v6.3.0
sudo ./install.sh

验证安装

cd /opt/nvidia/deepstream/deepstream-6.3/samples/configs/deepstream-app
deepstream-app -c source4_1080p_dec_infer-resnet_tracker_sgie_tiled_display_int8.txt

如果能看到视频画面,说明环境搭好了。

💡 我的经验: DeepStream的配置文件是核心。我建议你从官方sample开始改,不要自己从头写。比如你要跑YOLO,就把sample里的模型路径改成你的YOLO模型,再调整一下输入尺寸和类别数就行。

3.6 版本兼容性速查表

这是我整理的一份兼容性表,你直接照着配就行:

组件 推荐版本 备注
CUDA 11.8 稳定,兼容性好
cuDNN 8.9.7 对应CUDA 11.x
PyTorch 2.1.0 支持CUDA 11.8/12.1
TensorRT 8.6.1 对应CUDA 11.8
DeepStream 6.3 依赖TensorRT 8.6

3.7 常见问题与避坑指南

  • 问题1:PyTorch检测不到GPU
    原因:CUDA版本和PyTorch不匹配。解决方案:卸载PyTorch,安装对应CUDA版本的包。
  • 问题2:TensorRT报错"Failed to create engine"
    原因:模型输入尺寸和TensorRT配置不一致。解决方案:检查onnx模型的输入shape,确保和配置文件匹配。
  • 问题3:DeepStream启动后黑屏
    原因:显示环境变量没配好。解决方案:设置 export DISPLAY=:0,或者用 nvidia-smi 检查GPU状态。

📌 总结一下: 环境搭建的核心就四个字——版本对齐。CUDA、cuDNN、PyTorch、TensorRT、DeepStream,这五个东西的版本必须互相兼容。我建议你每次搭建环境前,先去NVIDIA官网查一下兼容性矩阵,或者直接照着我上面的表来配。

好了,环境搭好之后,下一章咱们就开始真正跑YOLO模型了。到时候你会觉得,前面这些折腾都是值得的。