前言
本文围绕 Arm NN 推理框架展开,先通过技术栈全景图梳理 Arm NN 在整体软件栈中的位置,以及它与上层应用、模型转换工具、底层计算库和硬件后端之间的关系,再结合工作流示意图完整还原一次推理请求从发起到返回的全过程。
阅读本文后,读者可以快速建立对 Arm NN 的整体认知:一方面理解它在 Arm 平台上承担模型解析、图优化与后端调度等职责的方式,另一方面掌握一次推理在框架内部的流转路径与关键处理环节,从而为后续的模型部署、性能调优和跨平台适配提供参考依据。
Stack:
上图展示的是 Arm NN 在整体软件栈中的位置,自上而下可以划分为以下几个核心组件,各自承担不同的职责:
- 上层应用与框架:包括基于 Arm NN 构建的推理应用,以及 TensorFlow Lite、ONNX Runtime、Caffe 等主流框架的对接层,负责发起推理请求并消费推理结果。
- 模型解析与转换工具:Arm NN 提供解析器(Parser)与转换工具,将 TensorFlow、TFLite、ONNX、Caffe 等格式的模型转换为 Arm NN 内部的图表示,屏蔽不同模型格式之间的差异。
- Arm NN 核心运行时:框架的主体部分,负责计算图构建、图优化(算子融合、常量折叠、布局转换等)、后端选择与算子调度,是连接模型与硬件的中间层。
- 计算库与后端适配层:包括 Arm Compute Library(ACL)以及 OpenCL、OpenGL ES 等后端实现,将 Arm NN 的算子映射为底层可执行的高性能计算内核。
- 硬件与指令集:面向 Arm Cortex-A CPU(NEON/SVE 指令集)、Mali GPU 以及 Ethos-N 等 NPU 加速器,充分利用不同硬件的算力特性。
通过这样的分层结构,Arm NN 把模型格式、图优化与硬件执行解耦,上层应用无需关心底层硬件差异,即可在 Arm 平台上获得统一的推理接口与可移植的执行能力。
在上述分层结构中,计算库与后端适配层是决定推理性能的关键环节。Arm NN 支持多种后端,它们在适用硬件、算子覆盖范围、量化能力和典型场景上各有侧重,下表对 NEON、OpenCL、OpenGL ES、Ethos-N 四种后端做横向对比:
| 后端 | 适用硬件 | 支持算子范围 | 量化支持 | 典型适用场景 |
|---|---|---|---|---|
| NEON | Arm Cortex-A 系列 CPU(含 NEON/SVE 指令集) | 覆盖最广,基于 Arm Compute Library 实现绝大多数常用算子,兼容性最好 | 支持对称与非对称量化(如 QASYMM8、QASYMM8_SIGNED),可做 int8 推理 | 无 GPU/NPU 的通用设备、小模型低延迟推理、作为其他后端的兜底回退方案 |
| OpenCL | 支持 OpenCL 1.2 及以上的 Mali GPU 及其他兼容 GPU | 覆盖主流卷积、池化、全连接等算子,部分特殊算子需回退到 CPU | 支持部分量化算子,int8 覆盖度弱于 NEON,常以 FP16/FP32 为主 | GPU 算力充足的移动与嵌入式设备、大分辨率图像类模型、并行度高的卷积网络 |
| OpenGL ES | 支持 OpenGL ES 3.1/3.2 的 Mali GPU 及兼容图形硬件 | 算子覆盖相对有限,主要面向卷积等图形化易实现的算子 | 量化支持较弱,通常以 FP16/FP32 计算为主 | 图形渲染与推理共用 GPU 的场景、对算子覆盖要求不高的轻量模型 |
| Ethos-N | Arm Ethos-N 系列 NPU 加速器(如 Ethos-N77/N78) | 面向 NPU 优化的算子子集,不支持时自动回退到 CPU 后端 | 原生支持 int8/int16 量化,需配合离线编译工具生成可执行网络 | 对能效与吞吐要求高的边缘 AI 设备、持续推理的常驻型智能终端 |
实际部署时,Arm NN 会依据模型算子与目标硬件自动进行后端选择与拆分,把可加速的部分交给 GPU 或 NPU,其余算子回退到 NEON CPU 后端,从而在兼容性与性能之间取得平衡。
Work Flow:
上图展示的是 Arm NN 推理框架的完整工作流程,各步骤依次衔接,形成一条从模型加载到推理结果输出的闭环链路:
- 模型加载与解析:应用将训练好的模型交给 Arm NN,框架解析模型结构并构建内部的计算图表示。
- 图优化与后端选择:Arm NN 对计算图执行算子融合、常量折叠等优化,并根据目标硬件选择合适的后端(如 NEON、OpenCL、GPU 或 NPU)。
- 内存与张量准备:框架为输入输出张量分配内存,完成数据布局转换与量化参数配置,确保数据格式与后端要求一致。
- 算子调度与执行:Arm NN 按计算图顺序调度各层算子,调用底层计算库在目标硬件上完成卷积、矩阵乘等实际运算。
- 结果输出与回传:推理完成后框架整理输出张量,将结果返回给上层应用,由应用完成后续的后处理与展示。
整体来看,Arm NN 的推理流程遵循「加载—优化—准备—执行—输出」的分层设计思路,各环节职责边界清晰、通过统一接口解耦,既保证了算子实现的可替换与可扩展,也为后续针对不同硬件后端的性能优化留出了空间。
TL;DR
- 分层结构:Arm NN 自上而下分为上层应用与框架、模型解析与转换工具、核心运行时、计算库与后端适配层、硬件与指令集五层,把模型格式、图优化与硬件执行彻底解耦,上层应用无需关心底层硬件差异。
- 推理工作流:一次推理依次经过「加载—优化—准备—执行—输出」五个环节,即模型加载与解析、图优化与后端选择、内存与张量准备、算子调度与执行、结果输出与回传,形成从模型到结果的闭环链路。
- 核心价值:各环节职责边界清晰、通过统一接口解耦,算子实现可替换可扩展,后端可按目标硬件灵活切换,便于针对单一环节做性能调优与跨平台适配。
总结
Arm NN 采用清晰的分层技术栈设计:上层应用与框架负责发起推理请求并消费结果,模型解析与转换工具把 TensorFlow、TFLite、ONNX、Caffe 等格式统一为内部图表示,核心运行时承担计算图构建、图优化与后端调度,计算库与后端适配层(Arm Compute Library、OpenCL、OpenGL ES 等)把算子映射为高性能内核,硬件与指令集层则面向 Cortex-A CPU(NEON/SVE)、Mali GPU 与 Ethos-N NPU 充分释放算力。层与层之间通过统一接口解耦,上层应用无需关心底层硬件差异。
配合「加载—优化—准备—执行—输出」的推理工作流,Arm NN 在保证各环节职责边界清晰、单步逻辑可测试可替换的同时,也具备良好的可移植性,能够按目标硬件灵活切换后端,并对某一环节单独进行性能优化。
后续可以从模型部署流程标准化、算子与后端性能调优、跨平台适配与量化精度验证等方向继续演进,以支撑更复杂的模型结构与更多样的 Arm 硬件形态。
参考资料
- Arm NN 官方文档:https://developer.arm.com/ip-products/processors/machine-learning/arm-nn
- Arm Compute Library 仓库:GitHub - ARM-software/ComputeLibrary: The Compute Library is a set of computer vision and machine learning functions optimised for both Arm CPUs and GPUs using SIMD technologies. · GitHub
- Arm NN GitHub 源码地址:GitHub - ARM-software/armnn: Arm NN ML Software. · GitHub