Jetson Orin nano开发板部署视觉相关模型
本文详细介绍了在Jetson Nano开发板上部署水下图像处理模型的全过程。主要内容包括:1. 环境配置,重点讲解了JetPack组件的安装与作用;2. 系统优化,包括更换软件源、设置CUDA环境变量;3. 开发工具安装,如中文输入法、PyCharm、NoMachine远程控制等;4. 使用Archiconda创建虚拟环境的方法;5. 解决常见问题,特别是libcudnn.so.8报错的解决方案;
目录
(5) 下载Nomachine远程控制 jetson nano开发板 (用于上传模型)
(4) 解决新版Jetson nano开发板 libcudnn.so.8的报错问题
1.前言
这篇文章主体内容为向 jetson nano开发板部署我们老师的水下图像处理模型的方法 。该笔记为自己成功实现后整理的笔记 方法仅供参考 在此向各开源作者和文章作者表示感谢。
首先,大家需要提前了解自己要部署的模型所需要的最低运行内存,最好确保Orin nano 为8 GB 而非4GB 要不然会有类似于我在部署模型时遇到的:
RuntimeError: GET was unable to find an engine to execute this computation cuDNN error: CUDNN_STATUS_EXECUTION_FAILED 报错
因为运行内存不足 内核会直接杀死进程导致模型某些部分无法继续执行。这个可以观察后台进程来看到。
2.配置Jetson nano的环境


(1)下载 JetPack组件的原因
sudo apt update
sudo apt install nvidia-jetpack
首先先了解为什么要下载JetPack组件。JetPack 不是一个单独的软件,而是 NVIDIA 专门为 Jetson 系列嵌入式平台打包的完整开发环境。
如果你只装了普通的 Ubuntu 系统,Jetson Nano 就只是一台 ARM 小电脑,GPU 形同虚设。
要让它能跑深度学习模型、做 TensorRT 加速,就必须安装 JetPack 提供的环境。
安装好 JetPack 后,你才能:
-
在 Nano 上直接
import torch用 GPU 训练 / 推理 -
把 YOLO、ResNet 等模型转换为 TensorRT 引擎
-
使用 CUDA 加速的 OpenCV 做图像处理
-
利用 Nano 的硬件视频编解码跑摄像头、视频流任务
(2) JetPack 的主要组成
- (1) jetson Linux:NVIDIA jetson Linux提供 Linux Kernel、基于UEFI的引导加载程序、基于Ubuntu20.04的根文件系统、NVIDIA 驱动程序、必要的固件、工具链等。
- (2) TensorRT:TensorRT 是用于图像分类、分割和对象检测神经网络的高能深度学习推理运行时。TenSOrRT基于VIDIA的并行编程模CUDA 构建,使您能够优化所有深度学习框架的推理。它包括深度学习推理优化器和运行时,可为深度学习推理应用程序提供低延;和高吞吐量。
- (3) CUDA:CUDA深度神经网络库为深度学习框架提供高性能框架。它为标准例程(如前向和后向卷积、池化、规范化和激活层)提供了高度调优的实现。
- (4) CuDNN:CUDA工具包为构建GPU加速应用程序的C和C++开发人员提供了一个全面的开发环境。该工具包包括用于NVIDIAGPU的编译器、数学库以及用于调试和优化应用程序性能的工具。
- (5)Multimedia API:jetson 多媒体API 包为灵活的应用程序开发提供了低级API。相机应用程序API:1ibargus为相机应用程序提供了一个低级帧同步API,具有每帧相机参数控制,多个(包括同步)相机支持和EGL流输出。需要ISP的RAW输出CSI相机可以与libargus或GStreamer插件一起使用。在任一情况下,都使用V4L2媒体控制器传感器驱动程序API。
- 传感器驱动程序API:V4L2API支持视频解码、编码、格式转换和缩放功能。用于编码的V4L2开放了许多功能,如比特率控制、质量预设、低延迟编码、时间权衡、运动矢量图等。
- (6) Computer Vision:VPI(视觉编程接口)是一个软件库,提供在jetson上的多个硬件加速器上实现的计算机视觉/图像处理算法,例如PVA(可编程视觉加速器)、GPU、NVDEC(NVIDIA解码器)、NVENC(NVIDIA编码器)、VIC(视频图像合成器)等。 0penCV 是一个用于计算机视觉、图像处理和机器学习的开源库。
- (7) Graphics:JetPack 包括以下图形库:Vulkan® 1.3Vulkan® SC 1.0OpenwFm Display 1.0
- (8) Nsight Developer Tools:CUDA工具包为C和C++开发人员提供了一个全面的开发环境,使用CUDA库构建高性能GPU加速应用程序。该工具包包括Nsight Visual Studio Code Edition, Nsight Eclipse 插件,包括Nsight Compute在内的调试和分析工具,以及用于交叉编译应用程序的工具链。
- (9) DeepStream:NVIDIA DeepStream SDK 是一个完整的分析工具包,用于基于AI的多传感器处理以及视频和音频理解。
- (10) Cloud Native:jetson将云原生引入边缘,并支持容器和容器编排等技术NVIDIA JetPack包括NVIDIA Container Runtime和Docker集成,可在jetson平台上实现GPU加速的容器化应用程序。
- (11) Security:NVIDIA jetson模块包括各种安全功能,包括硬件信任根、安全启动、硬件加密加速、可信执行环境、磁盘和内存加密、物理攻击防护等。
(3)中文输入法的构建
打开语言支持

