目录

1.前言

2.配置jetson nano的环境​编辑

(1)下载 JetPack组件的原因

(2) JetPack 的主要组成

(3)中文输入法的构建

(4) Pycharm和pip包的安装与处理

① 更换软件源

② 设置 CUDA 环境变量

(5) 下载Nomachine远程控制 jetson nano开发板 (用于上传模型)

(6) Archiconda 与 Anaconda

3.激活我们LUIEO 的conda环境

(1) 配置虚拟环境

(2) 下载 torch 和 torchvision

(3) 配置Pycharm解释器路径

(4) 解决新版Jetson nano开发板 libcudnn.so.8的报错问题

(5) 区分CUDA 和 CuDNN

(6) 常规问题解决方法


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 官方源,该源服务器多位于海外。当用户位于中国大陆时,由于跨境网络传输延迟大、丢包率高,导致下载速度较慢甚至连接失败。因此,用户常常需要将软件源切换为 国内的镜像源(如清华大学、中科大、阿里云等提供的镜像站)。

    更换源的核心原理在于:

    1. APT 配置文件

      • APT 会读取 /etc/apt/sources.list/etc/apt/sources.list.d/ 下的源配置。

      • 每一行源配置都定义了一个镜像站点的地址、发行版代号(如 bionicxenial)、以及可用的软件仓库(main、universe、multiverse、restricted 等)。

    2. 镜像站点的作用

      • 镜像站点本质上是官方软件仓库的一个复制站点(mirror),它会定期同步官方仓库内容。

      • 用户更换源后,APT 在请求软件包时会从地理位置更近的镜像站点获取数据,从而显著提升下载速度与稳定性。

    3. ARM 架构特殊性

      • Jetson Nano 采用的是 ARM 架构处理器,而普通 PC 使用的是 x86 架构。

      • Ubuntu 针对 ARM 架构的软件包存放在 ubuntu-ports 仓库,而非默认的 ubuntu 仓库。

      • 因此,在 Jetson Nano 上配置软件源时,需要将路径改为 ubuntu-ports,否则 APT 无法找到对应架构的软件包。

    4. 更新与同步机制

      • 当执行 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.8NVIDIA 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:读取你所有源(包括刚加的本地源),下载或直接读取本地的 PackagesRelease,并用上一步提供的 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这个软件它可以大大提高我们的效率。

    祝大家风调码顺!!!

    Logo

    魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

    更多推荐