跳转至

NPU 模型的 API 部署流程*

1. 使用 NPU*

通过NPU编译器生成模型文件后,需要把模型文件部署到板子上。 NPU编译器生成的模型文件为 C 文件,配合我们提供的 API 接口,可以实现模型在板子上的运行。 具体使用指南请阅读NPU模型部署指南.

1.1 调用 API 流程*

  • 打开 SNPU
  • 加载模型和输入数据,运行模型,得到输出数据。
  • 关闭 SNPU
gx_snpu.h
    /**
     * @brief 初始化snpu
     *
     *
     * @return snpu 初始化成功与否
     * @retval 0 正常
     * @retval -1 失败
     */
    int gx_snpu_init(void);

    /**
     * @brief 关闭snpu
     *
     *
     * @return snpu 关闭成功与否
     * @retval 0 正常
     * @retval -1 失败
     */
    int gx_snpu_exit(void);

    /**
     * @brief snpu 输入和输出的数据格式,注:GRUS的输出格式可以在编译模型时选择使用float16还是float32
    */
    typedef short GX_SNPU_FLOAT;
    /**
     * @brief snpu工作状态
    */
    typedef enum {
        GX_SNPU_IDLE,    /**< 空闲状态*/
        GX_SNPU_BUSY,    /**< 工作忙状态*/
        GX_SNPU_STALL,   /**< 停滞状态*/
    } GX_SNPU_STATE;


    /**
     * @brief snpu 回调函数,任务处理完后,中断里面执行该函数
    */
    typedef int (*GX_SNPU_CALLBACK)(int module_id, GX_SNPU_STATE state, void *private_data);

    /**
     * @brief snpu 工作任务
    */
    typedef struct {
        int module_id;          /**< 模块标识号          module id defined by programmer*/
        void *ops;              /**< mcu算子信息内容区域 ops_content in model.h*/
        void *data;             /**< 临时数据内容区域    data_content in model.h*/
        void *input;            /**< 模型输入数据        input in model.h*/
        void *output;           /**< 模型输出数据        output in model.h*/
        void *cmd;              /**< 指令内容区域        cmd_content in model.h*/
        void *tmp_mem;          /**< 临时数据内容区域    tmp_content in model.h*/
        void *weight;           /**< 权重内容区域        weight_content in model.h*/
    } GX_SNPU_TASK;

    /**
     * @brief 异步方式运行一个工作任务
     *
     * @param task 工作任务
     * @param callback 回调函数,任务处理完后,中断里面执行该函数
     * @param private_data 回调函数的参数
     *
     * @return snpu 任务工作状态
     * @retval 0  正常
     * @retval -1 失败
     */
    int gx_snpu_run_task(GX_SNPU_TASK *task, GX_SNPU_CALLBACK callback, void *private_data);

    /**
     * @brief 同步方式运行一个工作任务
     *
     * @param task 工作任务
     *
     * @return snpu 任务工作状态
     * @retval 0  正常
     * @retval -1 失败
     */
    int gx_snpu_run_task_sync(GX_SNPU_TASK *task);

    /**
     * @brief snpu 获得工作状态
     *
     *
     * @return snpu 任务工作状态
     * @retval GX_SNPU_IDLE    空闲状态
     * @retval GX_SNPU_BUSY    工作忙状态
     * @retval GX_SNPU_STALL   停滞状态
    */
    GX_SNPU_STATE gx_snpu_get_state(void);