推理一个实用神经网络最低需要什么样的算力

Nano的算力是0.47TFLOPS;而最新的树莓派4只有不到0.1TFLOPS。我个人是打算后面自己设计一块K210开发板的,用于满足我个人的各种变态要求(主要是要狗迷你)。

关注我的同学都知道,我对项目一点都不挑剔,想玩什么就玩什么,而且很擅长给自己找麻烦。

由于我的工作是做AI的,所以前不久的一个项目中,我用STM32做了一个小模块,讨论了“推理一个实用的神经网络需要的最低算力是多少”的问题。 项目演示视频如下:

推理一个实用神经网络最低需要什么样的算力

在那个项目中,我在主频不到100MHz、SRAM只有32K的单片机上成功推理出一个自训练的CNN-SLR网络模型,效果还不错。

而这次我要做一个逆向操作:尽可能使用算力最强的MCU,看看它上面能运行多复杂的网络。

注意,我这里指定使用的是MCU,因此移动设备上的各种SoC不在讨论范围内。 原因是移动SoC之间的争斗太激烈了。 这个讨论将留到以后再讨论。 本文暂时不一一列举; 另一方面,由于两者不在同一个价格区间,不具有可比性。

为了介绍本文要使用的MCU模型,首先我们讨论一下嵌入式处理器的一个守恒定律,即功耗-性价比不能同时实现,如下图:

推理一个实用神经网络最低需要什么样的算力

稍微解释一下上图,由于物理定律的限制,我们可以认为:在其他一定条件下,性能和功耗肯定是成正比的。 更强的性能意味着更大的功耗,从而产生更多的电力。 热; 如果想要提升性能的同时保证功耗相同甚至更低,就只能改进芯片架构或者改进工艺技术,这也会增加成本。 因此,根据不同的应用方向,我们可以选择一些兼顾两者的硬件平台:

难道真的没有一个芯片平台可以同时实现这三者吗?

事实上,确实有。 本文的主角K210勉强算是其中之一。 这也是我这次选择折腾这个项目的主要原因。 接下来就请听我详细分析吧~

K210是什么?

K210是一家名为嘉楠耘智的公司去年推出的一款MCU,该公司曾经生产挖矿芯片。 其特点是芯片架构中包含自主研发的神经网络硬件加速器KPU,可以执行高性能的卷积神经网络。 手术。

推理一个实用神经网络最低需要什么样的算力

不要以为MCU的性能就一定不如高端SoC。 至少在AI计算方面,K210的计算能力其实还是相当可观的。 据嘉楠耘智官方介绍,K210的KPU算力为0.8TOPS。 作为对比,具有 128 个 CUDA 单元 GPU 的 NVIDIA Jetson Nano 的计算能力为 0.47TFLOPS; 而最新的 Raspberry Pi 4 的运算速度还不到 0.1TFLOPS。

当然,这个性能和一些旗舰级别的SoC还是有差距的:A76级别的CPU本身就已经变态了,更何况旗舰SoC还会配备用于异构计算的AI加速的硬件,比如高通的Hexagon DSP、苹果的Neural Engine、华为的达芬奇架构NPU等。在某些应用中,这些NPU甚至可以在数百W的功耗下实现接近桌面级GPU的计算能力(顺便提一下GTX1080Ti的双精度浮点数)计算能力为11.3TFLOPS),可以说是疯狂的。

值得注意的是,芯片的计算能力并不一定与模型推理速度成正比。 嵌入式AI的另一个核心是推理框架。 关于CPU架构,是否使用SIMD(ARM从v7开始支持NEON指令)、是否使用多核多线程、是否有高效的卷积实现、是否做了汇编优化等都会极大地影响CPU的性能。模型运行速度。 ; 对于DSP/NPU等硬件架构来说,是否对模型进行量化推理、量化的方法、内存访问的优化也会产生很大的影响。

K210其他参数如下:

该芯片采用BGA144封装,采用28nm工艺制造。 芯片功耗低至0.35W,成本仅20+人民币。

想想一块Arduino板要多少钱……Arduino的性能和外设都不如K210。

推理一个实用神经网络最低需要什么样的算力

芯片架构图

那么K210能做什么呢?

太多了,让你怀疑它是否真的只是一个单片机……人脸检测、物体识别、视频播放、声场成像、3D渲染,甚至可以在上面运行FC模拟器玩游戏…… 。

