首页 > 编程语言 >LNN工具链详解:在CSK6上运行你自己的AI算法

LNN工具链详解:在CSK6上运行你自己的AI算法

时间:2023-04-07 17:39:17浏览次数:48  
标签:bin weight linger AI 模型 thinker LNN 类别 CSK6

工具链简介

LNN(ListenAI Neural Network) 是聆思科技专为聆思 AIOT 芯片(目前支持 CSK6 系芯片)定制开发的AI生态工具链,它包含linger和thinker两个部分,其中linger是量化训练组件,thinker是轻量级推理引擎组件,两个套件相互配合实现了训练推理一体化。 LNN工具链已支撑聆思芯片在计算机视觉、语音唤醒、语音识别、离线翻译 等10多个 AI 应用场景中的产品落地。


工具链安装

linger/thinker都支持以下三种安装方式

  • 源码安装 (推荐)
  • pip包安装
  • docker镜像安装

注意:linger和thinker的环境配置有区别,不能使用同一个环境,需要分别安装配置 {.is-warning}

linger环境配置及安装

1.创建虚拟环境

conda create -n linger-env python==3.7.0 
conda activate linger-env

2.源码安装 (推荐)

git clone https://github.com/LISTENAI/linger.git 
cd linger && sh install.sh

3.根据requirements.txt文件安装所有依赖项

pip install -U pip 
cat requirements.txt | xargs -n 1 pip install

4.安装验证 启动python,输入 import linger 没有报错即为通过验证

LNN工具链详解:在CSK6上运行你自己的AI算法_AI


thinker环境配置及安装

1.创建虚拟环境

conda create -n thinker-env python==3.8.5 
conda activate thinker-env

2.源码安装 (推荐)

git clone https://github.com/LISTENAI/thinker.git

3.编译 gcc版本为5.4.0及以上,修改script/x86_linux.sh和test/auto_test.sh脚本中的CMAKE的路径, 版本建议为3.0及以上。执行脚本

cd thinker 
sh ./scripts/x86_linux.sh

4.根据requirements.txt文件安装所有依赖项

pip install -U pip 
cat requirements.txt | xargs -n 1 pip install

5.安装验证 启动python,输入 import thinker 没有报错即为通过验证

LNN工具链详解:在CSK6上运行你自己的AI算法_量化训练_02


工程简介

数据集介绍

PyTorch CIFAR100数据集是一个公共数据集,由10个超类别和100个子类别组成,每个子类别包含600个图像。它是CIFAR-10数据集的扩展版本,具有更多的类别和更大的规模。

  • 数据集大小:PyTorch CIFAR100数据集包含50,000个训练图像和10,000个测试图像。每个图像大小为32x32像素,并以RGB颜色模式表示。
  • 图片类型:每个图像属于100个子类别中的一个,每个子类别包含600个图像。子类别可以分为10个超类别。这些子类别包括不同类型的动物、植物、交通工具、家具和电子设备等。
  • 任务类型:任务是分类(100分类)。该任务是将每个图像分配到其正确的子类别中,其中每个子类别都属于一个超类别。因此,该任务涉及对具有较大类别数量的多类别分类问题的处理。

数据集下载地址: https://github.com/weiaicunzai/pytorch-cifar100.git

流程简介

下图为深度学习算法在芯片上落地的整个流程,LNN工具链贯穿整个流程,linger作为pytorch的一个量化训练组件,thinker包括离线分析打包模块和引擎执行器两个部分。为了确保计算图与芯片能够完美契合,避免在模型后期因为芯片硬件不支持而返工,LNN工具链会有一个模型规约性检查的步骤,如下图灰色剪头所示。

LNN工具链详解:在CSK6上运行你自己的AI算法_AI训练_03


合规性进行检查

单个算子限制

1.conv/deconv/pool相关算子共有限制

kernel_size = {1,2,3,4,5},支持kernel_h ≠ kernel_w 
stride_size = {1,2,4},支持stride_h ≠ stride_w 
pad_size = {0,1,2,3},支持四个方向pad独立设置 
in_w >= weight_w,同时in_h >= weight_h 
weight_w >= stride_w,同时weight_h >= stride_h 
pad_h_up >= weight_h,同时pad_h_down >= weight_h 
pad_w_right >= weight_w, 同时pad_w_left >= weight_w

2.deconv的限制

