中文内容
开源生成式 AI 模型的蓬勃发展正从数据中心延伸到在物理世界中运行的机器。开发者正积极将这些模型部署到边缘端,从而赋能物理 AI 智能体和自主机器人,实现重型任务自动化。
一个关键挑战是如何在内存有限的边缘设备上高效运行拥有数十亿参数的模型。随着内存供应持续受限且成本上升,开发者正专注于以更少资源实现更多功能。
NVIDIA Jetson 平台支持流行的开放模型,同时在边缘端提供强大的运行时性能和内存优化。对于边缘开发者而言,内存占用决定了系统能否运行。不同于云环境,边缘设备在严格的内存限制下运行,CPU 和 GPU 共享受限资源。
低效的内存使用可能导致瓶颈、延迟激增或系统故障。与此同时,现代边缘应用通常会运行多个流水线,例如检测、跟踪和分割,因此高效的内存管理对于在功耗和散热约束下实现稳定的实时性能至关重要。
优化内存使用具有明显优势。开发者可以通过降低开销并提高并发性,在同一硬件上提升性能,同时支持更复杂的工作负载,例如 LLM、多摄像头系统和传感器融合。它还可以通过适配更小的内存配置来降低系统成本,并通过最大限度减少瓶颈、最大化 GPU 利用率来提高效率(每瓦性能)。
本文探讨了一些优化策略,旨在帮助开发者在资源受限的边缘系统上最大化性能、效率和能力。
边缘 AI 软件栈
让我们更深入地了解边缘设备的运行时软件栈。这并不是一份关于完整内存优化的详尽指南,而是一个参考框架,用于激发思路,并帮助开发者发现改进其软件栈的新方法。内存节省展示了 NVIDIA 团队所取得的成果。有经验的用户可能实现更高的效率,而其他用户则可以将这些示例作为起点,以便在 NVIDIA Jetson 和 NVIDIA IGX 平台上更好地利用资源。
本文探讨五个关键层级——从基础层的 Jetson BSP 和 NVIDIA JetPack 开始,向上延伸到推理流水线、推理框架和量化技术。让我们逐步深入了解每一层。

