# FMQL平台 AI模型开发扫盲:从模型训练到悟空开发板部署(yolov5实战)
FMQL平台 AI模型开发扫盲:从模型训练到悟空开发板部署(yolov5实战)
一、为什么要写这篇文章
对于大多数嵌入式软件工程师来说,第一次接触 AI模型部署平台 时,往往会遇到几个典型问题:
- AI模型
.pt/.pth文件到底是什么? - 为什么模型不能直接跑在芯片上?
json + raw是什么?- Icraft 编译到底在做什么?
- PC仿真和板卡运行有什么区别?
官方文档通常分为两类:
- 算法类文档(讲神经网络原理)
- 工程操作文档(教你运行 demo)
但缺少一类文档:
从嵌入式工程师视角,解释 AI 模型是如何一步步部署到芯片上的。
本文的目标是:
帮助嵌入式软件工程师快速扫盲 FMQL AI模型开发流程
本文使用:
tutorial-runtime-tt3.6.2
工程,并以 yolov5 模型 为例,介绍完整流程:
模型训练 → 模型编译 → PC仿真 → 板卡部署
二、FMQL AI开发整体流程
在 FMQL AI平台上运行一个 AI 模型,整体流程如下:
数据集
│
▼
模型训练 (PyTorch)
│
▼
模型文件 (.pt / .pth)
│
▼
Icraft 编译模型
(parse → optimize → quantize → adapt → generate)
│
▼
生成部署模型
(json + raw)
│
▼
PC仿真验证
│
▼
部署到开发板
│
▼
Runtime推理
如果用嵌入式开发类比:
| AI开发 | 嵌入式开发 |
|---|---|
| 训练模型 | 写代码 |
.pt模型 |
源代码 |
| Icraft compile | gcc编译 |
| json/raw | ELF |
| runtime | OS运行程序 |
本质就是:
把 AI模型编译成 AI芯片可以执行的指令
三、FMQL AI平台架构(简化理解)
FMQL100TAI 是一颗 AI FPGA SoC。
简化结构如下:
+-------------------+
| CPU |
| Linux + APP |
+---------+---------+
|
| DDR
|
+------------------+------------------+
| |
+------v------+ +------v------+
| FPGA | | NPU |
| 前处理/后处理 | | 神经网络计算 |
| ImageMake等IP | | Conv / MAC |
+-------------+ +--------------+
职责:
| 模块 | 作用 |
|---|---|
| CPU | 控制程序运行 |
| NPU | 神经网络推理计算 |
| FPGA | 前处理 / 后处理加速 |
典型推理流程:
输入图片
│
▼
前处理
│
▼
NPU神经网络推理
│
▼
后处理
四、AI模型是怎么来的
AI模型通常使用 深度学习框架训练。
常见框架:
PyTorch
TensorFlow
以 YOLOv5 为例:
训练完成后会得到模型文件:
yolov5s.pt
或
model.pth
这些文件包含:
- 网络结构
- 权重参数
但这些模型 只能在深度学习框架中运行,AI芯片并不能直接识别这些格式。
因此需要通过 AI编译器进行转换。
五、模型格式说明(pt 与 ONNX)
在 AI 模型部署流程中,常见模型格式包括:
| 格式 | 说明 |
|---|---|
| .pt / .pth | PyTorch 模型 |
| .onnx | 通用模型交换格式 |
| json/raw | AI芯片部署模型 |
很多 AI部署流程会使用:
PyTorch → ONNX → 芯片模型
但在 FMQL tutorial-runtime 示例工程中,并不需要 ONNX。
工程配置文件 toml 中可以看到:
framework = "pytorch"
network = "./fmodel/yolov5s_640x640.pt"
frame_version = "1.9"
因此本示例工程走的是:
PyTorch (.pt)
│
▼
Icraft compile
│
▼
json + raw
也就是说:
本工程示例可以直接编译 pt 模型
不需要 ONNX 文件
ONNX 在 FMQL 平台中 属于可选中间格式,主要用于:
- 跨框架模型转换
- 第三方模型兼容
- 统一模型格式
但并不是 Icraft 编译的必经步骤。
六、Icraft 编译流程
FMQL AI平台提供的模型编译工具:
Icraft
作用:
把 AI模型转换成 AI芯片可执行模型
编译命令:
icraft compile config/yolov5s_hard.toml
编译流程包括五个阶段:
parse
optimize
quantize
adapt
generate
1 parse
解析模型结构:
.pt → 计算图
2 optimize
优化网络结构,例如:
Conv + BatchNorm 融合
减少计算量。
3 quantize(量化)
把:
float32
转换为:
int8
原因:
AI芯片主要使用 INT8 运算
量化需要:
校准数据集
通常使用几十张图片即可。
4 adapt
适配硬件架构,例如:
通道对齐
数据格式转换
5 generate
生成最终部署模型:
BY.json
BY.raw
七、json 和 raw 是什么
Icraft 编译完成后会生成:
json + raw
例如:
imodel/yolov5s_hard/
目录:
yolov5s_hard_BY.json
yolov5s_hard_BY.raw
含义:
| 文件 | 作用 |
|---|---|
| json | 神经网络计算图 |
| raw | 权重参数 + 芯片指令 |
简单理解:
json = 程序结构
raw = 程序数据
八、PC仿真验证
部署到板卡之前,可以在 PC 上进行 模型仿真验证。
主要目的:
验证模型转换是否正确
验证量化精度
示例工程中提供:
python_demo
C++_demo
可以直接在 PC 上运行推理测试。
九、部署到悟空开发板
准备硬件:
悟空开发板
SD卡
串口
网口
启动 Linux 系统后运行:
icraft serve
作用:
启动 AI设备服务
之后应用程序即可加载模型并运行推理。
十、AI模型运行流程
部署完成后的推理流程:
加载模型
│
▼
读取输入数据
│
▼
NPU执行神经网络
│
▼
输出结果
Runtime 负责:
解析 json
加载 raw
调度算子执行
推理接口示例:
runtime.forward()
CPU 负责控制流程,NPU负责计算。
十一、tutorial-runtime 工程结构
本文示例工程:
tutorial-runtime-tt3.6.2
主要目录:
examples/
│
├─ compile
│ └─ 模型编译配置
│
├─ deploy
│ ├─ C++_demo
│ └─ python_demo
│
└─ imodel
└─ 编译生成模型
关键配置文件:
config/yolov5s_hard.toml
配置内容包括:
- 输入模型
- 量化参数
- 硬件算子
十二、总结
AI模型部署本质上就是:
训练模型
↓
导出模型
↓
Icraft编译
↓
生成 json/raw
↓
PC仿真
↓
部署到板卡
↓
Runtime运行
对于嵌入式工程师来说,可以简单理解为:
AI模型 = 程序
Icraft = AI编译器
NPU = AI专用CPU
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐
所有评论(0)