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架构,装不上。
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。
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版本问题上整整三天,最后发现只是少配了一个环境变量。你想想看,多冤啊。
所以我的建议是:别急,一步步来,每一步都验证通过再往下走。这样虽然慢,但稳。嵌入式开发嘛,稳比快重要。