基础层:板级支持包和软件栈
NVIDIA Jetson 板级支持包(BSP)和 NVIDIA JetPack 层构成了软件栈的基础,并与硬件交互。它包括 Linux 内核、设备驱动程序、固件,以及包含支持计算、多媒体和加速 I/O 的组件的 JetPack SDK。该层抽象了硬件复杂性——GPU、CPU、内存和外设——为更高层级的服务和应用提供稳定且经过优化的基础。
在这一层,可以通过禁用未使用的服务并回收预留的 carveout 区域来节省内存。这些优化可减少开销,并为应用工作负载释放 DRAM,而不会影响核心功能。以下各节重点介绍启用这些优化的关键技术。
BSP 和 JetPack 层优化指南适用于 Jetson Orin NX 和 Jetson Orin Nano。
sudo systemctl set-default multi-user.targetDisabling networking, connectivity, and non-essential journaling services.Up to 32 MBsudo systemctl disable <service-name>NVIDIA Jetson Orin NX 上的 carveout 区域,以及内核空间和用户空间优化,是提升整体系统效率的关键领域。以下各节将探讨优化这些层的实用技术。
Carveout 优化
NVIDIA Jetson Orin NX 和 NVIDIA Jetson Orin Nano 中的 carveout 区域是在启动时为特定硬件引擎、固件和实时子系统预留的物理内存。Linux 或 NVIDIA CUDA 应用程序无法访问这些区域,它们由片上微控制器和加速器使用。这些区域作为专用内存池,用于确保隔离性、安全性和确定性行为。根据您的流水线和应用需求,可以禁用某些 carveout,以进一步优化内存使用。
isn’t neededRefer to note 1
and re-flash1 MBCARVEOUT_DCE32 MBCARVEOUT_DISP_EARLY_BOOT_FB34 MBCARVEOUT_TSEC_DCE1 MBCARVEOUT_CAMERA_TASKLISTWhen camera
isn’t neededRefer to note 2
and re-flash32 MBCARVEOUT_RCE1 MB
注 1:以下示例展示了在不需要显示功能时,用户如何进行内存优化。将代码片段添加到 Linux_for_Tegra/bootloader/generic/BCT/tegra234-mb1-bct-misc-p3767-0000.dts 的 /misc/carveout/ 节点内
// Display-related carveouts
aux_info@CARVEOUT_BPMP_DCE {
pref_base = <0x0 0x0>;
size = <0x0 0x0>; // 0MB
alignment = <0x0 0x0>; // 0MB
};
aux_info@CARVEOUT_DCE_TSEC {
pref_base = <0x0 0x0>;
size = <0x0 0x0>; // 0MB
alignment = <0x0 0x0>; // 0MB
};
aux_info@CARVEOUT_DCE {
pref_base = <0x0 0x0>;
size = <0x0 0x0>; // 0MB
alignment = <0x0 0x0>; // 0MB
};
aux_info@CARVEOUT_DISP_EARLY_BOOT_FB {
pref_base = <0x0 0x0>;
size = <0x0 0x0>; // 0MB
alignment = <0x0 0x0>; // 0MB
};
aux_info@CARVEOUT_TSEC_DCE {
pref_base = <0x0 0x0>;
size = <0x0 0x0>; // 0MB
alignment = <0x0 0x0>; // 0MB
};
将 Linux_for_Tegra/bootloader/tegra234-mb2-bct-common.dtsi 中 /mb2-misc/auxp_controls@3/ 节点的内容更新为:
/* Control fields for DCE cluster. */
auxp_controls@3 {
enable_init = <0>;
enable_fw_load = <0>;
enable_unhalt = <0>;
reset_vector = <0x40000000>;
};
删除 Linux_for_Tegra/bootloader/tegra234-mb2-bct-common.dtsi 中的整个 /mb2-misc/auxp_ast_config@6 和 /mb2-misc/auxp_ast_config@7 节点
使用 dtc 工具将内核 dtb 反编译为 dts,将 /display@13800000 节点的 status 标记为 disabled,然后将该 dts 重新编译为内核 dtb:
display@13800000 {
status = "disabled";
};
注 2:以下示例展示了用户在不需要摄像头时如何进行内存优化。将代码片段添加到 Linux_for_Tegra/bootloader/generic/BCT/tegra234-mb1-bct-misc-p3767-0000.dts 的 /misc/carveout/ 节点内:
aux_info@CARVEOUT_CAMERA_TASKLIST {
pref_base = <0x0 0x0>;
size = <0x0 0x0>; // 0MB
alignment = <0x0 0x0>; // 0MB
};
aux_info@CARVEOUT_RCE {
pref_base = <0x0 0x0>;
size = <0x0 0x0>; // 0MB
alignment = <0x0 0x0>; // 0MB
};
将 Linux_for_Tegra/bootloader/tegra234-mb2-bct-common.dtsi 中 /mb2-misc/auxp_controls@2/ 节点的内容更新为:
/* Control fields for RCE cluster. */
auxp_controls@2 {
enable_init = <0>;
enable_fw_load = <0>;
enable_unhalt = <0>;
};
内核侧优化
Jetson Orin、Orin NX 和 Orin Nano 平台使用 NVIDIA 专用的输入/输出内存管理单元(IOMMU)来处理外设的直接内存访问(DMA)地址转换,使设备能够访问系统内存,而不受物理地址限制。
Linux 软件 I/O 转换后备缓冲区(SWIOTLB)是针对没有硬件 IOMMU 或外设仅支持 32 位 DMA 的系统的一种变通方案。由于 Orin 包含强大的硬件 IOMMU,可重新映射 DMA 地址,因此 SWIOTLB 通常是冗余的。
SWIOTLB 调优
对于需要 SWIOTLB 的特定用例或非标准外设,或当内核日志显示存在 DMA 问题时,可以使用启动参数调整预留大小。
swiotlb= 参数定义 I/O TLB slab 的数量(每个 2 KB):
总大小(字节)= swiotlb_value × 2,048
示例(4 MB 缓冲区):
- 4 MB ÷ 2 KB = 2,048 个 slab
- 内核命令:swiotlb=2048
用户空间侧优化
在 Jetson 上,应用程序总内存包括:
- 进程和系统服务使用的 CPU 内存。
- CUDA、多媒体缓冲区和加速器使用的硬件(NvMap)内存。
二者共享同一物理内存池,优化其中一方也会使另一方受益。
减少 CPU 内存使用
首先确定消耗 CPU 内存最多的进程。后台服务(如 GUI 或音频组件)可能会占用大量内存,并且在生产环境中可能并非必需。
- 测量 CPU 内存使用情况 使用 procrank 分析内存使用情况:
$ git clone https://github.com/csimmonds/procrank_linux.git $ cd procrank_linux/ $ make $ sudo ./procrank
输出按 PSS(Proportional Set Size,比例集大小)排序,反映实际物理内存使用情况。
- 根据发现进行优化并识别进程
- gnome-shell 或 Xorg(图形界面)
- 正文:pulseaudio
- 未使用的 python3 进程
这些在生产环境中通常是不必要的,可以禁用以回收内存。在无头部署中,禁用 GUI 服务可以释放大量系统内存。