您可以搜索一些k210的应用视频演示。 相信你看完后一定会喜欢的。

现在芯片已经完成了,我们来介绍一下市面上已经有的几款K210开发板。

如何选择开发板

如果你看完上面的介绍后对K210感兴趣,那么我会推荐几款值得购买的K210开发板(如果不小心打广告,请支付广告费:D)。

其实我去年很早就收到了K210开发板。 这是别人发来的评估套件。 不过当时正好刚毕业,没有太多时间去乱搞,所以就推迟到了最近。 空仔细研究了一下。 还有一个原因是K210当时刚刚发布,软件生态还很不成熟。 不过,现在的情况已经好多了。 不仅有官方的IDE(还是开发版),甚至还有MicroPython等固件移植。 可玩性高很多,值得一玩。

我个人打算后期设计一款K210开发板,以满足我的各种个人需求(主要是迷你狗)。 不过,对于普通玩家来说,BGA芯片可能不适合DIY,所以大家可以按照我下面的建议购买,其中很多都是我亲自购买和尝试过的。

1.官方开发板套件-KD233

推理一个实用神经网络最低需要什么样的算力

这是迦南官方评估板套件。 好处是可以和官方IDE中的常规项目无缝对接(当然,如果你不打算使用官方IDE也没关系,后面软件部分会介绍)。 IDE程序中下载的示例可以直接烧录运行。 同时,板上的资源也相当多,包括摄像头、麦克风、液晶屏等,可以看到芯片周围有一圈跳线帽,将所有的IO都引出了。 您也可以自己移除跳线。 该帽通过杜邦线连接到其他硬件。

缺点也很明显。 这板子实在是太大了……反正我不喜欢。 虽然我买了,但只是用来验证官方原理图是否正确。 调试的时候我还是用其他的。 木板。

价格有点贵,所以想要自己设计硬件的同学可以购买,其他的不推荐。

2. Widora-AIRV2/BITK210开发板套件

推理一个实用神经网络最低需要什么样的算力

与第一块板完全相反,这是目前市面上最小的k210开发板,而且价格非常实惠。

该开发板采用核心板与底板分离的设计方式,适合想要自己制作硬件但又不会设计核心电路的同学。 核心板采用的封装为NGFF(Mini-PCIE)接口,将芯片最小的系统和电源IC集成到核心板中,其余功能全部通过金手指引出至基板。

可以看到K210正下方的核心板背面布置了很多滤波电容。 由于如此高的工作频率对电源的稳定性要求非常高,所以PCB基本上是按照ARM CPU的布局方式来设计的。

该板还配备了摄像头和 LCD,但默认摄像头型号与官方开发板略有不同。 官方的一款是OV5640,这款有OV2640。 当然,这两个摄像头是完全pin-to-pin的,可以自己通过修改软件驱动来更换。 屏幕也更换为更小的 2.4 英寸 ST7789 驱动 LCD。 个人还是觉得屏幕太大了(傲娇)。

还有一个缺点就是这个板子的配套软件资源很少(可以说没有)。 当然,只要是K210板子,各个公司的软件都可以使用,但是由于硬件的细微差别,需要自己修改。 一些源代码(例如GPIO编号等)。

总体来说还是很推荐的,性价比很高。 熟悉后适合作为以后项目的主打产品。

3.Sipeed Maixduino开发板

Sipeed是一家之前生产荔枝派的公司。 他们团队还推出了K210系列开发板,足以满足各种需求。 Sipeed Maixduino 就是其中之一。

推理一个实用神经网络最低需要什么样的算力

看这款开发板的名字里也有“duino”字样,请问它支持Arduino编程吗? ?

是的,无论惊讶与否。

目前基础库的功能已经实现。 有兴趣的同学可以先安装IDE来体验一下。

Maixduino显然是为了兼容Arduino接口而设计的。 该板是标准 UNO 类型。 与上面两款开发板相比,它多了一个ESP32模块(ESP32也是网红硬件)。 具有官方开发板的所有功能。 是的,它很小。

值得一提的是,该板上配备的邮票孔核心板可以单独购买,称为M1 Module,下面会介绍。

4.Sipeed M1 开发板套件

推理一个实用神经网络最低需要什么样的算力

该板使用上面的M1模块。 采用核心板加底板的方式。 它比上面那个小得多。 同时将所有IO引出。 可以看作是最小系统孔板。 我个人比较喜欢这个设计。 ,相比Widora的黑沉金板,也显得更好看。

