English | 简体中文
linger是由安徽聆思科技和合肥智能语音公司联合开源的的神经网络量化训练组件,是聆思科技开源的AI生态工具链LNN(ListenAI Neural Network)的一部分,结合另一个聆思开源的推理引擎框架thinker可实现产业级深度学习训练推理一体化平台,集深度学习量化训练和引擎推理、LUNA器件库和丰富的辅助组件于一体。LNN是专为聆思AIOT芯片(目前只支持CSK60xx系列)定制开发,助力开发者轻松在聆思VENUS芯片上快速上线AI业务,帮助越来越多嵌入式尤其是AIOT产品实现AI赋能,助力产业智能化升级。目前LNN工具链已支持聆思芯片在计算机视觉、语音唤醒、语音识别、离线翻译等10多个AI应用场景中的产品落地。
linger基于PyTorch对聆思LUNA系列芯片进行深度定制,在神经网络训练的前向过程中将激活和权重量化到8bit,通过参数调整得到量化无损的8bit模型
linger 是基于 PyTorch 的量化方案,在原始浮点训练代码中加入一行 linger 相关代码即可完成进行量化算子的替换,使用原始的训练流程即可完成量化训练,无需其他复杂设置
linger 基于 PyTorch 进行量化算子的搭建,因此只要符合 PyTorch 拓展算子的规范,你可以添加任何量化算子到 linger 中来完成你的量化需求
linger 后端适配 thinker 推理引擎,thinker 推理引擎为CSK60XX而生,功能完善,量化训练与推理过程可无缝衔接,同时训练推理二进制一致得到保证
- 安装:支持pip、源码、docker三种安装方式
- 浮点-定点两阶段量化训练: 先进行浮点网络的约束训练,再针对量化友好的浮点模型进行量化训练微调
- 浮点-定点两阶段量化训练方案详解
- onnx导出教程:将量化无损的PyTorch模型导出为ONNX格式的模型
- 权重分析工具使用及量化onnx导出错误调试
AI算法落地基本涵盖六个阶段:模型规约性检查、浮点训练、量化训练、模型打包、模拟引擎执行、固件烧录并芯片运行。其中固件烧录并芯片运行需要在聆思的开发板上来完成,如有需要请与我们联系,这里不做进一步介绍。其它五个阶段的流程示例图如下:
其中模型规约性检查的功能是穿插在量化训练和模型打包中来完成的。
我们先假设模型结构与底层硬件完全适配,介绍流程中各个阶段,再介绍模型规约性检查的具体实现(实际开发过程中规约性检查要在模型结构初步进行,避免后续工作返工)。
我们基于pytorch-cifar100来进行功能展示
首先确保在当前环境下(建议linger-env),浮点模型训练基于pytorch能够跑起来。
python train.py -net resnet50 -gpu
建议采用两阶段量化训练,对浮点训练的数据进行范围约束,只需添加少量代码.
为避免冲突,将tesnorboard功能关闭。同样的指令开启训练,运行几个epoch后,在checkpoint/resnet50文件夹中生成了一个**.pth文件
加载步1中保存的浮点模型**.pth,修改约束代码,即可将浮点算子替换为量化算子。同样的指令开启量化训练,训练几个epoch后,同样在checkpoint/resnet50文件夹中生成了一个**.pth文件。 使用linger的模型转换工具,将模型转换成onnx计算图。
切换到thinker-env环境,使用thinker离线工具tpacker对步2生成的onnx计算图打包,这里我们以训练好的resnet18模型为例,进行打包
tpacker -g demo/resnet18/resnet18-12-regular.onnx -d True -o demo/resnet18/model.bin
这里使用到的资源可以从thinker/demo/resnet18中获取
使用调用示例工程test_thinker,指定输入数据、资源文件和输出文件名称即可运行模拟代码。
chmod +x ./bin/test_thinker
./bin/test_thinker demo/resnet18/input.bin demo/resnet18/model.bin demo/resnet18/output.bin 3 32 32 6
注意:推理执行需要安装thinker源码,并完成编译。
该阶段不关注模型的效果,只关注模型的结构是否和底层硬件相适配,功能实现贯穿了1~4步
- 在步1中,对模型参数进行初始化或者训练几个epoch即可将模型文件导出,无需模型收敛。
- 步2中加载步1的模型文件,进行量化训练时,会对算子参数的合规性进行检查,如有不符合的设置,报错退出错误示例。用户根据报错信息修改层参数并返回步1,直至通过步2。
- 步3中加载步2的计算图,工具会对节点的tensor大小进行检查,如果tensor大小超限会报错退出。否则进入内存分析阶段,会在根目录下生成内存分析报告,并提示整体的flash/psram/share-memory占用。对于超过硬件限制的报错,用户可结合报错信息和内存分析报告来定位计算图中的超限的算子,返回步1进行模型结构调整,直至通过步3的打包流程。
至此完成模型规约性检查,确保了模型能够在芯片上能够跑起来。模型效率评估目前只支持在芯片上部署运行,具体需求可联系我们。
- 请参考RELEASE
- 鼾声检测[https://github.com/mywang44/snoring_net]
- 离线翻译[https://github.com/dwzhang00/Offline-translation]
- 二维码检测与识别[https://github.com/mywang44/YOLOv1_QRcode_Detection]
- linger 由 Apache-2.0 license 提供