说明:WTM2101是首颗国际量产并商业化应用的存内计算芯片,本库围绕存内计算开发板WTM2101做算法部署教程。
算法部署实现Demo:
目录:
-
WTM2101 SDK
-
Tools
-
Witmem Studio
-
Docker软件
-
机器学习算法部署
-
语音识别算法部署
WTMDK2101-X3是针对WTM2101 AI SOC设计的评估板,包含:
(1)WTM2101核心板,即我们的存算芯片。
(2)和I/O 板:WTM2101运行需要的电源、以及应用I/O接口等。
witin_mapper是知存科技自研的用于神经网络映射的编译软件栈,可以将量化后的神经网络模型映射到WTM2101 MPU加速器上,是一种包括RiscV和MPU的完整解决方案,可以完成算子和图级别的转换和优化,将预训练权重编排到存算阵列中,并针对网络结构和算子给出存算优化方案,同时将不适合MPU运算的算子调度到CPU上运算,实现整网的调度,让神经网络开发人员高效快捷的将训练好的算法运行在WTM2101芯片上,极大缩短模型移植的开发周期并提高算法开发的效率。
Witmem Studio是由知存科技开发的一款全功能集成开发环境,包含客户识别的SDK推送功能,SDK包自动更新下载安装功能,内核自动识别语法高亮编辑器,面向不同功能的个性化工程创建功能,以及常规IDE所具有的项目工程管理,文件编辑、编译、调试等功能。
https://github.com/witmem/Witmem-Toolchain-WTM2101
\实验环境搭建*
\模块⼀:软件包下载及环境搭建*
\步骤一:搭建docker、mappper环境:*
①Linux下通过Docker直接下载,获取指令:
docker pull witin/toolchain:v001.000.034
②Window环境,可以通过docker desktop来使用docker:
- 下载安装Docker desktop(win10或以上):
Docker Desktop: The #1 Containerization Tool for Developers | Docker
- 通常需要更新WSL,下载链接如下,更新后需要重启生效
旧版 WSL 的手动安装步骤 | Microsoft Learn
- Docker desktop 基本使用教程:
Docker-desktop(Docker桌面版)——入门篇_dockerdesktop干嘛用的-CSDN博客
- Docker desktop通常默认安装在c:\Program File\docker,可以通过软连接的形式修改Docker安装路径:
如何将Docker(Windows桌面版)自定义安装目录_自定义docker安装路径-CSDN博客
5)在Docker desktop里,可以通过搜索获得witin_toolchain,我们需要的是034版本(ps:Hub反应慢可以开VPN获取,或者使用镜像路径,具体操作方式见3链接)
- 测试:
①:管理员模式下打开命令行窗口
docker run -it --name XXXX witin/toolchain:v001.000.034
②:默认进入workspace目录下,可以进入witin_mapper下执行测试脚本:
cd witin_mapper
python3 tests/python/frontend/onnx/witin/wtm2101/precision/XXXX.py
③:使用exit退出,再次进入可按如下操作:
④:通过docker ps -a获取容器id,然后打开进入容器
步骤二:搭建IDE环境*
①预先下载安装包,下载安装
②默认安装路径,直接点击安装
③从主菜单的File->Open…菜单,或者点击工具栏的
按钮,打开选择文件对话框,选择要打开的项目文件,即***.wmproject文件即可,点击【打开】按钮即可打开工程。如下图所示。
步骤三:其他需要安装的软件*
① 请确保安装以下环境:python, git, pytorch
步骤四:下载训练数据*
① 最新数据集在软件安装包中
动⼿实验: 基于WTM2101的算法部署*
模块⼀:简介*
1、WTMDK2101-X3介绍
WTMDK2101-X3是针对WTM2101 AI SOC设计的评估板,包含:
(1) WTM2101核心板,即我们的存算芯片。
(2) 和I/O 板:WTM2101运行需要的电源、以及应用I/O接口等.
WTMDK2101-X3 I/O 板示意图
模块⼆:搭建算法训练工程,完成算法训练与量化*
- 模型训练工程搭建:
提供DNN和DNN_DEEP两种网络结构的示例,
***\步骤一:\配置python/config.py,参数释义见代码注释。
***\步骤二:\运行python/train.py,模型训练完毕后,在models/net_type文件夹下生成bestModel.pth,此即我们的模型权重。
***\步骤三:\运行python/onnx_converter.py,在models/net_type文件夹下生成bestModel.onnx。此步骤即完成原始模型到知存onnx格式模型的转换。
***模块三:算法模型转换
1,Dcoker下 Mapper转换流程*
***步骤一:拷贝至指定文件夹
我们将mapper/input 拷贝至witin/toolchain:v001.000.034的指定文件夹下(通常为/home,需与gen_mapper.py文件里描述一致)
***步骤二:在workplace witin_mapper下执行gen_mapper.py
docker start id
docker attach id
cd witin_mapper
python3 /home/mapper/input/gen_mapper.py
***步骤三:在对应的output文件下获得输出
***模块四:算法模型烧写
***步骤一:系统连接
进行模型烧录和开发时,我们需要将JTAG,核心板,NPU烧写板连接好,并打开开关,如系统连接示意图所示。
***步骤二:
系统连接示意图
***步骤三:跳线帽连接:
如跳线帽连接示意图所示,按照红框标注进行跳线连接。含义解释:
跳线 | 编号 | 跳帽连接 | 含义 |
---|---|---|---|
1 | VIN | VSPK | Audio DAC 芯片供电,5V |
2 | 3.3V | AVDD | WTM2101芯片模拟供电,3.3V |
3 | 3.3V | IOVDD | WTM2101芯片I/O供电,3.3V |
4 | 0.9/1.2V | DVDD | 用 WTM2101BC 芯片时需接跳帽 |
5 | GND | BOOT0 | 启动模式,SRAM启动 |
6 | 32K | XTAL | 晶振 |
7 | RXD | P17 | 串口 |
8 | TXD | P16 | |
9 | PERIV | 3.3V | QSPI Flash、数字麦克风、晶振供电,与 IOVDD 选择一致,即3.3V |
10 | P13 | WS | I2S 功放的WS |
11 | P12 | CK | I2S 功放的CK |
12 | P10 | SDO | I2S 功放的SDO |
13 | P05 | DMDIN | 数字麦克风的Din |
14 | P06 | DMCK | 数字麦克风的CK |
跳线帽连接示意图
***步骤四:
使用project/ WitinProgramTool_WTM2101下的WitinProgramTool.exe进行模型权重烧写。烧写时的开发板接线请参考其他文档。
***步骤五:烧写指令:
.\WitinProgramTool.exe -m init
.\WitinProgramTool.exe -m program -i XXXX\map.csv -k 2
其中XXXX为步骤2.(3)中生成的mapper/output/map
示例:
***模块五:算法模型在芯片运行推理
**步骤一:
从库中下载知存IDE Witmem Studio。
**步骤二:
生成的mapper/output/register.c放在project/Model,使用Witmem Studio打开project/Project/SES-RISCV/Demo.wmproject。
**步骤三:Target->Download下载工程:
注:本demo所用为x3开发板,所用串口GPIO为16,17。若是其他开发板,请根据情况修改串口。
**步骤四:
打开tools中的串口工具,设置波特率115200,查看准确率输出
*至此,我们完成了语音识别从训练到部署的全流程,本教程结束。*
*AISHELL-WakeUp-1**数据集介绍*
AISHELL-WakeUp-1数据集是中英文唤醒词语音数据库,命令词为“你好,米雅” “hi, mia”,语音数据库中唤醒词语音3936003条,1561.12小时,邀请254名发言人参与录制。录制过程在真实家居环境中,设置7个录音位,使用6个圆形16路PDM麦克风阵列录音板做远讲拾音(16kHz,16bit)、1个高保真麦克风做近讲拾音(44.1kHz,16bit)。此数据库可用于声纹识别、语音唤醒识别等研究使用。
Gitcode links:https://gitcode.com/m0_58966968/WITMEM-Algorithm-Deployed-in-WTM2101/overview