简介
SyNAP 是一个软件工具,通过针对 Synaptics Astra 嵌入式处理器 中的 NPU 或 GPU 硬件加速器来优化设备端推理的神经网络模型。为此,它接收原始表示形式的模型(如 Tensorflow Lite、PyTorch 或 ONNX),并将其编译为特定于目标硬件的二进制网络图 .synap 格式,准备进行推理。
为 NPU 编译模型
使用提前编译为嵌入式应用编译模型通常可以通过单个命令完成。优化选项(如混合量化、异构推理)也可以在编译时通过 YAML 元文件 传递,并且可以对模型进行签名和加密以支持 Synaptics SyKURE™ 安全推理技术。
虽然针对目标硬件进行了优化,但预优化模型是特定于目标的,将在不同硬件上执行失败。
运行推理
有多种方法可以在 Synaptics Astra 硬件上使用编译后的 .synap 模型运行推理:
- 使用
synap_cli命令进行图像分类、目标检测和图像处理。 - 使用 Gstreamer 插件和 Python 示例进行流媒体处理(如网络摄像头目标检测)。
- 使用 C++ 或 Python 开发的嵌入式应用可以使用 SyNAP 框架 API。
开始使用 SyNAP 最简单的方法是使用预装在 Synaptics Astra 开发板上的示例预编译模型和应用程序。
JIT 编译
对于便携式应用(如针对 Android),您可能要考虑使用 JIT 编译 方法。这种方法使用 Tensorflow Lite 外部委托直接使用原始 .tflite 模型运行推理。
这提供了最大的硬件可移植性,但这种方法也有一些缺点。使用此方法需要在 TensorFlow 训练或 TFLite 模型导出阶段完成任何硬件特定的优化,这比使用 SyNAP 进行训练后量化要复杂得多。此外,首次推理时的初始化时间可能需要几秒钟,且不支持安全媒体路径。
模型分析和基准测试
SyNAP 提供分析工具以识别瓶颈并优化模型。这些包括:
- 整体模型推理时间
- NPU 运行时统计(如整体层和 I/O 缓冲区利用率)
- 模型分析(如每层运算符类型、执行时间、内存使用)
您还可以找到参考模型和基准测试的完整列表。
NPU 硬件
SyNAP 旨在充分利用支持的神经网络运算符,以使用可用的 NPU 或 GPU 硬件加速设备端推理。NPU 本身由几种不同类型的功能单元组成:
- 卷积核心:专门用于执行卷积运算(int8、int16、float 16)。
- 张量处理器:专门用于执行高度并行运算(int8、int16、float 16)。
- 并行处理单元:128 位 SIMD 执行单元(较慢,但更灵活)。
- 内部 RAM:用于缓存数据和权重。
| 芯片 | 神经网络核心 | 张量处理器 | 并行处理单元 |
|---|---|---|---|
| VS640, SL1640 | 4 | 2 Full + 4 Lite | 1 |
| VS680, SL1680 | 22 | 8 Full | 1 |