- stride_h(stride_w) = 2时,kernel_h(kernel_w) = {2,3,4,5} 
- stirde_h(stride_w) = 4时,kernel_h(kernel_w) = {4,5}

3.linearInt/BmmInt的限制 左边输入矩阵(M*N)对齐后大小不超过64KB 不同数据类型下对齐方式:

数据类型为8bit时,M按4字节对齐,N按8字节对齐; 
	数据类型为16bit时,M按4字节对齐,N按2字节对齐; 
	数据类型为32bit时,M按2字节对齐,N按2字节对齐;

4.transpose的限制

输入只支持2维/3维,且3维输入数据大小有限制。假设输入维度为NCHW,数据位宽为data_bytes,限制条件如下: 更多信息查看:tutorial at main · LISTENAI/thinker · GitHub

LNN工具链详解:在CSK6上运行你自己的AI算法_推理引擎_04

5.目前支持量化的op如下,更多限制请查看linger手册 linger/linger/docs/tutorial

LNN工具链详解:在CSK6上运行你自己的AI算法_AI训练_05


ONNX不支持的算子的示例
  • 动态形状(Dynamic Shape):ONNX不支持动态形状的模型,即输入和输出的形状不能动态改变。
  • 数据输入输出(IO):ONNX不支持数据输入输出操作,如文件读写和网络通信。
  • 动态图(Dynamic Graph):ONNX不支持动态图的模型,即不能动态改变计算图。
  • 部分算法的操作符:ONNX不支持某些算法的特定操作符,如TensorFlow的”tf.data"操作符等。
  • 自定义算子:ONNX不支持自定义算子,只支持ONNX标准规范中的算子。

注意:不同版本的ONNX可能会支持不同的算子,因此在使用时需要查看相应版本的文档。 {.is-warning}

模型大小限制
  • 运行内存share-mem不超过640KB
  • 单个模型大小整体不超过8M:PSRAM整体可用空间为8MB,内置FLASH可用空 间为8MB。


工程示例

1、浮点训练(约束训练)

我们基于pytorch-cifar100来进行功能展示 首先确保在当前环境下,浮点模型训练基于pytorch能够跑起来。

python train.py -net resnet50 -gpu

建议采用两阶段量化训练,对浮点训练的数据进行范围约束,只需添加少量代码. 为避免冲突,将tensorboard功能关闭。同样的指令开启训练,运行几个epoch后,在checkpoint/resnet50文件夹中生成了一个**.pth文件

2、量化训练
  • 加载步1中保存的浮点模型**.pth,修改约束代码,即可将浮点算子替换为量化算子。
  • 同样的指令开启量化训练,训练几个epoch后,同样在checkpoint/resnet50文件夹中
  • 生成了一个**.pth文件。
  • 使用linger的模型转换工具,将模型转换成onnx计算图。
3、导图打包

使用thinker离线工具tpacker对步2生成的onnx计算图打包 tpacker -g xx.onnx -d True -o model.bin 模型分析打包指令:

tpacker -g xx.onnx [-p venus] [-d True] [-m memory] [-o model.bin] 
-g :输入ONNX模型的路径,必须配置,目前仅支持从linger导出的计算图 
-p : 目标平台,目前只支持venus,选填项,默认为venus 
-d : 中间计算图导出开关,选填项,默认为False 
-m : 模型参数在venus上存放的位置,选填项,默认为psram,可选项有flash、psram 
-o : 输出的二进制模型资源路径,选填项,默认为./model.pkg

打包工具会对计算图进行图优化、模拟引擎执行以规划内存占用并将分析结果序列化到资源文件中


4、推理执行

使用调用示例工程test_thinker,指定输入数据、资源文件和输出文件名称即可运行模拟代码。

chmod +x ./bin/test_thinker ./bin/test_thinker input.bin model.bin output.bin 3 32 32
  • input.bin:输入的模型二进制数据
  • model.bin:打包生成优化后的模型二进制数据
  • output.bin:thinker引擎最终生成的二进制结果数据
  • 3 32 32 :c(通道),h(高度),w(宽度)

LNN工具链详解:在CSK6上运行你自己的AI算法_pytorch_06

(在终端显示输出output shape(1, 100)表明模型已计算完成,工程实例顺利跑通)


开源地址

linger和thinker也分别在github上开源,地址分别为:

https://github.com/LISTENAI/linger 
https://github.com/LISTENAI/thinker


