公司动态
Jetson Nano从零配置指南:避坑、优化与AI环境搭建
1. 为什么你的Jetson Nano需要一次“干净”的配置如果你刚拿到一块Jetson Nano开发板或者因为之前的系统被各种实验搞得一团糟准备从头再来那么“从零开始”这四个字可能比你想象的要复杂一点。这不是简单的“烧录镜像、开机、完事”。Jetson Nano作为一款边缘AI计算设备其软件栈深度绑定于NVIDIA的JetPack SDK从系统内核、驱动到CUDA、cuDNN、TensorRT等AI计算库是一个高度定制化的生态。一个“干净”且“正确”的基础配置是后续所有开发、部署工作稳定性的基石。我见过太多新手包括几年前的我自己在第一步就踩坑烧录了不匹配的镜像导致无法启动系统源没换apt update慢如蜗牛还经常失败Python环境混乱pip和apt安装的包冲突甚至因为没做基础优化连摄像头都打不开。这些问题都会在后续开发中集中爆发让你在调试模型性能时还要分心去解决本该在第一天就搞定的事情。所以这篇内容的目的就是充当你的“装机清单”和“避坑指南”。我会带你走一遍从物理组装、系统烧录到基础环境配置、性能优化的完整流程。这不是官方文档的复述而是结合了我多次重装、为团队部署多台设备后总结出的最稳妥、最高效的路径。我们目标明确搭建一个稳定、高效、随时可以投入生产的Jetson Nano基础系统。2. 启程前的核心准备镜像、工具与硬件确认在动手之前有三样东西必须准备好这能避免你做到一半才发现缺东少西的尴尬。2.1 镜像选择JetPack版本是灵魂Jetson Nano的系统镜像不是普通的Ubuntu而是NVIDIA官方基于Ubuntu 18.04或20.04定制的并打包了对应版本的JetPack。JetPack是一个SDK包含了操作系统、CUDA、cuDNN、TensorRT、VisionWorks等一堆东西。如何选择访问NVIDIA官方Jetson下载中心。对于Jetson Nano主流且稳定的版本是JetPack 4.6基于Ubuntu 18.04和更新的JetPack 5.x系列基于Ubuntu 20.04。我的建议是除非你的项目依赖明确要求JetPack 5.x的特性如对更新的CUDA、TensorRT版本有硬性需求否则优先选择JetPack 4.6.1。原因很简单4.6版本经过长时间考验社区资料、解决方案最丰富兼容性最好。很多经典的AI模型和项目教程都是基于这个环境写的踩坑的概率最低。下载什么你会下载到一个扩展名为.img的系统镜像文件大小在6GB左右。请确保下载完整并核对MD5或SHA256校验值。2.2 烧录工具SD卡是唯一推荐Jetson Nano的官方系统载体是Micro SD卡。虽然有人尝试用USB SSD启动以获得更好性能但对于“从零开始”和绝大多数应用场景一张高速的SD卡是最简单可靠的选择。SD卡选型这是影响系统流畅度的关键硬件之一。最低要求Class 10强烈推荐UHS-I U3 / V30及以上规格的卡容量建议32GB起步64GB或128GB更从容。品牌上SanDisk Extreme或Samsung EVO Plus系列是经过验证的可靠选择。一张慢速卡会让系统操作、软件安装、编译过程变得极其痛苦。烧录软件在Windows/Mac/Linux上都使用balenaEtcher。它免费、开源、操作极其简单选择镜像、选择SD卡驱动器、点击烧录且能自动校验比老牌的dd命令或Win32DiskImager对新手更友好。务必以管理员/root权限运行。2.3 硬件连接与首次上电烧录好SD卡后将其插入Jetson Nano的卡槽。接下来是硬件连接供电Jetson Nano有两种供电模式通过一个跳帽J48选择。Micro-USB供电5V 2A仅适用于轻负载比如只跑命令行。一旦启动图形界面或运行AI程序很可能因供电不足导致系统不稳定、重启。不推荐作为主力供电方式。桶形接口供电5V 4A这是标准且推荐的方式。你需要一个5V/4A的DC电源适配器接口规格是5.5mm x 2.1mm。供电不足是Jetson Nano最常见的问题之一务必使用足额功率的电源。跳帽设置确保J48跳帽连接在引脚2和3上即选择桶形供电模式。如果你使用载板如官方开发者套件载板这个跳帽通常已经接好。外设连接首次启动建议连接HDMI显示器、USB键盘和鼠标。网络连接可以通过板载的千兆以太网口或者配置Wi-Fi如果需要需准备兼容的USB无线网卡如官方推荐的ASUS USB-AC53 Nano。上电连接好所有外设后最后插入电源。你会看到绿色电源指示灯亮起系统开始启动。注意首次启动会进行文件系统扩展这个过程需要几分钟屏幕上会有提示请耐心等待不要断电。3. 首次启动后的系统初始化与基础设置当你第一次看到Ubuntu的登录界面时JetPack 4.6是Ubuntu 18.04的GNOME桌面恭喜你最基础的一步成功了。但接下来的设置才是让这台设备“好用”的关键。3.1 完成系统向导与用户创建按照屏幕提示完成语言、时区、键盘布局的设置并创建一个非root的普通用户例如jetson。记住你设置的用户名和密码。3.2 至关重要的第一步更换系统软件源默认的软件源服务器在国外apt update和apt install的速度会非常慢甚至经常超时失败。更换为国内镜像源是必须操作。备份原始源列表sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup编辑源列表文件。这里以清华大学源为例适用于Ubuntu 18.04sudo nano /etc/apt/sources.list将文件内容全部删除替换为以下内容deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic main multiverse restricted universe deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-security main multiverse restricted universe deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-updates main multiverse restricted universe deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-backports main multiverse restricted universebionic对应 Ubuntu 18.04 的代号。注意URL中是ubuntu-ports这是为ARM架构准备的源普通PC的ubuntu源不适用。保存并退出在nano中按CtrlX 然后按Y 最后按Enter。同样也需要更新CUDA的源如果存在。通常JetPack镜像的CUDA源也需要替换。查找并编辑/etc/apt/sources.list.d目录下与nvidia或cuda相关的.list文件将其中的developer.download.nvidia.com替换为国内镜像例如中科大的镜像mirrors.ustc.edu.cn/...。具体镜像地址请查阅对应镜像站的帮助页面。更新软件包列表sudo apt update如果速度飞快没有报错说明换源成功。3.3 系统更新与基础工具安装在换源成功后进行一次完整的系统升级并安装一些后续开发必备的工具。# 更新软件包列表刚才已做可再做一次 sudo apt update # 升级所有已安装的包到最新版本这是一个较长的过程 sudo apt full-upgrade -y # 安装一些基础工具 sudo apt install -y curl wget git vim htop net-tools screen tree # curl/wget: 网络下载工具 # git: 版本控制必备 # vim: 文本编辑器可根据喜好换nano # htop: 交互式进程查看器比top更好用 # net-tools: 包含ifconfig等网络工具 # screen: 会话管理防止远程连接断开导致任务终止 # tree: 以树状图列出目录内容完成升级后可以重启一下系统sudo reboot。4. 核心开发环境配置Python、虚拟环境与包管理Jetson Nano的系统中预装了Python 2.7和Python 3.6JetPack 4.6。我们的所有工作都应该基于Python 3。直接使用系统的python3和pip3安装包很容易导致依赖冲突甚至破坏系统关键组件。因此使用虚拟环境是绝对最佳实践。4.1 安装并配置Python虚拟环境工具我们使用venv模块它是Python 3.3自带的轻量且无需额外安装但需要安装对应的包。# 确保python3-venv包已安装 sudo apt install -y python3-pip python3-venv4.2 创建并激活专属的虚拟环境我习惯在用户主目录下创建一个venvs文件夹来集中管理所有虚拟环境。# 创建存放虚拟环境的目录 mkdir -p ~/venvs # 为你的AI项目创建一个虚拟环境例如叫 nano python3 -m venv ~/venvs/nano激活虚拟环境是使用它的关键一步。激活后你的终端提示符通常会发生变化前面会显示环境名如(nano)。# 激活虚拟环境 source ~/venvs/nano/bin/activate激活后你输入的python和pip命令将指向虚拟环境内的版本与系统全局环境完全隔离。为了方便可以将激活命令写入~/.bashrc文件这样每次打开终端自动激活但有时你可能需要切换环境所以这一步可选。echo “source ~/venvs/nano/bin/activate” ~/.bashrc # 然后执行 source ~/.bashrc 立即生效或者新开一个终端4.3 配置pip国内镜像源在虚拟环境中pip安装包同样需要换源以加速。# 确保已激活虚拟环境 # 创建pip配置目录和文件 mkdir -p ~/.pip nano ~/.pip/pip.conf在pip.conf文件中输入以下内容以阿里云镜像为例[global] index-url https://mirrors.aliyun.com/pypi/simple/ trusted-host mirrors.aliyun.com保存退出。现在在虚拟环境内使用pip install速度会快很多。4.4 安装基础的Python科学计算与AI包在虚拟环境中安装一些最基础的包。注意像numpy,scipy这类涉及数值计算的包在ARM架构上从源码编译非常耗时可能几个小时。幸运的是有社区维护的预编译轮子wheels。首先升级pip和setuptoolspip install --upgrade pip setuptools安装预编译的NumPy等包搜索 “jetson nano python wheels” 可以找到例如jetson-stats社区提供的资源。一个常用的来源是Qengineering的GitHub页面他们为Jetson系列提供了很多预编译包。你可以直接下载对应的.whl文件然后用pip安装。更简单的方法是先尝试安装一个轻量级的OpenCV如果不需要全部功能它通常会带一个兼容的numpy。# 安装一个基础版本的OpenCV不包含GUI和高阶模块但核心功能在 sudo apt install -y python3-opencv # 检查是否安装了numpy python -c “import numpy; print(numpy.__version__)”如果系统apt安装的opencv带来了numpy那么虚拟环境里可能已经可用。为了环境纯净我们更希望所有包都在虚拟环境内。一个折中方案是先利用系统包后续如果遇到版本问题再寻找预编译轮子。安装AI框架TensorFlow和PyTorch都有为Jetson NanoARM64架构预编译的版本。切勿直接使用pip install tensorflow或pip install torch这会导致从源码编译几乎必然失败。TensorFlow:NVIDIA官方在JetPack中提供了TensorFlow。通常可以通过apt安装sudo apt install -y libhdf5-serial-dev hdf5-tools libhdf5-dev zlib1g-dev zip libjpeg8-dev liblapack-dev libblas-dev gfortran sudo apt install -y python3-pip sudo pip3 install -U pip testresources setuptools # 以下是JetPack 4.6对应的TensorFlow 1.x版本如需2.x请查阅NVIDIA官方文档 sudo pip3 install -U numpy1.19.4 future0.18.2 mock3.0.5 h5py2.10.0 keras_preprocessing1.1.2 keras_applications1.0.8 enum34 futures3.1.1 protobuf pybind11 sudo pip3 install --pre --extra-index-url https://developer.download.nvidia.com/compute/redist/jp/v46 ‘tensorflow2’请注意官方提供的通常是TensorFlow 1.x。对于TensorFlow 2.x你需要找到对应JetPack版本的预编译轮子或者使用NVIDIA提供的TensorFlow容器。PyTorch:PyTorch为Jetson提供了官方预编译版本。访问PyTorch for Jetson的官方GitHub页面找到与你JetPack版本如torch-1.10.0-cp36-cp36m-linux_aarch64.whl对应JetPack 4.6 Python 3.6匹配的wheel文件下载后用pip安装。# 示例命令具体文件名和URL请查阅最新官方文档 wget https://nvidia.box.com/shared/static/xxx...xxx/torch-1.10.0-cp36-cp36m-linux_aarch64.whl pip install torch-1.10.0-cp36-cp36m-linux_aarch64.whl安装完torch后通常需要单独安装torchvision同样需要找对应版本的预编译轮子。这个过程可能是整个配置中最繁琐的一环需要耐心和仔细核对版本。核心原则绝不从源码编译只安装针对Jetson ARM64架构的预编译包。5. 性能优化与系统调优实战Jetson Nano的算力和内存有限默认设置可能无法发挥其最佳性能甚至影响稳定性。以下几项调优是“必选项”。5.1 交换空间Swap扩展Nano只有4GB内存或2GB版本运行稍大的模型就容易内存不足OOM。增加交换空间相当于在SD卡上划出一部分作为虚拟内存。查看现有交换空间free -h禁用现有交换文件如果有sudo swapoff /swapfile删除旧文件如果有sudo rm /swapfile创建新的交换文件建议4GB-8GB# 创建8GB的交换文件count8192 单位是MB块 sudo dd if/dev/zero of/swapfile bs1M count8192 # 设置正确的权限 sudo chmod 600 /swapfile # 将其格式化为交换文件 sudo mkswap /swapfile # 启用交换文件 sudo swapon /swapfile让系统启动时自动挂载交换文件sudo sh -c ‘echo “/swapfile swap swap defaults 0 0” /etc/fstab’再次使用free -h确认交换空间已生效。注意交换文件在SD卡上频繁读写会影响SD卡寿命和系统响应速度。这是用寿命换容量的权衡。对于长期高负载任务建议优化模型或考虑使用带eMMC的版本。5.2 电源模式设置最大化CPU性能Jetson Nano有两种电源模式通过nvpmodel工具管理模式0 (MAX-N):4个CPU核心全部以最大频率1.43 GHz运行功耗约10W。这是性能模式。模式1 (5W):仅2个CPU核心在线频率受限功耗约5W。这是省电模式。对于开发和学习强烈建议设置为模式0以获得完整的计算能力。# 查看当前模式 sudo nvpmodel -q # 切换到最大性能模式模式0 sudo nvpmodel -m 0 # 同时需要设置风扇策略如果是有源散热风扇为“主动”冷却以应对更高的发热 sudo jetson_clocksjetson_clocks脚本会锁定CPU和GPU到最高频率并设置主动冷却。你可以将其加入开机启动脚本。5.3 禁用图形界面以释放资源可选但推荐如果你主要通过SSH远程访问Nano或者运行无界面的AI服务那么禁用桌面图形环境GUI可以节省出可观的内存和CPU资源给计算任务。# 禁用图形界面切换到多用户文本模式 sudo systemctl set-default multi-user.target # 如果想重新启用图形界面 # sudo systemctl set-default graphical.target执行禁用命令后重启生效。重启后你将进入命令行登录界面。这对于部署在角落做推理服务的Nano非常有用。5.4 安装系统监控工具jetson-stats这是一个社区开发的非常棒的工具包叫jetson-stats它提供了jtop这个神器。# 安装 sudo -H pip install jetson-stats # 重启后或运行 sudo systemctl restart jetson_stats.service安装后在终端输入jtop你会得到一个类似htop但专为Jetson设计的监控界面可以实时查看CPU/GPU/内存使用率、频率、温度、功耗以及所有JetPack组件的版本信息。这是调试和性能分析的必备工具。6. 外设与IO配置让Nano“看得见连得上”基础系统跑起来了现在让它能连接摄像头和网络。6.1 CSI摄像头配置Jetson Nano有专门的CSI接口连接树莓派式摄像头如Raspberry Pi Camera Module V2。使用前需要启用。硬件连接确保摄像头排线金手指面向散热器方向插入CSI接口并锁紧卡扣。启用摄像头支持# 检查摄像头是否被识别在连接摄像头并开机后执行 ls /dev/video* # 你应该能看到 /dev/video0 等设备测试摄像头使用nvgstcapture工具进行快速测试。# 预览摄像头画面按 ‘q’ 退出 nvgstcapture-1.0 --orientation2 # 拍摄一张照片 nvgstcapture-1.0 --orientation2 --automate --capture-auto如果能看到预览画面说明摄像头驱动工作正常。对于更复杂的应用你可以使用OpenCV的GStreamer后端或jetson-utils库来捕获CSI摄像头数据。6.2 USB摄像头测试USB摄像头即插即用的情况较多。使用v4l2-ctl工具检查。# 列出所有视频设备 v4l2-ctl --list-devices # 查看某个设备如video1的详细信息 v4l2-ctl -d /dev/video1 --all在Python中可以使用OpenCV的cv2.VideoCapture(0)或cv2.VideoCapture(1)来尝试打开不同的设备索引。6.3 配置Wi-Fi如果需要如果你使用的是官方推荐的ASUS USB-AC53 Nano等兼容网卡通常驱动已内置。通过图形界面如果GUI启用连接Wi-Fi是最简单的。在命令行下可以使用nmcli或nmtui工具。# 启动文本用户界面的网络管理器 sudo nmtui在界面中选择“Activate a connection”找到你的Wi-Fi SSID输入密码连接即可。7. 验证与收尾运行你的第一个AI示例配置的最后让我们用一个简单的例子验证整个环境是否工作正常。我们使用一个轻量级的、无需训练直接推理的示例。7.1 使用TensorRT运行一个预训练模型NVIDIA在JetPack中提供了许多示例。我们找一个图像分类的例子。# 进入示例目录路径可能因JetPack版本略有不同 cd /usr/src/tensorrt/samples/sampleMNIST # 编译示例这需要一些时间 sudo make # 运行示例这个例子是手写数字识别需要下载数据集会自动进行 cd ../../bin/ ./sample_mnist如果编译和运行成功你会看到一系列日志最后显示分类结果和推理时间。这表明你的CUDA、TensorRT环境基本正常。7.2 一个简单的OpenCV摄像头测试脚本在虚拟环境中确保安装了opencv-python-headless无GUI的OpenCV更轻量。pip install opencv-python-headless创建一个Python脚本test_camera.pyimport cv2 import sys # 尝试打开摄像头0通常是CSI或第一个USB摄像头 cap cv2.VideoCapture(0) if not cap.isOpened(): print(“无法打开摄像头”) sys.exit() print(“摄像头已打开按 ‘q’ 键退出预览”) while True: ret, frame cap.read() if not ret: print(“无法获取帧”) break # 在窗口中显示图像 cv2.imshow(‘Camera Test’, frame) # 按下 ‘q’ 键退出循环 if cv2.waitKey(1) 0xFF ord(‘q’): break # 释放摄像头并关闭所有窗口 cap.release() cv2.destroyAllWindows() print(“测试完成”)运行这个脚本python test_camera.py。如果能看到摄像头画面说明你的摄像头和Python OpenCV环境工作正常。走到这一步你的Jetson Nano已经从一个裸板变成了一个具备完整AI开发能力、经过基础优化的稳定平台。这个过程里最深的体会是在嵌入式AI开发中“配环境”本身就是一项核心技能。它要求你对硬件特性、系统依赖、软件版本有清晰的认知。很多问题比如包装不上、性能差的根源往往都能追溯到最初配置时某个被忽略的细节。把这份“装机清单”保存好下次重装时你会感谢现在耐心走完全程的自己。接下来你就可以放心地在这个坚实的基础上去构建和部署你的AI应用了。