前言

在《LNN工具链详解:在CSK6上运行你自己的AI算法》中通过LNN工具链获得了一个算法模型,并在PC上使用test_thinker进行了推理运行,最后如何在CSK6芯片上运行输出的模型呢?
thinker-csk-project就是用来帮助大家解决这个问题的。

工具简介

thinker-csk-project

项目仓库:项目 · 聆思智能 / wasm / thinker-csk-project · GitLab
支持将 LNN 输出的模型快速部署到 CSK6 芯片上并使用轻量级推理框架 —— Thinker进行推理执行
• 支持在芯片上调用Thinker API
• 支持业务应用使用模型进行推理执行
• 不需要反复编译CP(DSP+NPU)固件

  • ARM核主要承担的是业务相关的应用
  • 算法模型以及完整的推理执行实在DSP+NPU上

开发者只需要关注算法模型的部署并获取推理执行结果,不需要进行DSP核的固件开发

框架概述

在DSP核运行WASM应用,并通过WASM应用调用Thinker相关
API,从而释放NPU算力。

在WASM应用中包含模型文件,并在应用中调用Thinker执行器相关API,从而在CSK上执行推理。

快速上手指引

环境准备

  1. 环境依赖(Lisa zep 命令行工具)
    参考聆思文档中心环境搭建章节

  2. Sdk获取

  • wasi-sdk:wasm的编译工具链
  • wasm-thinker-sdk:集成了csk6 cp固件资源与工具、thinker API的sdk
export WASM_THINKER_SDK="/path/to/wasm-thinker-sdk"

export WASI_TOOLCHAIN_PATH="/path/to/wasi-sdk-17.0"
  1. 从聆思云拉取示例工程代码仓
git clone https://cloud.listenai.com/listenai/wasm/thinker-csk-project

编译

1. 编译wasm应用

cd app_wasm
lisa zep exec python $WASM_THINKER_SDK/tools/build.py

2. 编译zephyr应用(zephyr学习可参考本博客的相关文章,本次实践使用的是聆思CSK6012NanoKit)

cd app_zephyr
lisa zep init-app
lisa zep build -b csk6012_nano

烧录

  1. 烧录zephyr应用固件

    cd app_zephyr 
    lisa zep exec cskburn -s /dev/ttyUSB0 -C 6 0x0 ./build/zephyr/zephyr.bin -b 748800

  2. 烧录CP固件资源

    lisa zep exec cskburn -s /dev/ttyUSB0 -C 6 0x100000 $WASM_THINKER_SDK/resources/cp.bin -b 748800

  3. 烧录WASM应用

    cd app_wasm lisa zep exec cskburn -s /dev/ttyUSB0 -C 6 0x200000 ./build/app_wasm.aot -b 748800

查看串口日志

  1. 查看zephyr应用侧日志,连接Daplink,打开串口工具。
    若运行成功,显示如下:

  2. 查看CP/WASM日志,外接串口板到开发板RX(GPIOA15)和TX(GPIOA18),打开串口工具

开发指引

框架说明

thinker csk 示例工程师通过在DSP核上运行WASM应用。
如下图所示,ARM核上的Zephyr应用通过get、set两个方法与WASMget函数进行核间通信调用

在WASM应用中,通过zephyr应用set进来input数据,并通过thinker相关的API进行模型加载推理执行,最后把结果进行返回。

目录结构 -- WASM应用

main.c:文件为应用主入口。
model.h转换命令:
lisa zep exec python $WASM_THINKER_SDK/tools/bin2hex.py model.bin model.h

目录结构--zephyr应用

  • .sdk:该文件夹为执行 lisa zep init-app 进行zephyr应用初始化时创建,可查看west.yml查看当前zephyr应用的依赖。
  • boards:该文件夹为zephyr应用设备树overlay存放目录,csk6012_nano板型的overlay便是放置在此。
  • prj.conf:该文件为zephyr应用的KConfig配置,包含了当前zephyr应用所需开启/关闭的组件配置项。
  • src:该文件夹为应用源码,其中src/main.c为应用主入口。

关键实现

通过核间通信调用WASM应用的 set_input 和 get_output ,实现对模型推理的输入输出操作

WASM应用 -- API Reference

main.c中,主要include了"thinker/thinker.h" 头文件。
其中的函数声明,基本与Thinker的推理api一致。
开发者可看README中WASM应用章节的API Reference进行查阅。

总结

ARM核上的Zephyr应用通过跨核通信,让部署在DSP NPU上的WASM应用拿到业务侧的数据,并执行thinker的API进行模型的加载、数据的输入以及执行推理,最后把结果进行返回。

视频讲解

AI模型部署教程:在CSK6芯片上运行AI模型

CSK6芯片特性讲解


 关于聆思

聆思科技是一家专注提供智能终端系统级(SoC)芯片的高科技企业,目前推出的CSK6系AI芯片已适配Zephyr RTOS。

希望了解更多有关CSK6 AI芯片信息的伙伴也可以+V:listenai-csk 

欢迎各位同学与我们进行技术相关的探讨,大家一起进步吧!
 

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