板子也不算太贵。 Sipeed系列K210板卡最大的优势就是软件资源非常好。 WiKi官网、教程、源代码全部开放。 综合考虑硬件和软件条件,Sipeed的开发板是我最推荐大家购买的。

他们还有其他型号的K210开发板,就不一一介绍了。 如果你有兴趣,可以在淘宝上搜索一下。

编程环境

K210支持多种编程环境,从最基本的cmake命令行开发环境,到IDE开发环境,再到Python脚本开发环境,下面将分别介绍。

这些开发方法没有优点或缺点。 有的人喜欢用命令行+vim,有的人喜欢IDE图形界面,还有的人根本不关心编译环境,认为人生苦短,只想写Python。

一般来说,C语言+官方库等比较基础的开发方式会自由度较大,可以充分利用芯片的各种外围功能,但开发难度比较高,流程繁琐; 编写脚本等更顶层的开发方式,虽然非常方便,甚至不需要下载程序的过程,但程序功能的实现极度依赖MicroPython的API更新,很多高级系统功能无法实现用过的。

1.命令行开发环境

首先,K210官方的SDK支持两种开发模式:FreeRTOS和Standalone(裸机)。

选择哪种模式取决于个人喜好。 如果您之前使用过FreeRTOS,您应该能够快速熟悉SDK的相关接口。 我个人更喜欢使用单片机的裸机开发模式,因为如果我想运行一个操作系统,我会倾向于使用可以运行完整Linux系统的开发板,比如我自己制作的这个Linux-Card。

如果使用命令行开发,建议使用Linux环境(Windows下使用命令行总感觉怪怪的)。 下面介绍如何搭建环境。

1.1 下载SDK

到官网资源下载页面下载对应的SDK:

推理一个实用神经网络最低需要什么样的算力

1.2 安装工具链

安装 build-essential 以获取 make 工具

$ sudo apt install build-essential

安装cmake

$ sudo apt install cmake

从看知官网下载Ubuntu版本工具链,放到/opt目录下并解压。

推理一个实用神经网络最低需要什么样的算力

$ sudo mv kendryte-toolchain-ubuntu-amd64-8.2.0.tar.gz /opt$ cd /opt$ sudo tar -zxvf kendryte-toolchain-ubuntu-amd64-8.2.0.tar.gz

打开~/.bashrc文件,在文件末尾添加以下行,并将/opt/kendryte-toolchain/bin目录添加到PATH环境变量中

导出 PATH=$PATH:/opt/kendryte-toolchain/bin

让改变生效

$ 源 ~/.bashrc

1.3 编译hello world工程

从 Kendryte Github 下载 kendryte-standalone-sdk

$ git 克隆:kendryte/kendryte-standalone-sdk.git

hello world 项目位于 kendryte-standalone-sdk/src/hello_world 目录中。

创建构建目录并输入:

$ mkdir 构建 && cd 构建

运行cmake

$ cmake .. -DPROJ=hello_world -DTOOLCHAIN=/opt/kendryte-toolchain/bin

编译

$ 制作

build目录下会生成一个.bin文件,然后将此文件烧录到芯片中。

1.4 烧录固件

K210使用串口ISP来下载程序(也支持J-Link调试,但个人觉得没有必要,这里就不介绍了)。

IO_16用于启动模式选择。 上电复位时,拉高进入FLASH启动,拉低进入ISP模式。 复位后,IO_0、IO_1、IO_2、IO_3为JTAG引脚,IO_4、IO_5为ISP,即UART0引脚。

上面介绍的K210开发板都会板载USB-TTL串口芯片,所以板子可以直接连接电脑,选择串口号,然后下载程序,体验和Arduino一样。 只不过下载过程需要使用一个叫K-Flash的下载工具。

K-Flash软件也可以从上面的官网地址下载。 软件操作界面非常简单。 只需选择bin文件、板子型号、串口号,然后点击下载即可。

推理一个实用神经网络最低需要什么样的算力

1.5 封装Kfpkg固件

K210的固件包主要有两种格式:.bin和.kfpkg。

.kfpkg可以包含多个.bin文件或模型文件,可以方便地将程序固件和网络模型文件打包在一起进行一次性刻录。 烧录方法与bin文件相同,只是使用K-Flash。 以下是制作 kfpkg 文件并使用它的方法:

创建您自己的 .kfpkg 文件

