3、CUDA开发环境搭建:在Jetson上安装CUDA Toolkit、配置cuDNN、验证安装、常见坑点

说实话,很多朋友拿到Jetson开发板后,第一件事就是急着跑模型。结果呢?环境没配好,各种报错,一折腾就是半天。我当年第一次玩Jetson TX2时也踩过不少坑,今天就把这些经验掰开揉碎了讲给你听。

3.1 先搞清楚你的Jetson预装了啥

Jetson系列和普通PC不一样。NVIDIA官方其实已经在JetPack里帮你装好了CUDA和cuDNN。但问题是——很多人不知道这事,或者装错了版本。

我个人习惯,拿到新板子后第一件事就是跑这个命令:

# 查看系统版本
cat /etc/nv_tegra_release

# 查看CUDA版本
nvcc --version

# 查看cuDNN版本
dpkg -l | grep cudnn

你会发现,大部分Jetson设备出厂时已经带了CUDA 10.2或11.4。嗯,这里要注意:千万别手贱去NVIDIA官网下载x86版本的CUDA安装包,那是给PC用的,Jetson是ARM架构,装不上。

⚠️ 常见坑点: 我曾经见过有人把PC版CUDA硬拷到Jetson上,然后跑./cuda-install.run,结果报错“unsupported platform”。白折腾两小时。记住,Jetson只能用JetPack或apt安装的CUDA。

3.2 安装CUDA Toolkit的正确姿势

如果你用的是官方JetPack刷的系统,CUDA其实已经在了。但有时候环境变量没配好,nvcc找不到。我建议你手动配一下:

# 编辑.bashrc
vim ~/.bashrc

# 在文件末尾添加(以CUDA 11.4为例)
export PATH=/usr/local/cuda-11.4/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.4/lib64:$LD_LIBRARY_PATH

# 生效
source ~/.bashrc

如果你需要从零安装,那就用apt:

# 先更新源
sudo apt update

# 安装CUDA Toolkit(以JetPack 5.0为例)
sudo apt install nvidia-cuda-toolkit

# 验证
nvcc --version

你想想看,用apt装多省事。但有个问题——apt源里的CUDA版本可能不是最新的。比如JetPack 5.0默认带的是CUDA 11.4,但你想用11.8怎么办?

这时候就得用SDK Manager了。我个人建议:能用JetPack刷机就别手动装,版本匹配最省心。

3.3 配置cuDNN:别被版本号搞晕

cuDNN的安装其实更简单。Jetson上cuDNN通常已经预装了,但路径比较隐蔽。我习惯这样确认:

# 查看cuDNN头文件
cat /usr/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

# 或者
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

输出大概长这样:

#define CUDNN_MAJOR 8
#define CUDNN_MINOR 6
#define CUDNN_PATCHLEVEL 0

这就说明cuDNN 8.6.0已经装好了。如果你需要升级,记住一个原则:cuDNN版本必须和CUDA版本匹配。比如CUDA 11.4对应cuDNN 8.2~8.4,CUDA 11.8对应cuDNN 8.6~8.9。

💡 小技巧: 我在项目中遇到过cuDNN版本不匹配导致TensorRT推理速度慢一半的情况。后来发现是cuDNN 8.0配了CUDA 11.4,升级到cuDNN 8.2后速度直接翻倍。所以别小看版本匹配这事。

3.4 验证安装:跑个例子最实在

环境配好没,跑个demo就知道了。我一般用NVIDIA官方提供的sample:

# 进入CUDA samples目录
cd /usr/local/cuda/samples/1_Utilities/deviceQuery

# 编译
sudo make

# 运行
./deviceQuery

如果看到类似这样的输出,说明CUDA没问题:

Detected 1 CUDA Capable device(s)
Device 0: "NVIDIA Jetson Xavier NX"
  CUDA Capability Major/Minor version number:    7.2
  Total amount of global memory:                 7856 MBytes

再测一下cuDNN:

# 进入cuDNN samples目录(如果没有就自己下载)
cd /usr/src/cudnn_samples_v8/mnistCUDNN

# 编译
make

# 运行
./mnistCUDNN

跑通了会显示“Test passed!”。嗯,看到这个就放心了。

3.5 常见坑点大汇总

我这些年帮人调试Jetson环境,总结出几个高频问题,你记一下:

坑点 现象 解决方案
nvcc找不到 运行nvcc --version报错command not found 检查PATH环境变量,确认/usr/local/cuda/bin在路径中
cuDNN版本不匹配 编译时提示cudnn版本错误 用dpkg -l | grep cudnn查看已装版本,然后apt安装对应版本
权限不足 运行sample时提示Permission denied 用sudo make编译,或者chmod给执行权限
磁盘空间不足 安装JetPack时提示空间不够 Jetson的eMMC通常只有16GB或32GB,建议用SD卡或SSD扩展
CUDA版本太老 跑新模型时提示compute capability不支持 升级JetPack版本,或者用Docker拉取新环境

🔑 核心总结:

  • Jetson是ARM架构,别用PC版CUDA安装包
  • 能用JetPack刷机就别手动装,版本匹配最省心
  • 环境变量一定要配好,否则nvcc找不到
  • cuDNN版本必须和CUDA版本严格匹配
  • 跑deviceQuery和mnistCUDNN验证最靠谱

说实话,环境搭建这事,第一次搞确实有点烦。但只要你按这个流程走一遍,后面就顺了。我曾经帮一个学员远程调试,他卡在cuDNN版本问题上整整三天,最后发现只是少配了一个环境变量。你想想看,多冤啊。

所以我的建议是:别急,一步步来,每一步都验证通过再往下走。这样虽然慢,但稳。嵌入式开发嘛,稳比快重要。