2、开发环境搭建:Jetson Nano与树莓派的系统烧录、初始配置、SSH远程连接、Python与CUDA环境验证

边缘计算AI开发与传统服务器端开发最大的差异在于:目标硬件资源受限、架构异构(ARM CPU + GPU/NPU)、部署环境多样。无论是NVIDIA Jetson Nano还是树莓派4B,其开发流程都遵循“系统烧录 → 初始配置 → 远程访问 → 运行环境验证”的固定路径。本章将围绕这两款主流边缘设备,从零开始搭建一套可复用的AI开发环境,重点解决SD卡烧录、系统初始化、SSH安全连接、Python虚拟环境以及CUDA/OpenCV等核心组件的验证问题。通过本章学习,你将获得一个经过验证的、可直接运行深度学习推理任务的开发基座。

边缘AI开发环境搭建双路径 Jetson Nano (ARM64 + GPU) ① 系统烧录 JetPack 4.6.1 (Ubuntu 18.04) → SD Card Image ② 初始配置 电源模式(5W/10W) · 扩展文件系统 · 时区/用户 ③ SSH远程连接 ssh jetson@<IP> · 密钥认证 · VNC图形化(可选) ④ Python环境 Python 3.6.9 · pip · virtualenv/conda ⑤ CUDA验证 nvcc -V · deviceQuery · PyTorch GPU测试 树莓派4B (ARM64 + VideoCore) ① 系统烧录 Raspberry Pi OS (64-bit) / Ubuntu Server 22.04 ② 初始配置 raspi-config · 内存分配(GPU 128MB) · 开启SSH ③ SSH远程连接 ssh pi@<IP> · 静态IP · 密钥登录 ④ Python环境 Python 3.9+ · pip3 · venv ⑤ 加速验证 OpenCV编译 · TensorFlow Lite · 无CUDA 对比 共同目标:可远程访问的Python AI推理环境

上图展示了本章的核心路径:Jetson Nano与树莓派虽然硬件架构不同,但环境搭建的逻辑高度一致。Jetson Nano拥有完整的CUDA GPU生态,适合运行PyTorch/TensorFlow等深度学习框架;树莓派则依赖CPU与VideoCore GPU(通常仅用于图形输出),更适合轻量级推理或作为传感器数据采集节点。下面我们将分模块详细展开。

2.1 系统烧录:从镜像到可启动SD卡

核心原理

系统烧录的本质是将操作系统镜像文件(.img)逐字节写入SD卡,并确保引导分区(boot)与根文件系统(rootfs)正确布局。Jetson Nano使用NVIDIA提供的JetPack SDK镜像,其内部已包含Linux内核、CUDA、cuDNN、TensorRT等预编译组件;树莓派则使用官方Raspberry Pi OS或Ubuntu Server镜像,内核与用户空间分离,GPU驱动以固件形式加载。

操作流程

  1. 准备工具:16GB以上SD卡(推荐32GB Class 10/A2)、读卡器、balenaEtcher(跨平台烧录工具)或dd命令(Linux/macOS)。
  2. 下载镜像:Jetson Nano选择“Jetson Nano Developer Kit SD Card Image”版本(JetPack 4.6.1);树莓派选择“Raspberry Pi OS with desktop”或“Ubuntu Server 22.04 LTS (64-bit)”。
  3. 烧录操作:打开balenaEtcher → 选择镜像 → 选择SD卡 → 点击Flash。烧录完成后,系统会自动弹出/卸载分区。
  4. 验证烧录:重新插入SD卡,检查分区是否包含boot(FAT32)和rootfs(ext4)两个分区。
⚠️ 风险提示:烧录会清空SD卡全部数据,务必提前备份。使用dd命令时,确认设备名(如/dev/sdb)避免误写系统盘。Jetson Nano的JetPack镜像较大(约6GB),烧录时间约10-15分钟,请勿中途拔出SD卡。

案例拆解:烧录失败排查

某学员使用64GB SD卡烧录Jetson Nano镜像后,上电无显示。排查过程:① 检查电源适配器(需5V/4A DC圆口供电,Micro USB供电不足);② 重新烧录并校验SHA256哈希值;③ 发现SD卡为假冒扩容卡(实际容量仅8GB),更换正品SanDisk Extreme Pro后正常启动。此案例说明,烧录环节的硬件质量与电源稳定性是首要排查点。

对比项Jetson Nano树莓派4B
推荐镜像JetPack 4.6.1Raspberry Pi OS (64-bit) / Ubuntu Server 22.04
最小SD卡容量16GB(建议32GB)8GB(建议16GB)
默认用户名nvidia / nvidia(首次启动强制修改)pi / raspberry(或安装时设置)
GPU驱动预装CUDA 10.2无CUDA,仅VideoCore IV
烧录工具balenaEtcher / ddRaspberry Pi Imager / balenaEtcher

2.2 初始配置:系统激活与基础优化

核心原理

初始配置的目标是让系统进入“可用且安全”的状态。Jetson Nano首次启动会进入Ubuntu初始化向导(设置语言、用户名、密码、WiFi);树莓派则通过raspi-config工具完成扩展文件系统、开启SSH、设置GPU内存等操作。关键优化点包括:电源模式切换(Jetson Nano支持5W/10W模式,影响CPU频率与GPU性能)、文件系统扩展(利用SD卡全部空间)、交换分区调整(缓解内存不足)。