更多学习资源

如果需要获取相关的学习资源、代码,

或者了解更多与嵌入式开发、AI芯片相关的其他课程,可以点击查看  目录导航


标签:bin,weight,linger,AI,模型,thinker,LNN,类别,CSK6
From: https://blog.51cto.com/u_15947017/6170121

相关文章

  • AI开发实践:关于停车场中车辆识别与跟踪
    摘要:本案例我们使用FairMOT进行车辆检测与跟踪、yolov5进行车牌检测、crnn进行车牌识别,在停车场入口、出口、停车位对车辆进行跟踪与车牌识别,无论停车场路线多复杂,小车在你掌控之中!本文分享自华为云社区《AI寻车》,作者:杜甫盖房子。本案例我们使用FairMOT进行车辆检测与跟踪、yolov5......
  • DolphinDB +Python Airflow 高效实现数据清洗
    DolphinDB作为一款高性能时序数据库,其在实际生产环境中常有数据的清洗、装换以及加载等需求,而对于该如何结构化管理好ETL作业,Airflow提供了一种很好的思路。本篇教程为生产环境中ETL实践需求提供了一个解决方案,将PythonAirflow引入到DolphinDB的高可用集群中,通过使用Ai......
  • 中国多位AI专家赞成马斯克等人呼吁暂停ChatGPT技术的快速发展
    一些中国内地和香港的人工智能(AI)专家响应全球科技老将的呼吁,敦促暂停开发比GPT-4更先进的AI技术,因为他们认为当前的进展速度“过快”可能会带来危险。上个月,研究人类社会技术风险的“生命未来研究所”(FLI)起草了一封公开信,特斯拉的ElonMusk、苹果联合创始人SteveWozniak和历史学家......
  • mybaits-plus优雅的实现数据权限
    前言项目使用mybaits-plus,所以在mybaits-plus的基础上增加数据权限的过滤mybaits-plus自带数据权限支持,但由于系统数据权限相对复杂,通过查看文档发现好像并不适用,且原项目版本低,所以最终还是通过自己的方式实现数据范围我们系统相对复杂,比如可以按机构/用户等多种维度过滤,并且可以......
  • A NAIVE CON2D CPU IMPL
    /******************************************************************************WelcometoGDBOnline.GDBonlineisanonlinecompileranddebuggertoolforC,C++,Python,Java,PHP,Ruby,Perl,C#,OCaml,VB,Swift,Pascal,Fortran,Haskell,Objective......
  • 安装wsl的必备操作——开启CPU虚拟化——WslRegisterDistribution failed with error_
    参考:https://www.cnblogs.com/smdtxz/p/16837946.htmlhttps://www.cnblogs.com/wenonly/p/17206040.htmlhttps://blog.csdn.net/qq_41460654/article/details/118026986  ======================================================  因为实验室需要炼丹,而炼丹要用ubun......
  • 5秒AI绘画超快出图,全球最快的Stable Diffusion
    StableDiffusion应该是目前最流行的两个人工智能项目之一,另外一个就是大名鼎鼎的ChatGPT了。最近抖音小红人刷屏的AI人物,基本都是这款软件做的,相信很多做设计的小伙伴都知道它,只需要描述一段文字,它就能帮你生成一张图片。 今天给大家分享的是:AI绘画StableDiffusion工具......
  • 【IDEA】IDEA打包时clean报错Failed to delete......
    现象:控制台报Failedtocleanproject:Failedtodelete原因:target文件可能时编译的文件被其他程序占用,导致资源无法回收,网络上找到的解决办法,在此做一下记录。解决方案:1.在开始搜索框中输入“资源监视器”----切换到CPU页面-----在关联的句柄的输入框中----输入target,回车,就能找......
  • COMP5125M Blockchain Technologies
    ModuletitleBlockchainTechnologiesModulecodeCOMP5125MAssignmenttitleCourseworkAssignmenttypeanddescriptionItisaprogrammingassignmentwherestudentsarere-quiredtodevelopsmartcontractsforpeer-to-peeren-ergytrading.RationaleTheaimoft......
  • multiple definition of `MainWindow::MainWindow(QWidget*)
     qt刚建好工程运行的时候没问题,后面写了一点东西之后,再运行就发现出现MainWindow重复,我不理解。  解决方法:删除重复的引用。 再重新构建一下就好了。 ......