手把手教你把训练好的算法模型部署到聆思CSK6大模型开发板上

前言

本文将介绍如何使用聆思CSK6大模型开发套件部署模型。之前发的文章介绍了通过模型修改和裁剪,得到适合csk6芯片运行的模型,并通过图像预处理脚本获得图片的二进制文件,将其输入test_thinker,最终获得引擎仿真推理出的图像分类结果。今天我们将进一步介绍如何在csk6多模态芯片上运行这个算法模型。

算法模型部署方案介绍

通过本次操作您将掌握如何部署pythorch-cifar100示例工程,以及如何替换使用您自己的模型,并了解到推理接口的相关信息。

项目整体流程是这样的:大模型AI开发套件摄像头采集图像,在csk6芯片上提取特征,通过调用Think API进行模型推理,最终获得推理结果。本次实践基于聆思维护与发布的大模型AI开发套件SDK。为方便大家跟随实践,所有必须的模型文件和集成的图像与处理与推理脚本都已经包含在项目中。pytorch-cifar100项目位于apps中的resnet目录下,模型文件存放于resources/images中,集成的图像的预处理和推理脚本位于src目录下的resnet18.c。

硬件介绍

首先确保您已经准备好CSK6的大模型AI开发套件,包括摄像头、调试USB口、触摸显示屏以及相关功能按键。

获取开发环境与SDK

目前我们需要进行准备工作,获取开发环境与SDK,针对命令行工具的安装,不同操作系统有不同的操作指令,请您根据文档自行安装。

安装命令行工具

请参照 https://docs2.listenai.com/x/xfI6rkpCKmW 完成 lisa zep 命令行工具的安装

安装后可以通过Lisa info zep检查当前开发环境,确保没有工具缺失。

获取SDK

命令行工具安装完成后执行一下命令:

git clone--branch v1.6.0
https://cloud.listenai.com/CSKG962172/duomotai ap.git

初始化SDK

进入到 duomotai_ap目录下,分别执行以下命令,使用 lisa 对项目进行初始化:

lisa zep init-app
lisa zep update

编译示例固件

  1. SDK初始化完成后,在 duomotai_ap 目录下,执行以下指令进行代码编译:
lisa zep build -b csk6_duomotai_devkit -s apps/resnet18 -p -- -DCONFIG_APLICATION_PACK_IMAGES=y

注:"DCONFIG_APLICATION_PACK_IMAGES=y"表示将所有相关运行资源打包在一个bin文件里,适合初次烧录使用。在平时的开发调试中,如果希望仅烧录程序本身可以将y改为n,节省烧录耗时。

    2. 最后开发套件的调试USB接口,打开开关,并使用这个命令进行烧录。

lisa zep exec cskburn -s PORT -C 60x000000 --verify-all ./build/zephyr/zephyr.bin -b1500000

其中的 PORT 代表开发套件连接到 PC上对应的串口号。例如:/dev/ttyUSB0。

效果测试

在执行以上步骤之后算法模型已经成功烧录到开发套件上。接下来我们可以测试实际运行效果。将开发板上的摄像头对准键盘,屏幕上会显示摄像头采集的图像并进行拍照。由图可以看到此时模型已经给出正确推理结果:Keyboard.

模型的替换

掌握如何编译上路现有资源之后,在开发过程中可以尝试将其替换成自己的模型进行推理。

  1. 打包成二进制之后的模型文件位于 resources/images/model.bin,您可以将它替换为自己的模型。其偏移值和长度在 boards/csk6 duomotai devkit.overlay 中定义
res_thinker_model_partition:partition@300000 {
label = "thinker_model";
reg = <0x00300000 2932416>;
};

注:更新配置文件csk6 _duomotai_devkit.overlay 的res_thinker_model_partition部分中的reg属性,偏移值0X00300000保持不变。除非特殊情况,例如新增硬件组件、更改硬件布局以适应新组件或者软件需求等。你需要将旧模型的大小2932416替换为新模型的大小,以字节为单位。

更换模型之后可以使用前述方法收入整个bin文件,也可以指定CONFIG_APLICATION_PACK _IMAGES=n ,使用cskburn单独上路模型文件:

