

国产化的浪潮已经涌动了数年。然而,安防行业在芯片国产化替换的过程中,并未像金融业那样顺利无阻。
"雪亮工程"等类似项目的推动力无法忽视,但芯片本身的实际性能也是下游集成商的重要考量因素。
作为第三方的硬件模型库,我们将从业务部门的视角出发,实际测试并评估国产化芯片在模型设计、推理和 SDK 等多个维度上的性能,我们还将提供相应的测试源码和运行日志。期望这些信息最终能为芯片选型提供有价值的参考意见。
硬件模型库链接:
https://platform.openmmlab.com/deploee
(欢迎使用,文末点击阅读原文可直达)
1. 产品介绍
AX620A 是爱芯元智推出的第二代视觉芯片,它配置了 4 核 Cortex-A7 CPU 和 3.6Tops@int8 NPU 算力。
在 int4 模式下,AX620A的计算能力将提升至 14.4 Tops。然而,由于 int4 对模型设计有特定要求,并且开源官方文档尚未明确用法,因此本次测试中我们并未考虑这部分内容。

单纯的计算单元是无法实际测试的。为此,我们选用了 Maix-III AXera-Pi,这款开发板由 sipeed 基于 AX620A 芯片设计而成。至 2023 年 8 月 7 日,核心板的零售价格为 279 元人民币。单板(核心板+底板)配备了一个 USB3.0 基底板、核心板、WIFI 模块、以太网接口、摄像头,以及一块 5 寸显示屏,功能齐全,方便工作使用。