安装中文输入法:
打开终端,并使用以下命令安装中文输入法:
sudo apt update
sudo apt install ibus-pinyin
配置输入法

检查ibus是否在运行: 打开终端并输入以下命令来检查ibus是否在运行:
ibus-daemon --xim --replace --daemonize
如果ibus没有运行,上述命令将启动ibus。然后尝试重新打开系统设置并查看是否可以找到中文输入法。
(4) Pycharm和pip包的安装与处理
① 更换软件源
由于 Jetson Nano 采用 ARM 架构,使用 Ubuntu 默认源下载速度较慢,推荐更换为国内的镜像站。操作流程如下:
1. 进入源配置目录:
cd /etc/apt
2. 备份原有源列表:
sudo cp sources.list sources.list.bak
3. 使用编辑器打开 sources.list 文件:
sudo gedit sources.list
清空原有内容后,将下述清华或中科大的 ARM64 软件源 粘贴进去(注意将路径中的 ubuntu 替换为 ubuntu-ports):
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 universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-security main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-updates main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-backports main multiverse restricted universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-backports main multiverse restricted universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-proposed main multiverse restricted universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-security main multiverse restricted universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-updates main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-backports main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-proposed main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-security main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial-updates main multiverse restricted universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial main multiverse restricted universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-security main multiverse restricted universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-updates main multiverse restricted universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-backports main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-security main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-updates main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-backports main multiverse restricted universe
4. 更新软件列表并升级系统:
sudo apt-get update
sudo apt-get upgrade
这里再给大家强调一下更换软件源的原因:
在 Linux 系统(如 Ubuntu)中,软件的获取与更新主要依赖于 APT(Advanced Package Tool)包管理系统。APT 会从指定的镜像源服务器下载所需的软件包及其依赖项。
默认情况下,Jetson Nano 搭载的 Ubuntu 系统使用的是 Ubuntu 官方源,该源服务器多位于海外。当用户位于中国大陆时,由于跨境网络传输延迟大、丢包率高,导致下载速度较慢甚至连接失败。因此,用户常常需要将软件源切换为 国内的镜像源(如清华大学、中科大、阿里云等提供的镜像站)。
更换源的核心原理在于:
-
APT 配置文件
-
APT 会读取
/etc/apt/sources.list与/etc/apt/sources.list.d/下的源配置。 -
每一行源配置都定义了一个镜像站点的地址、发行版代号(如
bionic、xenial)、以及可用的软件仓库(main、universe、multiverse、restricted 等)。
-
-
镜像站点的作用
-
镜像站点本质上是官方软件仓库的一个复制站点(mirror),它会定期同步官方仓库内容。
-
用户更换源后,APT 在请求软件包时会从地理位置更近的镜像站点获取数据,从而显著提升下载速度与稳定性。
-
-
ARM 架构特殊性
-
Jetson Nano 采用的是 ARM 架构处理器,而普通 PC 使用的是 x86 架构。
-
Ubuntu 针对 ARM 架构的软件包存放在
ubuntu-ports仓库,而非默认的ubuntu仓库。 -
因此,在 Jetson Nano 上配置软件源时,需要将路径改为
ubuntu-ports,否则 APT 无法找到对应架构的软件包。
-
-
更新与同步机制
-
当执行
sudo apt update时,APT 会下载源服务器提供的 软件包索引文件(Packages.gz)。 -
这些索引文件包含了可用软件的版本号、依赖信息、下载路径。
-
更换源后,APT 依然通过相同的索引机制获取更新,只是数据来自国内的镜像站点。
-
② 设置 CUDA 环境变量
Jetson Nano 的官方系统镜像已自带 JetPack,其中包含 CUDA、cuDNN 和 OpenCV 等工具。但要让 CUDA 正常使用,需要手动配置环境变量。方法如下:
打开 .bashrc 文件:
sudo nano ~/.bashrc
在文件末尾添加以下三行:
export CUDA_HOME=/usr/local/cuda
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
export PATH=/usr/local/cuda/bin:$PATH
立即生效:
source ~/.bashrc
测试 CUDA 是否可用:
nvcc -V
如果能正确显示 CUDA 的版本号,说明环境变量配置完成。
(5) 下载Nomachine远程控制 jetson nano开发板 (用于上传模型)