lisa zep exec cskburn -C 6-b 1500000 -s PORT 0x300000 resources/images/model.bin

注意:其中 PORT 代表开发板在电脑上的串口号

推理接口介绍

Thinker 是聆思 LNN 工具链 在 CSK6 芯片上的执行器。Thinker 执行器本体在芯片的 CP 上运行,通过 Thinker 服务暴露给 AP 远程调用。

Thinker服务使用流程如下,包括初始化、启动、获取数据、加载模型、推理停止和您初始化等步骤。

当使用Thinker 服务时,首先需要初始化Thinker 服务,通过调用think_service_gcs_init()的函数完成服务的初始化工作。运行Thinker ,通过调用think service gcs start函数服务开始执行任务。当服务开始运行时,我们需要获取外部数据。例如使用摄像头采集图像,一旦获得所需数据,我们可以调用think_service_gcs_forward函数加载模型,并获取该模型的内存使用状况。这个函数负责加载适当模型,并将其应用于输入数据进行推理。在模型加载完成后,我可以输出推理结果,根据加载模型对获取的数据进行推理,并将结果输出到指定位置。如果有更多数据需要处理,我们可以回到获取数据的步骤,继续获取外部数据,这样我可以循环处理多个数据样本。

最后当我们完成所有数据处理任务后,我们需要停止运行think服务。通过调用thinker_service_gcs_stop函数,服务将停止执行任务。

最后一步是逆初始化Thinker 服务,通过调用thinker_ service gcs_deinit()函数,我可以进行逆初始化操作,释放服务所使用的资源。

这些API参考的具体内容可以参考文末的资料链接,这里只介绍相对比较关键的模型推理函数。

如图所示,服务的标准输入和输出数据类型为 tData。服务提供了一个thinker_service_gcs_forward(inputs,input_cnt,*outputs,*output_cnt)接口,可以传入一个或同时传入多个 input,等待引擎推理,并返回一个或多个 output。输入和输出的张亮个数由当前所加载的模型决定。

在函数中第一个参数input表示输入张量,第二个参数表示input_cnt输入张量的个数,第三个参数outputs为指向输出张量的指针,即为该次推理的结果。第四个参数output_cnt位置向输出张量个数的指针,会被赋值为模型的output数。

在实践中,首先创建输入数据结构体input,设置其数据类型、缩放因子和形状信息,并将输入数据的指针赋值给input.dptr,声明输出结果的指针output和输出数量变量output_cnt。最后调用thinker_service_gcs_fourworks,函数执行推理操作将结果存储在output中。

以上为算法模型部署到大模型开发板的相关讲解,可以结合实操视频理解:

【AI模型部署:将训练好的模型部署至开发套】icon-default.png?t=N7T8https://www.bilibili.com/video/BV1Tu4m1M7ha?vd_source=5bc4be50ddf65370d8b5cadb25a6e836

实例中使用的聆思大模型开发板的详细信息可以从官方开发文档了解:套件简介 | 聆思文档中心

