单芯片没有神经网络加速器NPU可以玩微型AI应用吗?

电子说

1.2w人已加入

描述

讲到AI相信大家第一时间多半是联想到大型语言模型(LLM)和生成式AI(genAI, AIGC)应用,可以对话聊天、查询数据、生成文章图像和音乐,而这些应用多半需要用到极大的云端算力才能完成。

对于微型AI应用,如语音唤醒(语音命令)、异常侦测(振动、异音、环境传感器)、运动侦测(手势、跌倒)、影像分类、影像对象侦测、影像姿态侦测(全身、手指)等,通常可利用单芯片(MCU)或微处理器(MPU)配合较小的AI模型就有机会办到边缘(离网)就完成推论工作。

在之前的文章中提到,AI推论主要都是在进行巨量的矩阵乘加运算(MAC),就是「a×b+c」。而加速计算方式可使用「提高工作频率速度」、「平行/向量指令集加速」、「多核心加速」、「NPU神经网络加速器」等硬件加速作法。

而一般单芯片在单核CPU的情况下,最容易达成的作法就是前两项,而本文将从「平行/向量指令集加速」的角度来为大家说明如何在没有神经网络加速器NPU时也能顺利玩微型AI应用。

1. Arm精简指令集的演进

目前市售32bit单芯片大约有八到九成都是使用Arm Cortex-M系列硅IP)完成的,不同系列分别对应到不同的指令集(ARMv6-M~v8.1-M),而「-M」就是指将该版本指令集浓缩后专门提供给单芯片使用的。相关指令集对应的IP如下所示。

ARMv6-M: Cortex M0(2009) / M0+(2012) /M1(2007)

ARMv7-M: Cortex M3(2004)

ARMv7E-M: Cortex M4(2010) / M7(2014)

ARMv8-M Baseline: Cortex M23(2016)

ARMv8-M Marnline: Cortex M33(2016) /M35P(2018)

ARMv8.1-M: Cortex M55(2020) / M85(2022) /M52(2023)

单芯片

Fig. 1 Arm Cortex-M 系列指令集对照表。

2. Cortex-M指令如何加速计算

其中「v7-M」指令集就开始支持单频率乘加指令MLA,即将原来需要二道指令MUL, ADD分别计算乘法和加法变成一道指令,如此就能将计算速度提升两倍。到了「v7E-M」DSP扩展指令集时开始支持单指令多数据流(Single Instruction Multiple Data, SIMD),如QADD,QADD16, QADD8等,可将32bit分拆成2个16bit或4个8bit数据一起计算,如此就能增加2~4倍计算速度。

当再搭配工作频率从数十MHz提升到数百MHz后,对于语音唤醒词(Key Word Spotting, KWS), 传感器异常侦测(AnomalyDetection, AD), 运动手势辨识(Motion / Gesture Dectection)等微型AI应用大概都能完成,但若遇到有影像类应用则远远不够。

Arm Cortex-A系列为64bit CPU,所以其上有NEON(进阶SIMD)指令集,可处理128bit或64bit的SIMD计算,让计算速度更快,但这样的指令在32bit的Cortex-M并没有支持,所以Arm在v8.1M指令中加入Helium M型向量扩展指令(M-Profile Vector Extension, MVE)来提升Cortex-M单芯片的算力。

Helium可以处理128bit的向量运算(相当于SIMD16x8bit, 8x16bit, 4x32bit),共有8个向量缓存器,可处理整数、定点数(Q7,Q15,Q31)及浮点数(半精度FP16/单精度FP32)计算,有超过150个新指令。

若为了处理128bit的向量计算就把数据总线(Data bus)及单芯片内部静态内存(SRAM)都改成128bit宽是不合理的。最简单的作法是利用四个频率周期将128bit数据当成4个32bit的数据来处理,但这样就会变成和单指令周期32bit SIMD指令没什么不同。因此Helium在向量计算时可以将加载(VLDR)和乘加(VMLA)计算进行重迭,一边加载一边计算,这样就可以再加速一倍以上。如Fig. 2右下所示。

在Cortex-M55/M85采取双节拍(Dual Beat)作法,就是1个频率周期(Clock Cycle)读取二个节拍(Beat),即2×32=64bit,所以128bit的向量要2个频率周期才能处理完成,而1个频率周期处理的内容可以是下列组合。

2个32bit(Q31定点数或32位整数或32位浮点数)

4个16bit(Q15定点数或16位整数或16位浮点数)

8个8bit(Q7定点数或8位整数)

而Cortex-M52则采单节拍(Single Beat)作法,可处理长度则减半为32bit(1x32bit, 2x16bit, 4x8bit),128bit的向量需要4个频率周期才能处理完成。

单芯片

Fig. 2 Arm Cortex-M指令与加速计算示意图。

3. Helium指令集效能比较

目前有支持Helium指令的MCU共有四家公司,如下所示。

Cortex-M55:

ALIF – Ensemble E1(@160MHz), E3(@160MHz),E5(dual core,@160MHz, 400MHz), E7(dual core,@160MHz, 400MHz)

奇景(Himax) – WiseEye2 HX6538(dual Core, @150MHz, 400MHz)

新唐(Nuvoton) – NuMicro M55M1(@200MHz)

Cortex-M85:

瑞萨(Renesas) – RA8D1(@480MHz), RA8M1(@480MHz)

Cortex-M52:

None

以下就以Cortex-M7为基准(100%)和Cortex M55/M85/M52进行比较。如Fig. 3所示,横轴为传统性能(DMIPS/MHz),纵轴则为机器学习推论性能(ML Performance)。以M55为例,虽然传统性能较M7低,但机器学习性能却高出3倍,由此可看出Helium指令集提供的效能提升。

单芯片

Fig. 3 Arm Cortex-M 指令与加速计算示意图。

以上算力对于非影像的微型AI应用大致能满足,但若遇到影像类应用则单靠CPU的SIMD及MVE指令集可能还是不够。幸运地是以上提及的ALIF, Himax, Nuvoton的MCU都有内建Arm Ethos U55 NPU,这样就能将算力再推高数十倍,可以满足低分辨率、低频度的影像分类、对象侦测甚至姿态估测等应用。

小结

随着半导体技术的提升及配套的软件开发工具逐渐到位,利用单芯片提高工作频率及高度平行乘加运算(SIMD, MVE),开启了可以不依靠网络就能完成微型AI运算的契机,使得平价、低耗能的边缘智能装置(Edge AI & TinyML Device)有了更大的创意发挥空间,让智慧生活、智能照护、智能制造、智能建筑等更多应用能快速实现。





审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分