.bin 文件是固件的内容,作为参数传递给刻录软件。 软件默认会烧录到flash的0地址。 完成后重启即可运行。

但有时我们需要将其他二进制文件烧录到闪存中,例如模型、文件系统或我们自己定义的其他数据。 这时候我们就需要指定烧录地址。 光靠.bin文件烧写工具并不知道我们要烧写什么数据到flash某处,打包成.kfpkg格式的文件就是解决这个问题的。

kfpkg由3部分组成:

例如,如果我们要将名为XXX.bin的固件和其他文件YYY.bin同时下载到Flash的0xA00000地址,则需要编写一个flash-list.json文件,其内容如下:

推理一个实用神经网络最低需要什么样的算力

注意 sha256Prefix 选项。 固件需要验证,所以为true,但其他数据(比如型号数据)不需要验证,所以为false。

最后将这三个文件(XXX.bin、YYY.bin、flash-list.json)压缩成一个zip文件,然后将后缀名改为.kfpkg,以便烧录工具能够识别并根据烧录到flash中到指定地址。 。

2.IDE开发环境

对于想要在Windows下进行开发的同学,可以使用官方提供的IDE,这也是我最常用的打开方式。

官方IDE是基于Visual Studio Code开发的,非常好用。 最重要的是有自动代码补全:D.

推理一个实用神经网络最低需要什么样的算力

2.1 下载IDE

到这个地址下载:

肯德利特

推理一个实用神经网络最低需要什么样的算力

下载后会自动连接互联网更新组件。 点击下载官方例程,顺序如下:

推理一个实用神经网络最低需要什么样的算力

IDE的优点是它可以自动化很多依赖操作,像这样:

推理一个实用神经网络最低需要什么样的算力

然后就可以编译并下载了:

推理一个实用神经网络最低需要什么样的算力

如果编译报错,首先确认你已经点击安装了所有依赖。 另请记住,在尝试再次编译之前,请单击编译左侧的垃圾桶图标来清理项目。

IDE下方的那排按钮其实就是顶部菜单栏Kendryte选项下的内容。

另外值得注意的是,如果使用IDE的Flash Manager下载文件,一定要记得检查swap endianness,否则烧入的格式会有问题,切记! 3.MicroPython开发环境

上面介绍的两种开发环境都是编写代码然后编译下载。 这里介绍的方法只需要下载一次固件,然后就可以使用串口与Python交互,也可以将脚本保存在SD卡中然后启动运行。

该脚本化交互式固件基于名为 MicroPython 的开源项目。

MicroPython是一个基于Python3语法的解析器。 它包含了Python3的大部分基本语法。 它主要运行在性能和内存有限的嵌入式芯片上(第一个流行的是STM32)。 请注意,Micropython 不包括 Python3。 所有语法。

推理一个实用神经网络最低需要什么样的算力

MaixPy是一个将Micropython移植到K210的项目。 支持MCU常规运算,同时集成机器视觉、麦克风阵列等模块,快速开发智能应用。

MaixPy项目的开源地址:

刀槽花纹/

推理一个实用神经网络最低需要什么样的算力

Micropython可以让K210上的编程变得更简单、更快捷。 例如,如果我们需要查找I2C总线上的设备,只需要使用以下代码即可实现:

推理一个实用神经网络最低需要什么样的算力

同样,要实现呼吸灯,只需要以下代码:

推理一个实用神经网络最低需要什么样的算力

实时拍照:

推理一个实用神经网络最低需要什么样的算力

简而言之,它非常简单且易于使用。 有兴趣的同学可以去官方WiKi和教程网站:

关于 MaixPy · MaixPy 文档

推理一个实用神经网络最低需要什么样的算力

总结

本文介绍了K210从芯片架构到开发板选型再到软件开发环境搭建的基本知识。 这个KPU实际上有很多有趣的应用。 我会在后续的文章中介绍更多,包括SDK里面的各个模块如何使用,以及如何将自己的AI模型部署到K210上运行。

同时,我自己也在设计一个新的开发板(已经完成,见下面视频)。 届时该项目也将开源。 可以期待一下~有兴趣的同学可以关注。

推理一个实用神经网络最低需要什么样的算力

单片机

华维林北为什么要用C语言作为单片机开发语言而不用汇编语言

2024-5-1 1:04:47

单片机

8051介绍单片机C语言的优越性和坚固性的因素

2024-5-1 2:02:54

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索