- 分析和测量硬件内存使用情况
除了 CPU 内存外,GPU 和多媒体分配也会影响可用内存。
$ sudo cat /sys/kernel/debug/nvmap/iovmm/clients
*这显示了使用 NvMap 的各进程的内存使用情况(例如 CUDA、视频流水线)。
- 优化硬件内存
识别使用大量 GPU 或缓冲区分配的进程。与 CPU 优化一样,GUI 流水线( gnome-shell 、Xorg )等服务可能会消耗不必要的硬件内存。减少这些分配可为 AI 工作负载释放更多内存。

推理流水线
这一层管理从预处理、推理到后处理的端到端数据流,以生成可执行的输出。NVIDIA DeepStream 等框架为视频和传感器输入等流式数据提供高性能、GPU 加速的流水线。它们在精简的工作流中处理解码、批处理、推理、跟踪和分析,从而实现可扩展的处理能力。这一层抽象了复杂性,并优化数据移动和计算利用率,以支持高效、可用于生产环境的 AI 应用。
了解如何通过配置和实现选择来优化推理流水线,以降低内存占用并提升性能。虽然这里以 DeepStream 为例展示,但这些原则广泛适用于各种框架和应用。
推理框架
面向 LLM 的推理服务框架层专注于在生产环境中高效部署和扩展大型语言模型,vLLM、SGLang 和 Llama.cpp 等框架在这一领域处于领先地位。这些框架通过连续批处理、KV 缓存管理和高效内存利用等技术来优化推理,以最大化吞吐量并降低延迟。
- vLLM 凭借其分页注意力机制,在高吞吐量服务方面表现出色。
- SGLang 支持灵活且可编程的推理工作流。
- Llama.cpp 和 NVIDIA TensorRT Edge-LLM 针对资源受限环境中的内存高效执行进行了优化。
这些框架提供了在边缘本地部署时可靠服务 LLM 所需的基础设施。
模型量化
模型量化是一项关键技术,通过使用较低精度的数据类型表示权重和激活值,来减少 AI 模型的内存占用并加速推理。
量化应由目标用例的明确准确性和性能要求来驱动。在选择量化方案之前,请定义:
- 最低可接受的模型质量或任务准确性。
- 目标吞吐量和延迟。
- 部署约束,尤其是可用的 GPU 内存。
在锁定这些要求后,推荐的方法是逐步评估更低精度的量化选项。从最高准确率的基线开始,沿着受支持的量化格式逐级降低,直到模型不再满足所需的质量阈值。所选的量化点应是在仍满足用例准确率要求的前提下的最低精度,因为这通常能提供最佳的内存节省和效率。

