您尚未登录。

#1 Re: 全志 SOC » 计划手写一份纯C版AI深度学习推理引擎,并支持硬件加速接口,大家有啥意见及建议,还请不吝惕教。 » 2020-10-22 02:13:28

大佬好,我一直也在维护一个轻量的定点推理库NNoM。https://github.com/majianjia/nnom
跟楼主的目标有部分重合。

NNoM 的初衷只是为了简化ARM这套CMSIS-NN的使用,针对10~100kB RAM的单片机做的。不考虑支持现有的各种模型文件或者protobuf因为他们太大,并且需要文件系统的支持。
ONNX 也是我之前考虑的框架,不过我一直没有精力能做下来,现在只支持了Keras的模型。

看了楼主的libonnx源码相当有感触。以我的经历,大概有几个难点

1. 支持绝大部分onnx的ops 需要相当大的工作量。
尤其是以后要适配各种硬件NPU时。各类单片机(比如K210)的硬件加速有着非常多的限制,输入层数,输出层数,卷积核大小等等。

2. 定点算子。常见的8bit, 16bit等定点算子在计算时要考虑各种溢出问题,因为有一些量化方法是允许计算结果大于定点数值,所以在做算子时还需要做计算的“饱和”而不是任其“溢出”。这部分如果不能使用相关的汇编指令,会降低算子的效率。定点算子还会牵扯到很多浮点没有的操作,比如qformat,offset 和 per channel quantization 等。

3. 定点RNN 类型的算子,相当麻烦。包括量化和算子本身。

以上难点基本上在定点算子部分,如果考虑先做一套浮点算子,应该很快能完成。
如果考虑到MCU级别的应用,还需要内存上做文章,做层与层之间的内存复用,避免运行态的动态内存分配等。

楼主已经迈出第一步,感觉做下去意义非常大,我之后有时间也会在github上给libonnx贡献代码:D

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn