Skip to main content

在硬件迁移过程中,损失一天时间最快的方式就是从最难的模型开始。 如果你正在从 Jetson 迁移到 Dragonwing,我们的最佳实践是在把你的生产 TensorRT 应用、自定义 CUDA 预处理和手工调优的检测器搬过来之前,先从一块已知良好的开发板和一个已知良好的模型开始:
本文并不替代官方的开发板设置文档。它假设你的 EVK 已经烧录、接入网络并安装了所需的软件包。这里的目标是迁移的健全性检查:在调试你自己的模型之前先证明平台工作正常。 再来一个框架性观点:Ubuntu 是通往”它能跑起来”的快速路径。Qualcomm Linux(QLI)是一个基于 Yocto 的嵌入式 Linux 发行版,它的参考发行版、layer、recipe 和示例代码可以帮助客户构建和维护自己的设备软件。 下面的示例使用 Ubuntu 风格的命令,因为它们在 EVK 上易于复现。同样的检查点在基于 QLI 的镜像上仍然适用:QNN 运行时已安装、HTP 可见、AI Hub 工件可用、已知良好的模型能运行、应用行为已验证。我们将在本系列后面覆盖从 Ubuntu 到客户自维护 Yocto 的可选过渡。 在贯穿本系列的案例研究中,这是移植 Jetson 智能摄像头应用前的实验室日:先在 Dragonwing 上证明 SSH、QNN/HTP、GenieX 和一条已知良好的视觉路径。 在开始之前:

目标设备

同样的第 0 天模式一般适用于 Dragonwing EVK。具体的型号可用性、包名和性能会因开发板和 SoC 而异,所以请在 AI Hub 中选择正确的目标,并使用匹配的 Dragonwing 设置页面。 对于本文中的示例,先想到”Dragonwing EVK”。本系列使用 IQ-9075/IQ-8275 作为 EVK 名称,使用 IQ-9/IQ-8 作为家族简称。IQ-8 和 IQ-9 是具体示例: 必需软件包文档: 那些页面涵盖了 Ubuntu 的烧录、串口控制台、网络、SSH、显示和包安装。如果你的团队使用 QLI / Qualcomm Linux,请改用匹配的 QLI 设置流程,并保持相同的验证检查点。本文从 EVK 已经可访问且必需的 AI 运行时包已安装之后开始。

步骤 1:从一台就绪的 EVK 开始

对于本文,假设你已经具备:
Dragonwing 必需包页面会安装我们在本文中关心的部分,包括:
一旦 EVK 可通过 SSH 访问,就收集基本的系统信息:
这项检查值得早做。惊人比例的”模型调试”其实是意外的镜像、包集合、库路径或开发板变体问题。

步骤 2:验证 AI 运行时层

在运行你自己的模型之前,先验证必需包设置中的 Qualcomm AI 运行时组件是否存在。
为了更深入地检查 HTP 的健全性,可以在已安装的工具中使用 QNN 平台验证器(如果可用):
预期结果:DSP/HTP 后端测试通过。 如果这一步失败,我们建议暂停模型级调试,直到运行时层健康。在引入自定义模型之前修复开发板/运行时设置要便宜得多。

步骤 3:配置 AI Hub 访问

AI Hub 是获取已知良好模型和设备特定工件最简单的来源。根据你使用的工作流,从主机或从设备配置客户端。在 Ubuntu 24.04 上,使用虚拟环境而不是安装到系统 Python 中:
然后验证 AI Hub 能否看到你关心的设备类别:
最佳实践:在下载模型之前先使用 AI Hub 的芯片组过滤器。选择与你的 EVK 匹配的目标,例如 IQ-8 用 IQ-8275/QCS8275,或 IQ-9 用 IQ-9075/QCS9075。 如果你的网络阻塞了 AI Hub 下载,通过获取你打算使用的确切模型工件来提早检查;如果该命令失败,则规划离线复制路径。避免依赖硬编码的公共资源 URL;目录路径和版本会变化。

步骤 4:使用 GenieX 运行一条已知良好的 LLM 路径

