3. 开发环境搭建:JetPack SDK安装、CUDA/cuDNN配置、交叉编译工具链、Python环境与PyTorch/TensorFlow安装
好,咱们直接进入正题。嵌入式GPU开发,环境搭建是第一步,也是最容易踩坑的一步。我见过太多人花了一周时间装环境,结果发现版本不匹配,最后全部重来。今天我就把这几年的经验掰开揉碎讲给你听。
3.1 JetPack SDK安装——别小看这一步
JetPack SDK是NVIDIA为嵌入式平台准备的“全家桶”。它包含了Linux系统、CUDA、cuDNN、TensorRT等所有你需要的东西。说白了,装好它,你就有了一个完整的开发环境。
安装方式有两种:
- SDK Manager图形化安装:适合新手,点点鼠标就行
- 命令行安装:适合批量部署,我更喜欢这种方式
我个人习惯用SDK Manager,因为它会自动处理依赖关系。但要注意一点——网络一定要稳定。我曾经在客户现场用4G网络下载,结果下了三次都中断了,最后只能回公司提前下载好离线包。
安装步骤:
- 下载SDK Manager并安装到你的Ubuntu主机上
- 用Micro-USB线连接Jetson设备到主机,并给设备供电
- 让设备进入恢复模式(按住RECOVERY键再按RESET键)
- 在SDK Manager中选择目标硬件和JetPack版本
- 点击安装,等待约30-60分钟
嗯,这里要注意:安装过程中会提示你设置用户名和密码。我建议统一用nvidia作为用户名,方便后续脚本自动化操作。
3.2 CUDA/cuDNN配置——版本匹配是王道
JetPack安装完成后,CUDA和cuDNN其实已经预装了。但很多人会问:“为什么我nvcc -V显示找不到命令?”
原因很简单——环境变量没配好。JetPack默认把CUDA装在/usr/local/cuda目录下,但不会自动加到PATH里。
配置方法:
# 打开bashrc文件
vim ~/.bashrc
# 在文件末尾添加以下内容
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
export CUDA_HOME=/usr/local/cuda
# 使配置生效
source ~/.bashrc
# 验证安装
nvcc -V
至于cuDNN,它其实是一堆库文件。JetPack已经帮你装好了,你只需要确认版本就行:
# 查看cuDNN版本
cat /usr/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
3.3 交叉编译工具链——PC上编译,板子上跑
交叉编译,说白了就是在你的PC上编译代码,然后放到Jetson上运行。为什么要这么做?因为Jetson的算力有限,直接在板子上编译大型项目(比如OpenCV)可能要等几个小时。
安装交叉编译工具链:
# 在Ubuntu主机上安装aarch64交叉编译器
sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
# 验证安装
aarch64-linux-gnu-gcc --version
你想想看,有了这个工具链,你就可以在PC上编译C/C++代码,然后通过scp传到Jetson上运行。我一般会写个Makefile,里面指定交叉编译器:
# Makefile示例
CC = aarch64-linux-gnu-gcc
CFLAGS = -O2 -march=armv8-a
all: my_program
my_program: main.c
$(CC) $(CFLAGS) -o $@ $^
clean:
rm -f my_program
3.4 Python环境与PyTorch/TensorFlow安装
终于到了大家最关心的部分。嵌入式GPU上跑深度学习,Python是首选语言。但要注意——不要直接用pip安装PyTorch!
为什么?因为官方PyTorch的ARM版本对Jetson的支持并不好。NVIDIA专门为Jetson编译了优化过的PyTorch,叫做torch和torchvision的JetPack定制版。
安装步骤:
# 1. 安装pip和依赖
sudo apt-get update
sudo apt-get install python3-pip libopenblas-base libopenmpi-dev
# 2. 安装PyTorch(以JetPack 4.6为例)
# 从NVIDIA官网下载对应的whl文件
wget https://developer.download.nvidia.com/compute/redist/jp/v46/pytorch/torch-1.10.0-cp36-cp36m-linux_aarch64.whl
pip3 install torch-1.10.0-cp36-cp36m-linux_aarch64.whl
# 3. 安装torchvision
sudo apt-get install libjpeg-dev zlib1g-dev
git clone --branch v0.11.0 https://github.com/pytorch/vision torchvision
cd torchvision
python3 setup.py install
# 4. 验证安装
python3 -c "import torch; print(torch.__version__); print(torch.cuda.is_available())"
至于TensorFlow,NVIDIA也提供了预编译的pip包:
# 安装TensorFlow
pip3 install --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v46 tensorflow==2.7.0+nv22.1
pip3 install tensorflow,结果装了一个CPU版本的TensorFlow,跑模型慢得离谱。后来才发现,必须加上--extra-index-url参数才能安装GPU加速版本。
Python环境管理建议:
- 使用
virtualenv或conda创建独立环境 - 每个项目一个环境,避免依赖冲突
- 把常用的库(numpy, matplotlib, opencv-python)提前装好
我个人习惯用virtualenv,因为它轻量,不占太多空间。Jetson的存储本来就有限,能省则省。
3.5 环境验证——跑个Hello World
环境装好了,怎么确认一切正常?我一般会跑一个简单的PyTorch程序:
import torch
import torch.nn as nn
# 创建一个简单的模型
model = nn.Linear(10, 5)
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model.to(device)
# 创建输入数据
x = torch.randn(1, 10).to(device)
# 前向传播
output = model(x)
print(f"Output: {output}")
print(f"Device: {device}")
# 检查GPU利用率
print(f"CUDA available: {torch.cuda.is_available()}")
print(f"GPU count: {torch.cuda.device_count()}")
print(f"GPU name: {torch.cuda.get_device_name(0)}")
如果输出显示CUDA available: True,并且能看到Jetson的GPU名称(比如NVIDIA Tegra X2),那就说明环境搭建成功了。
nvidia-smi命令可以实时查看GPU使用情况。不过Jetson上的nvidia-smi和桌面版不太一样,它显示的是tegrastats的信息。你可以用sudo tegrastats查看更详细的硬件状态。
好了,环境搭建这部分就到这里。说实话,第一次搭建确实有点繁琐,但只要你按照这个流程走,基本不会出大问题。下一章我们会开始真正的模型部署实战,到时候你会感谢今天认真搭环境的自己。