我们获得设备后,首先对其 CPU 性能进行了测试。我们使用的测试工具是 megpeak(https://github.com/MegEngine/megpeak),这是一款能够测量计算峰值性能的工具,支持 arm、x86 和 OpenCL 架构。
在本次测试中,我们对 CMakeLists.txt 进行了修改,所使用的 gcc 编译参数和相关说明如下:

这是我们得到的结果:
there are 4 cores, currently use core id :0
bandwidth: 1.861453 Gbps
padal throughput: 5.411672 ns 0.739143 GFlops latency: 6.405562 ns :
padd throughput: 1.509807 ns 2.649345 GFlops latency: 5.024015 ns :
mla_s32 throughput: 5.275521 ns 1.516438 GFlops latency: 5.290761 ns :
mlal_s8 throughput: 2.923057 ns 5.473721 GFlops latency: 5.025521 ns :
mlal_s16 throughput: 2.770953 ns 2.887093 GFlops latency: 5.106042 ns :
mlal_s16_lane throughput: 2.765276 ns 2.893020 GFlops latency: 5.027750 ns :
mla_f32 throughput: 5.354490 ns 1.494073 GFlops latency: 10.047442 ns :
mul_s32 throughput: 5.393568 ns 0.741624 GFlops latency: 5.274667 ns :
mul_f32 throughput: 5.387370 ns 0.742477 GFlops latency: 5.398443 ns :
cvt throughput: 5.377729 ns 0.743808 GFlops latency: 5.352896 ns :
qrdmulh throughput: 5.275443 ns 0.758230 GFlops latency: 5.353959 ns :
rshl throughput: 2.763766 ns 1.447301 GFlops latency: 5.023833 ns :从测试结果可以看出:
用户可基于这些数据——假设内存搬运和计算已经进行了良好的优化,互不干扰——来估算图像处理代码的执行时间下限:例如,如果代码中有大量的 fp32 计算,就可以将计算量除以 1.49 gflops;如果主要进行内存拷贝操作,则除以内存带宽。
接下来我们开始评估 NPU 性能。
AX620A 支持 1_1 模式,即一半的计算能力用于夜视增强,另一半用于 AI 计算。考虑到安防场景通常需要在夜晚提升画质,所以我们后续的测试都会启用 1_1 模式。如果需要与其他类似芯片比较 qps,AX620A 的结果需要自行乘以 2。
2. 单算子测试
AX620A 的模型转换工具名为 pulsar,它是一个存在于 docker image 中的 python 脚本。目前,pulsar 支持 46 种onnx 算子,完整的支持列表可以在此处查看:https://pulsar-docs.readthedocs.io/zh_CN/latest/appendix/op_support_list.html
2.1 测试过程
尽管我们无法对每一种算子都进行测试,就像 GEMM 可以被拆分成多个 GEPP/GEBP 一样,算子也可以被拆解成基本操作。根据计算过程,我们将这 46 种 onnx 算子划分为 9 类,并从每一类中挑选出一个进行测试。

接下来,我们使用 torch2onnx 为这 9 个算子生成相应的 onnx 模型。由于算子参数众多,为了避免测试时间过长,我们将 conv 的输入 shape 固定在 224x224;而其他模型则分别采用112x112, 384x256, 1080x1920 三种尺度进行测试。最终,我们得到了 170 个单算子 onnx 模型,生成这些模型的torch 代码可以在以下链接中找到:https://github.com/tpoisonooo/deploee-benchmark/tree/main/operator
然后,我们使用 pulsar 转换这些 onnx 算子。我们成功转换了 139 个模型,同时有 28 个模型在转换过程中出现了明确的报错日志,其中 1 个 softmax 转换过程中出现了卡死现象。
最后,在成功运行的模型中,我们统计不同算子的能效比,该指标表示每微秒实际完成的 MAC(乘累加)数量。我们按照能效比进行排序,以下是部分的结果:

2.2 结果分析
测试结果与官方提供的高效算子设计指南((https://pulsar-docs.readthedocs.io/zh_CN/latest/appendix/efficient_op_design_guides.html)相符,并且我们还观察到了更多的现象:
完整的测试结果,包括转换过程的日志、统计表格和执行脚本,都可以在这里找到:https://github.com/tpoisonooo/deploee-benchmark/blob/main/ax620a/opr_test.md
用户可以根据表格中的 mac_util 和 efficiency 调整模型的参数。
3. 模型测试
硬件模型库含有 640 个由 OpenMMLab 算法转换出的 onnx 模型,这些模型涉及到 3D 检测、分割、关键点识别、OCR 等多种任务,非常适合用来测试视觉芯片软件栈的完备程度。
由于 AX620A不支持动态 shape,因此无法支持 mmdet3d-voxel、mmaction 以及 LLaMa 模型。因此,我们筛选出318 个固定输入尺寸的 onnx 模型进行测试。
然而,在一些模型的转换过程中,由于某些算子未实现,导致出现了报错。以下是缺失较多算子的情况:

最终,我们成功转换了 60 个模型。下面我们来看一下 resnet 系列模型在 AX620A 上的运行耗时:

相比于 resnet50 在 jetson nano 上的运行耗时超过 100ms,axera-pi 的速度提升了 5 倍,且其零售价格仅为前者的 1/3,高性价比表现显而易见。
测试使用的 onnx 模型都可以在硬件模型库中搜索并下载,执行日志和结果已经发布在以下链接中:https://github.com/tpoisonooo/deploee-benchmark/blob/main/ax620a/model_test.md
4. SDK 测评
视觉 SDK 通常由多个 pipeline 组成,其输入为图片或视频,输出为结构化数据。
由于图片解码往往不会成为性能瓶颈,因此在开发视觉 SDK 时,我们需要考虑视频解码、图像操作以及与 pipeline 的适配度。
4.1 解码
在安防场景中,最常用的视频格式是 h.264 和 h.265,主要采用 main 或 high profile,标准尺寸为 1088x1920。尽管我们本次测试使用的视频帧率为 60fps,但这并不会影响我们得出的最终结论。
$ ffmpeg -i 1088x1920.h264
..
Stream #0:0: Video: h264 (High 10), yuv420p10le(progressive), 1920x1088 [SAR 136:135 DAR 16:9], 57 fps, 59.94 tbr, 1200k tbn, 119.88 tbc我们对 ax-pipeline 源码进行了轻微修改,以测试在不同情况(如输出缩放、裁剪、翻转等)下的解码速度峰值。
这是因为在实际业务中,视频的宽高并不确定,在某些芯片的实现中,修正视频输出可能会导致解码速度下降,而使用更小的视频尺寸可以加速解码。因此,我们需要考虑到这些情况来测试解码速度。
以下是我们在 AX620A 上得到的测试结果:

如上所述,我们可以看到 AX620A 的视频解码速度几乎稳定在 60fps,且不受图像处理操作的影响。
4.2 图像处理支持度
影响 pipeline 吞吐量的第二个因素是图像处理速度。以常见的人脸识别为例,在进行识别之前,需要对人脸图像进行矫正。此时,是否能利用 CPU 和 NPU 实现高效的透视变换可能会决定 pipeline 的最大吞吐量。
下表列出了AX620A 在 IVPS(Video Image Processing Subsystem)中提供的图像处理算子,用户可以在以下链接查阅完整文档:
https://github.com/sipeed/axpi_bsp_sdk/tree/main/docs

由于缺少 WarpPerspective 和 TopK,要部署完整的人脸业务,可能需要调整图像矫正和特征工程实现。
5. 总结
从安防业务的视角出发,我们对 AX620A 进行了全面测试,涵盖了 CPU、算子、模型以及 SDK 等各个评价指标,并为此提供了详细的运行日志和脚本支持。
根据实验结果,我们得出以下总结:
1. 性价比:★★★★★
AX620A 的性能表现强劲,在与 jetson nano 同期产品的对比中,以不到其 1/3 的零售价和自身 50% 算力,就实现了超过 5 倍的性能提升。
2. 易用性:★★★★☆
pulsar 基于 docker 实现,用户无需进行复杂的安装配置,即可直接使用。同时,AX620A 提供的样例和文档齐全,为用户提供了良好的支持。但由于缺少芯片架构文档,使 AX620A 在透明度方面略显不足。
3. 模型兼容性:★★★☆☆
AX620A 对动态 shape 的支持有限;少数模型在 2 小时内无法完成转换,这些都反映出在兼容性方面还有待改进。
4. CV 算子和解码支持度:★★★☆☆
AX620A 能够满足基本的计算机视觉算子和解码需求,但 API 有使用条件限制。
如果 AX620A 能进一步优化 pulsar、提高模型兼容性等方面的表现,它有望成为一款完美的视觉 NPU 芯片。我们从业内渠道得知,这些问题已经在爱芯元智推出的第三代视觉芯片 AX650N 上得到解决,让我们一起期待它的表现。