模型部署
优质
小牛编辑
125浏览
2023-12-01
GX8010中,CPU和MCU各有一个NPU,CPU中的为主NPU,MCU中的为SNPU,NPU比SNPU的性能更强,功耗也更大。 CPU可以控制NPU或SNPU,MCU只能控制SNPU。 由于CPU和MCU的特点不同,在其上面使用NPU的API也不同。
CPU中使用NPU或SNPU
生成能在CPU上运行的模型文件,需要在编译模型的配置文件中指定: OUTPUT_TYPE: raw
在CPU上内存资源相对丰富,模型指令以文件方式加载,能提高灵活性。 NPU处理器的输入输出数据类型都是float16,float16和float32的转换由API内部完成,上层应用不需关心。
调用API流程
- 打开NPU设备。
- 传入模型文件,得到模型task.
- 获取task的输入输出信息。
- 拷贝输入数据到模型内存中。
- 运行模型,得到输出数据。
- 释放模型task.
- 关闭NPU设备。
附: CPU API接口
MCU中使用SNPU
生成能在MCU上运行的模型文件,需要在编译模型的配置文件中指定: OUTPUT_TYPE: c_code
在MCU上内存资源紧缺,生成的模型文件为C文件,能直接参与编译。这样的优点是不需要解析模型文件,缺点是换模型就得重新编译。 另外,由于MCU效率较低,float16和float32的转换不能在MCU上做,必须由DSP或ARM来转。
调用API流程
- 打开SNPU
- 拷贝输入数据到模型内存中。
- 运行模型,得到输出数据。
- 关闭SNPU
附: MCU API接口