如果低比特量化带来了不可接受的性能下降,可使用量化感知蒸馏(QAD)等恢复技术来恢复损失的准确率。这些方法通常可以恢复足够的模型质量,从而在仍满足部署要求的同时实现更激进的量化。
一旦选定量化级别,就应针对目标部署优化运行时内存。对 vLLM 配置参数进行遍历扫描——尤其是 GPU 内存利用率——以找到能够维持目标性能的最小内存占用。这可确保部署在吞吐量和延迟目标方面高效且规模适当。
FP16 和 FP8 等格式在准确性和性能之间取得平衡,其中 FP8 越来越多地用于实现更高吞吐量。更激进的方案(如 W4A16)在保持可接受准确性的同时,降低了内存和带宽需求。NVIDIA NVFP4 通过适合硬件实现的 4 位计算进一步提升效率。这些方法共同为大型模型和资源受限系统实现更快且更具成本效益的推理。不同 Jetson 平台的支持情况各不相同——详情请参阅 NVIDIA Jetson 产品目录。
根据所包含并优化的五层软件栈组件不同,在保持高准确性和功能一致性的同时,最高可节省 10–12 GB 内存。
使用专用加速器在边缘侧进行推理解耦
Jetson 平台包含多个非 GPU 加速器,通过将专门工作负载从 CPU 和 GPU 卸载来提高效率。其中包括用于相机处理的图像信号处理器(ISP)、用于视频编码/解码的 NVENC/NVDEC,以及用于视觉任务的 NVIDIA Programmable Vision Accelerator(PVA)。
PVA 可用于从 Jetson Orin NX 到 Jetson Thor 的平台,非常适合始终开启、低功耗的视觉工作负载,例如哨兵模式、运动检测、目标跟踪和特征提取,在这些场景中持续使用 GPU 会效率较低。通过卸载这些任务,PVA 可降低延迟,并释放 GPU 资源用于更复杂的推理或并行工作负载,从而提升边缘部署中的整体性能和能效。
NVIDIA cuPVA SDK 目前处于 Early Access 阶段。如果你有兴趣探索其功能,请联系以获取更多信息。
跨多个层面的潜在节省:
如果有一个关键要点,那就是使用合适的量化精度。
NVFP4、INT4 和 W4A16 等格式可显著降低内存和存储需求,同时在许多 LLM 工作负载中保持较高准确率。
实际用例:Reachy Mini Jetson Mini Assistant
为了展示这些内存优化的影响,可以参考 Reachy Mini Jetson Assistant:这是一款运行在 Jetson Orin Nano 上的端侧对话式 AI 机器人,配备 8 GB 统一内存,并且不依赖云端。
该助手并行运行一个多模态 AI 流水线,包括:通过 4-bit(Q4_K_M GGUF)量化并经由 Llama.cpp 提供服务的视觉语言模型(Cosmos-Reason2-2B),用于视觉理解;用于语音识别的 faster-whisper(small.en);以及用于文本转语音的 Kokoro TTS——所有这些都与 Reachy Mini 机器人 SDK 和实时 Web 仪表盘同时运行。
通过全栈优化——禁用显示管理器、以无头模式运行、通过 Llama.cpp 而不是更重的 Python 框架提供 VLM 服务、使用 4-bit 量化的 Cosmos Reason2 2B,并选择优化过的运行时(用于 STT 的 CTranslate2,用于 TTS 和 VAD 的 ONNX Runtime)——完整流水线可在单台 Orin Nano 8 GB 系统上运行。
更广泛地说,将 4-bit 量化与 Llama.cpp 和 TensorRT-Edge-LLM 等高效推理运行时结合起来,可以让大量模型在这一内存预算内可用,包括参数规模最高约 10B 的 LLM,以及参数规模最高约 4B 的 VLM。完整的已测试模型列表可在 Jetson AI Lab Models 页面和 NVIDIA Developer Forum 上查看。
Orin NX 16 GBAfter
Orin Nano 8 GBMemory footprint beforeMemory footprint afterTotal memory savedBSP & OS servicesUbuntu Desktop (GNOME full session)Headless mode1.8 GB1.1 GB~0.7 GBModel quantization for VLM on llama.cppVLM FP16 VLM Q4_K_M Quantization 6.6 GB2.2 GB~4.4 GBReachy Mini Jetson Assistant AppDoes not run on Orin Nano 8 GB(VLM alone uses 87% RAM)Runs full pipeline at 4.5 / 7.6 GB (~60%)>7.6 GB (OOM)[Note 3]4.5 GB>5.1 GB
注 3:
Jetson Orin Nano 8 GB 模块,在 8 GB 物理 DRAM 中,扣除固件和内核预留后大约有 7.6 GB 可用;本文中所有“可用内存”数字均指这一可用预算。测试的 VLM 是 Cosmos Reason 2(20 亿参数)。
桌面环境与无头环境的比较是一次直接的 BSP 配置切换:将完整的 GNOME 桌面会话(gnome-shell + Xorg + gnome-software + 相关后台服务)与无头启动目标(multi-user.target)进行比较,软件栈没有其他变化。
这些节省已经假设使用了优化的 C++ 推理后端(llama.cpp)。切换到更重的推理框架可能会因框架初始化而增加超过 2.7 GB 的额外开销——甚至在加载任何模型权重之前。在 8 GB 平台上,这种开销往往决定了模型能否装得下。
开始使用
- 了解更多关于下一代 Jetson Orin 边缘 AI 平台的信息。
- 安装 JetPack 和 DeepStream。
- 在 NVIDIA Jetson Forum 上分享你的故事,以及这篇文章如何帮助了你。
标签
