操作流程

  • Jetson Nano:连接HDMI显示器与USB键鼠 → 上电 → 完成Ubuntu初始化 → 打开终端执行 sudo apt update && sudo apt upgrade → 使用 nvpmodel -m 0 切换到10W模式(性能优先)。
  • 树莓派:烧录镜像后,在SD卡boot分区创建空文件 ssh(开启SSH)和 wpa_supplicant.conf(配置WiFi)→ 上电 → 通过SSH连接后运行 sudo raspi-config → 选择“Advanced Options”扩展文件系统 → 设置GPU内存为128MB(用于OpenCV硬件加速)。
💡 经验提醒:Jetson Nano的10W模式需要5V/4A电源,若使用5V/2A电源会自动降为5W模式。树莓派4B建议使用官方USB-C 15W电源,避免电压不足导致CPU降频。

常见误区

误区一:跳过系统更新直接安装Python包,导致依赖冲突。误区二:Jetson Nano使用apt install python3-pip后,pip默认安装到系统环境,污染全局Python。正确做法是使用虚拟环境(见2.4节)。误区三:树莓派未扩展文件系统,导致根分区空间不足(仅剩几百MB),安装大型库时失败。

2.3 SSH远程连接:无头模式开发

核心原理

SSH(Secure Shell)通过加密通道提供远程命令行访问。边缘设备通常部署在无显示器环境,SSH成为最核心的开发入口。Jetson Nano与树莓派默认安装OpenSSH Server,但树莓派需手动开启(创建ssh文件或raspi-config)。为提高安全性,推荐使用密钥认证替代密码登录。

操作流程

  1. 获取IP地址:在路由器管理界面查看设备IP,或使用 nmap -sn 192.168.1.0/24 扫描局域网。
  2. 首次连接:ssh nvidia@192.168.1.100(Jetson)或 ssh pi@192.168.1.101(树莓派),输入密码。
  3. 配置密钥认证:在本地电脑生成密钥 ssh-keygen -t ed25519 → 复制公钥 ssh-copy-id nvidia@192.168.1.100 → 之后免密登录。
  4. 固定IP:编辑 /etc/dhcpcd.conf(树莓派)或通过Netplan(Jetson)设置静态IP,避免DHCP分配变化。
🔧 排障案例:SSH连接超时。检查步骤:① ping设备IP确认网络连通;② 确认SSH服务已启动(systemctl status ssh);③ 检查防火墙(sudo ufw status);④ 若使用WiFi,确认信号强度(iwconfig)。最终发现是路由器AP隔离功能阻止了设备间通信,关闭后解决。
配置项Jetson Nano树莓派
SSH服务默认开启需手动开启
默认端口2222
密钥算法RSA/Ed25519RSA/Ed25519
图形化远程VNC(需安装vino)VNC(raspi-config开启)

2.4 Python与CUDA环境验证

核心原理

Python是边缘AI开发的主要语言。Jetson Nano预装Python 3.6.9,且JetPack已集成CUDA 10.2、cuDNN 8.2、TensorRT 8.2,但需手动配置环境变量。树莓派则需自行安装Python 3.9+及OpenCV等库。验证CUDA环境的核心是确认nvcc编译器可用、GPU设备能被PyTorch识别、以及矩阵运算能调用GPU加速。

操作流程

  1. Python虚拟环境:python3 -m venv ~/venv/ai → source ~/venv/ai/bin/activate → pip install --upgrade pip。
  2. Jetson CUDA验证:nvcc -V 查看版本 → cd /usr/local/cuda/samples/1_Utilities/deviceQuery && sudo make && ./deviceQuery 查看GPU信息。
  3. PyTorch GPU测试:python -c "import torch; print(torch.cuda.is_available()); print(torch.cuda.get_device_name(0))",输出True和“NVIDIA Tegra X1”即成功。
  4. 树莓派加速验证:安装OpenCV pip install opencv-python → 测试 python -c "import cv2; print(cv2.getBuildInformation())" 查看是否启用NEON/VFPV3优化。
⚠️ 版本兼容性:Jetson Nano的JetPack 4.6.1仅支持Python 3.6,安装PyTorch需使用NVIDIA预编译的wheel包(pip install torch==1.10.0),不可直接使用PyPI官方包。树莓派安装TensorFlow需选择tensorflow-cpu或使用tflite-runtime。

案例拆解:PyTorch GPU验证失败

某项目在Jetson Nano上运行 torch.cuda.is_available() 返回False。分析:① 检查 nvcc -V 正常,说明CUDA工具链存在;② 检查PyTorch版本,发现误装了x86_64架构的wheel包;③ 卸载后重新安装 torch-1.10.0-cp36-cp36m-linux_aarch64.whl,问题解决。此案例强调:ARM64架构必须匹配对应wheel包,且Python版本(cp36)需严格对应。

验证项命令预期结果
CUDA编译器nvcc -VCuda compilation tools, release 10.2
GPU设备./deviceQueryDetected 1 CUDA Capable device(s)
PyTorch GPUtorch.cuda.is_available()True
OpenCV版本cv2.__version__4.5.5(Jetson) / 4.6.0(树莓派)

总结复盘

环境搭建的核心教训是:先验证硬件,再配置软件;先跑通最小示例,再扩展功能。Jetson Nano的CUDA环境虽然预装,但环境变量(export PATH=/usr/local/cuda/bin:$PATH)和库路径(export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH)需写入~/.bashrc。树莓派虽然没有CUDA,但通过优化编译参数(-O3 -march=armv8-a+simd)可提升CPU推理性能。建议读者在完成本章后,创建一个“环境验证脚本”(check_env.sh),将上述验证命令整合,便于后续快速诊断。