模型部署

优质
小牛编辑
115浏览
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流程

  1. 打开NPU设备。
  2. 传入模型文件,得到模型task.
  3. 获取task的输入输出信息。
  4. 拷贝输入数据到模型内存中。
  5. 运行模型,得到输出数据。
  6. 释放模型task.
  7. 关闭NPU设备。

附: CPU API接口

MCU中使用SNPU

生成能在MCU上运行的模型文件,需要在编译模型的配置文件中指定: OUTPUT_TYPE: c_code 在MCU上内存资源紧缺,生成的模型文件为C文件,能直接参与编译。这样的优点是不需要解析模型文件,缺点是换模型就得重新编译。 另外,由于MCU效率较低,float16和float32的转换不能在MCU上做,必须由DSP或ARM来转。

调用API流程

  1. 打开SNPU
  2. 拷贝输入数据到模型内存中。
  3. 运行模型,得到输出数据。
  4. 关闭SNPU

附: MCU API接口