对于第 0 天的 LLM 验证,我们建议从 GenieX 快速入门 开始。 GenieX 为你提供本地 LLM/VLM 推理的 Qualcomm 面向开发者路径:CLI、Python SDK、Linux ARM64 上的 Docker 以及一个与 OpenAI 兼容的本地服务器。在底层,它可以使用两种运行时: 在 Linux ARM64 / Dragonwing 上,请遵循 GenieX Linux 安装指南。 基本验证检查点是:
然后通过 QAIRT 路径运行一个 Qualcomm AI Hub 模型。请把该模型 ID 视为当前 GenieX 文档中的一个已知良好示例,并对照你 GenieX 版本的受支持模型页面进行验证:
或者通过 llama_cpp 路径运行一个 GGUF 模型,同样对照你版本的 Hugging Face ID 和精度进行验证:
对于 GGUF 模型,Q4_0 是通常用于 Hexagon NPU 支持的第 0 天选择。 对于应用集成,有用的冒烟测试是本地服务器:
服务器默认监听:
并暴露一个与 OpenAI 兼容的 /v1/chat/completions API。这在迁移期间很重要,因为许多 Jetson 演示已经与本地 LLM 服务通信。如果应用能讲与 OpenAI 兼容的 HTTP,那么把模型主机迁到 Dragonwing EVK 可能只是一次服务 URL 变更,而不是应用重写。 原始 llama.cpp 仍然对高级调试和模型实验有用,但对于这条第 0 天的 LLM 路径,GenieX 应该是首要推荐。

步骤 5:运行一条已知良好的视觉路径

对于第一次视觉运行,使用 Dragonwing AI Hub 或 LiteRT 示例,而不是你自己的自定义检测器。 推荐的起始页: AI Hub 页面用轻量级人脸检测作为端到端示例。LiteRT 页面展示了使用 QNN 委托的核心模式。 一个简单的 LiteRT 冒烟测试是通过 benchmark_model 用 QNN 委托运行一个已安装的量化模型。在本系列使用的 IQ-9075 实验室镜像上,已安装的人脸检测模型位于 /etc/models 下:
预期结果:委托创建成功,输出包含平均推理时间和内存统计。在实验室的 IQ-9075 镜像上,这完全在 HTP 上委托运行。如果委托加载失败,请在动你的自定义检测器之前修复运行时/包设置。 重要的应用运行时模式是这样的:
从 Dragonwing AI Hub 文档中值得带入你自己应用的一些实用经验:
  • 在 AI Hub 中为正确的芯片组选择模型。
  • 优先选择量化模型进行 NPU 执行。
  • 检查 AI Hub 示例仓库以了解确切的预处理和后处理。
  • 图像布局和缩放是模型特定的:LiteRT 示例常用 NHWC,ONNX 示例常用 NCHW。
  • 一些模型有令人意外的预处理细节;请使用该模型对应的确切 AI Hub 示例代码,而不是假设通用的灰度、RGB 或 BGR 处理。
这就是为什么一个已知良好的视觉示例有价值。它证明了委托路径,并提醒你模型只是应用的一部分。

步骤 6:选择你将继续使用的路径

在一个 LLM 冒烟测试和一个视觉冒烟测试都通过之后,为下一个迁移步骤选择运行时通道: 第 0 天的目标不是选择所有生产细节,而是在把 Jetson 模型带过来之前证明开发板、运行时和已知良好模型路径。

这证明了什么,又不能证明什么

这是 Qualcomm 的快速上手通道,并不是”每个 Jetson 模型都能在第 0 天运行”的主张。一个受支持的 AI Hub/GenieX/LiteRT 工件可以让你快速到达首次推理。一个自定义的 .pt 模型仍然要走更长的第 3 部分路径:导出、算子兼容性、量化、上下文生成、部署和验证。在比较上手速度时请把这两种体验分开。

第 0 天检查表

在迁移自定义模型之前,让这个清单变得无聊:
如果任何一项失败,下一步最好通常是先修复那一层,再移植你自己的模型。

为什么这避免了与设置文档的重叠

Dragonwing 文档已经完成了开发板启动工作:
本文有意比那些设置指南更轻。它的角色是解释迁移工作流:
这个顺序让第一次自定义模型迁移保持聚焦。之后当你的 YOLO 检测器失败时,你会知道开发板、QNN 运行时、AI Hub 路径、LiteRT 委托和 LLM 冒烟测试都已经工作。