<think>好的,我现在需要帮助用户了解AI模型的开发流程,特别是训练优化与部署的顺序,以及它们之间的关系。用户还提到了开发板,这可能涉及到模型在硬件上的部署步骤。首先,我应该回顾一下常见的AI开发流程,然后分步骤详细解释每个阶段的任务,并说明它们的顺序和相互影响。 首先,用户的问题是关于流程中的训练优化和部署的顺序,所以需要明确这两个阶段在整体流程中的位置。通常,AI模型的开发流程包括数据准备、模型设计、训练、优化、评估、部署等步骤。训练和优化通常是紧密相连的,优化可能发生在训练过程中(如超参数调整)或训练后的模型压缩(如剪枝、量化)。部署则是将训练好的模型应用到实际环境中,比如嵌入到开发板中。 接下来,我需要考虑用户提到的开发板部署。这可能涉及到模型转换和硬件适配,例如将训练好的模型转换为特定格式(如RKNN用于Rockchip芯片),并进行性能优化。这时候需要引用用户提供的参考文献中的内容,例如引用[3]提到模型训练后转换RKNN格式并在开发板部署,引用[1]和[2]也涉及模型部署到硬件的过程。 然后,我需要组织回答的结构,确保按照流程顺序逐步解释,并突出训练优化与部署的关系。可能需要分步骤说明,比如: 1. 数据准备与模型设计 2. 模型训练与初步优化 3. 模型评估与迭代优化 4. 模型部署准备(格式转换、量化等) 5. 开发板部署与硬件适配 6. 部署后的性能调优 同时,需要强调训练优化和部署并非完全线性,可能有循环迭代的过程,比如部署时发现性能问题需要返回优化模型结构或参数。 在回答中,要正确使用LaTeX格式,比如变量或公式用$...$,独立公式用$$...$$。例如,在解释量化时,可以提到将32位浮点数转换为8位整数,数学表达式可能写成$W_{float32} \rightarrow W_{int8}$。 还需要注意用户提供的引用,比如在讨论部署开发板时引用[1]、[2]、[3]。例如,在模型转换部分提到转换为RKNN格式时,引用[3]中的内容,或者在部署聆思CSK6开发板时引用[1]。 最后,生成的相关问题需要与用户的问题相关,可能涉及训练优化的方法、部署工具的选择、硬件限制对模型设计的影响等。 现在需要检查是否有遗漏的步骤,是否清晰地解释了训练优化和部署的顺序,以及如何相互作用。同时,确保语言符合中文习惯,结构清晰,分点明确,正确使用引用标记。</think>### AI模型开发流程:训练优化与部署顺序详解 AI模型开发流程可分为**训练优化**和**部署**两大阶段,二者遵循“先训练优化,后部署”的递进逻辑,但实际开发中常需循环迭代。以下是具体流程与关键环节: --- #### 一、训练优化阶段 1. **数据准备与预处理** - 数据收集:根据任务需求构建标注数据集(如分类标签、目标检测框等) - 数据清洗:去除噪声数据,处理缺失值,平衡样本分布 - 数据增强:通过旋转、裁剪、添加噪声等操作扩充数据集(例如对图像数据应用$X_{augmented} = T(X_{original})$) 2. **模型设计与训练** - 网络结构选择:根据任务复杂度选择CNN(如YOLOv10)、Transformer等架构[^3] - 超参数调优:通过网格搜索或自动调参工具优化学习率$\eta$、批量大小$batch\_size$ - 损失函数设计:例如交叉熵损失$\mathcal{L}_{CE} = -\sum y_i \log p_i$ 3. **模型压缩与加速** - **量化**:将32位浮点权重转换为8位整数($W_{float32} \rightarrow W_{int8}$),减少模型体积 - **剪枝**:移除对输出影响小的神经元或通道(例如按$|W_{ij}| < \theta$阈值裁剪) - **蒸馏**:用大模型(Teacher)指导轻量化小模型(Student)训练 --- #### 二、部署阶段 1. **模型格式转换** - 将训练框架模型(PyTorch/TensorFlow)转换为硬件兼容格式 - 例如RK3588开发板需转换为RKNN格式,聆思CSK6开发板需适配专用SDK[^1] 2. **硬件适配优化** - 内存优化:通过层融合(Layer Fusion)减少内存碎片 - 算力适配:针对开发板NPU特性调整算子(例如替换不支持的自定义算子) - 功耗控制:设置动态频率调节策略,平衡性能与能耗 3. **部署验证与调优** - 精度验证:对比开发板推理结果与原始模型的误差(例如$\Delta_{output} < 10^{-3}$) - 实时性测试:测量端到端延迟(End-to-End Latency)和帧率(FPS) - 稳定性测试:长期运行检查内存泄漏或计算异常 --- #### 三、关键交互关系 1. **部署约束反向影响训练** - 开发板内存限制 → 训练时需控制模型参数量 - NPU仅支持INT8计算 → 训练阶段需插入量化感知节点 2. **迭代优化流程** $$训练 \rightarrow 部署测试 \xrightarrow{发现性能瓶颈} 返回优化 \rightarrow 重新部署$$ --- #### 四、典型案例流程(以YOLOv10部署RK3588为例) ``` 数据标注 → 模型训练 → 评估mAP → 剪枝/量化 → 转换为RKNN → 开发板加载 → 摄像头实时检测 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值