AI模型训练部署:在CSK6芯片上运行你自己的AI模型
  m9kCQSVmQX0i 2023年11月02日 17 0

前言

在《LNN工具链详解:在CSK6上运行你自己的AI算法》中通过LNN工具链获得了一个算法模型,并在PC上使用test_thinker进行了推理运行,最后如何在CSK6芯片上运行输出的模型呢?

thinker-csk-project就是用来帮助大家解决这个问题的。

AI模型训练部署:在CSK6芯片上运行你自己的AI模型_pytorch


AI模型训练部署:在CSK6芯片上运行你自己的AI模型_AI_02

工具简介

thinker-csk-project

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

AI模型训练部署:在CSK6芯片上运行你自己的AI模型_量化训练_03

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

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

框架概述

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

AI模型训练部署:在CSK6芯片上运行你自己的AI模型_AI_04

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

AI模型训练部署:在CSK6芯片上运行你自己的AI模型_pytorch_05


快速上手指引

环境准备

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


  1. 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,打开串口工具。若运行成功,显示如下:

AI模型训练部署:在CSK6芯片上运行你自己的AI模型_量化训练_06

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

AI模型训练部署:在CSK6芯片上运行你自己的AI模型_AI_07

开发指引

框架说明

thinker csk 示例工程师通过在DSP核上运行WASM应用。

如下图所示,ARM核上的Zephyr应用通过get、set两个方法与WASMget函数进行核间通信调用

AI模型训练部署:在CSK6芯片上运行你自己的AI模型_AI_08

在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

AI模型训练部署:在CSK6芯片上运行你自己的AI模型_AI_09

目录结构--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为应用主入口。

AI模型训练部署:在CSK6芯片上运行你自己的AI模型_AI芯片_10

关键实现

AI模型训练部署:在CSK6芯片上运行你自己的AI模型_AI芯片_11

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

WASM应用 -- API Reference

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

AI模型训练部署:在CSK6芯片上运行你自己的AI模型_量化训练_12

总结

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

AI模型训练部署:在CSK6芯片上运行你自己的AI模型_量化训练_13


更多学习资源

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

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

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
m9kCQSVmQX0i
最新推荐 更多