我们在本地电脑和Jetson nano开发板上都下载一个Nomachine软件,那么当我们的Jetson nano 开发板和我们的本地电脑所连的网络为同一个的话,我们就可以在设备列表这里找到,推荐大家使用自己手机的热点,因为我们可以看到目标的一个IP地址,方便我们去选择对的设备。

这样可以快速的将模型从本地电脑上传到 jeston nano开发板中,我们这样就可以实现开发板和我们本地电脑上文件的互相传递。
(6) Archiconda 与 Anaconda
由于jetson nano 是aarch64架构,Anaconda官方不支持aarch64架构,所以有了一个叫“Archiconda”,其目的就是将conda移植到aarch64平台上。\

Archiconda3是一个专注于将conda-forge的工作移植到64位Arm处理器的开源项目。该项目的目标是为aarch64架构开发必要的基础工作,以便在该架构上编译conda-forge,并最终将这些工作回溯到conda-forge项目中。Archiconda3通过提供一系列配置脚本和工具,使得在Arm处理器上使用conda环境变得更加便捷和高效。

$ wget https://github.com/Archiconda/build-tools/releases/download/0.2.3/Archiconda3-0.2.3-Linux-aarch64.sh
$ bash Archiconda3-0.2.3-Linux-aarch64.sh
这里推荐使用 Nomachine传 shell脚本到开发板上速度更快



sudo chmod -R 777 Archiconda3-0.2.3-linux-aarch64.sh
./Archiconda3-0.2.3-linux-aarch64.sh

输入 yes 指定安装目录:/data/app/anconda/python(python目录不需要新建)

sudo vim ~/.bashrc
在最后一行输入
export OPENBLAS_CORETYPE=ARMV8
保存
source ~/.bashrc

3.激活我们模型 的conda环境
(1) 配置虚拟环境

conda create -n LUIEO python=3.10.2
conda activate LUIEO

(2) 下载 torch 和 torchvision

同样的大家在Jetson Nano上下载torch和torchvision的速度很慢的话,也可以去自己的电脑上开网络代理下好后,通过Nomachine传输到我们的开发板上。
(3) 配置Pycharm解释器路径

(4) 解决新版Jetson nano开发板 libcudnn.so.8的报错问题
/home/zhangzhenwei/archiconda3/envs/LUIEO/bin/python /home/zhangzhenwei/PycharmProjects/LUIEO/MobileVITWP1/main2.py
Traceback (most recent call last):
File "/home/zhangzhenwei/PycharmProjects/LUIEO/MobileVITWP1/main2.py", line 1, in <module>
import torch
File "/home/zhangzhenwei/archiconda3/envs/LUIEO/lib/python3.10/site-packages/torch/__init__.py", line 236, in <module>
from torch._C import * # noqa: F403
ImportError: /lib/aarch64-linux-gnu/libcudnn.so.8: version `libcudnn.so.8' not found (required by /home/zhangzhenwei/archiconda3/envs/LUIEO/lib/python3.10/site-packages/torch/lib/libtorch_python.so)
这个是由于libcudnn.so.8 是 NVIDIA cuDNN 库 的动态链接库,PyTorch GPU 版本在初始化时需要它。
你的系统环境
| 信息 | 值 |
|---|---|
| JetPack 版本 | JetPack 6.2.1 |
| cuDNN 版本 | libcudnn.so.9(即 cuDNN 9.3.0) |
| PyTorch 安装方式 | 来自 NVIDIA 官网 |
| 报错 | PyTorch 报 libcudnn.so.8 找不到(❌ 不匹配) |
问题核心:
PyTorch 是 期望加载 libcudnn.so.8,而系统上安装的是 libcudnn.so.9。 所以它崩了——二者版本不匹配。
解决方法:
https://developer.nvidia.com/rdp/cudnn-archive
下载对应的cudnn-local-repo-ubuntu2204-8.9.7.29_1.0-1_arm64.deb包。这个是 NVIDIA 官方提供的 cuDNN 8.9.7.29 本地安装包,适用于 Ubuntu 22.04 和 aarch64 架构(Jetson平台)。
它的解决方法从原理上来看大家初次接触时会很懵,但是清楚原理之后就很好理解了。
1. 安装 .deb 文件,添加本地源
sudo dpkg -i cudnn-local-repo-ubuntu2204-8.9.7.29_1.0-1_arm64.deb
这会把一个本地 apt 源配置文件写入 /etc/apt/sources.list.d/ 并复制 .deb 包内容到 /var/cudnn-local-repo-*
目录里通常含有:
-
Packages/Packages.gz(APT 索引) -
Release/InRelease(索引的元信息与签名) -
一组
libcudnn*.deb等实际软件包 -
一个仓库公钥文件
cudnn-local-<fingerprint>-keyring.gpg -
在
/etc/apt/sources.list.d/写入源配置 -
dpkg只负责解包/注册,不会像apt那样解析依赖或更新索引,所以后续还要apt update。
2. 添加GPG密钥
由于我们已有 cudnn-local-80EFB423-keyring.gpg 文件,我们使用它作为 keyring:
sudo cp /var/cudnn-local-repo-ubuntu2204-8.9.7.29/cudnn-local-80EFB423-keyring.gpg /usr/share/keyrings/
然后你需要手动为 apt 配置该本地源使用这个 GPG keyring:
echo "deb [signed-by=/usr/share/keyrings/cudnn-local-80EFB423-keyring.gpg] file:/var/cudnn-local-repo-ubuntu2204-8.9.7.29 /" | sudo tee /etc/apt/sources.list.d/cudnn-local.list
原理说明
-
APT 的信任模型:APT 只信任被已知公钥签过名的仓库索引(
Release/InRelease)。 -
这里把仓库自带的 GPG 公钥放到系统 keyring 目录:
/usr/share/keyrings/。这比过时的apt-key更安全,且便于按源隔离信任。 -
在源条目里用
signed-by=...指定“该源只用这把公钥验证”。这样即使系统装了很多公钥,也不会混淆。 -
file:/var/...是 本地仓库 URI,告诉 APT 去本地路径读Packages/Release等文件,而非联网。
3.更新 apt 缓存并安装 cuDNN
sudo apt update
sudo apt install libcudnn8 libcudnn8-dev
-
apt update:读取你所有源(包括刚加的本地源),下载或直接读取本地的Packages与Release,并用上一步提供的 GPG 公钥验证签名。验证通过才会把该源的包纳入候选集合。 -
apt install:基于各源的候选版本、优先级选择安装。你的本地源里包含指定版本的libcudnn8(运行库)与libcudnn8-dev(头文件、静态链接、开发用符号等),因此可离线安装或不受外网影响。
(5) 区分CUDA 和 CuDNN
CUDA:为“GPU通用计算”构建的运算平台。 cudnn:为深度学习计算设计的软件库。 CUDA Toolkit (nvidia): CUDA完整的工具安装包,其中提供了 Nvidia 驱动程序、开发 CUDA 程序相关的开发工具包等可供安装的选项。包括 CUDA 程序的编译器、IDE、调试器等,CUDA 程序所对应的各式库文件以及它们的头文件。 CUDA Toolkit (Pytorch): CUDA不完整的工具安装包,其主要包含在使用 CUDA 相关的功能时所依赖的动态链接库。不会安装驱动程序。 (NVCC 是CUDA的编译器,只是 CUDA Toolkit 中的一部分)
(6) 常规问题解决方法
在 Python 3.10 中,collections.MutableMapping 被 移到了 collections.abc 模块中,因此不能再直接从 collections 中导入或访问 MutableMapping。

python main2.py --common_config_file mobilevitv3_small_multiserver.yaml
4. 总结:
这样就是配置成功了,大家在使用pip下载python包时觉得速度太慢了也可以把pip切换为国内源这里就不给大家演示了,这里给到的建议是大家最好使用好Nomachine这个软件它可以大大提高我们的效率。
祝大家风调码顺!!!
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)