更新时间:2021-03-18 GMT+08:00
分享

IAINNNode

NN Node接口,业务提供方实现。IAINNNode类在ai_nn_node.h中定义。

    class IAINNNode
    {
    public:
        virtual  ~IAINNNode(){}
        /*
        * @brief 初始化接口,业务在该接口中实现模型加载或其他初始化动作
        * @param [in] model_desc 模型信息,如果不需要模型,则传入空的vector
        * @param [in] config 配置参数
        * @return SUCCESS 成功
        * @return 其他    失败
        */
        virtual AIStatus Init(const AIConfig &config, 
            const std::vector<AIModelDescription> &model_descs = {}) = 0;

        /*
        * @brief 设置监听
        * @parm [in] 如果listener设置为nullptr,表示process接口为同步调用,否则为异步
        * @return SUCCESS 成功
        * @return 其他    失败
        */
        virtual AIStatus SetListener(std::shared_ptr<IAIListener> listener) = 0;

        /*
        * @brief 计算接口
        * @param [in] context 运行时上下文信息,包含nnnode运行时的一些可变参数配置
        * @param [in] in_data 输入数据
        * @param [out] out_data 输出数据
        * @param [in] timeout 超时时间,同步调用时无效
        * @return SUCCESS 成功
        * @return 其他    失败
        */
        virtual AIStatus Process(AIContext &context, 
            const std::vector<std::shared_ptr<IAITensor>> &in_data, 
            std::vector<std::shared_ptr<IAITensor>> &out_data, uint32_t timeout) = 0;

        /*
        * @brief 创建输出的Tensor列表
        * @param [in] in_data 输入tensor列表,计算输出时可能使用
        * @param [out] out_data 输出的tensor列表
        * @return SUCCESS 成功
        * @return 其他    失败
        */
        virtual AIStatus CreateOutputTensor(
            const std::vector<std::shared_ptr<IAITensor>> &in_data, 
            std::vector<std::shared_ptr<IAITensor>> &out_data) { (void)in_data;(void)out_data;return SUCCESS; }

        /*
        * @brief 是否可以预分配输出内存,该接口由业务NNNode实现,默认值为true.
        */
        virtual bool IsPreAllocateOutputMem() { return true; }

        /*
        * @brief 判断nnnode是否有效
        */
        virtual AIStatus IsValid() { return SUCCESS; }

        /*
        * @brief 查询node 支持的同步方式
        * @return BOTH    支持同步异步
        * @return ASYNC   仅支持异步
        * @return SYNC    仅支持同步
        */
        virtual AI_NODE_EXEC_MODE GetSupportedExecMode() { return AI_NODE_EXEC_MODE::BOTH; }

#ifdef __LITE__
        /*
        * @brief nnnode闲置超时,需要释放的资源,由用户自定义实现,适用于lite场景。如果使用了modelmanger,需要在实现该函数时调用相应modelmanager释放资源的方法IdleRelease
        */
        virtual AIStatus IdleRelease() { return SUCCESS; }
        /*
        * @brief nnnode超时后恢复,包含打开设备,加载模型等,由用户自定义实现,适用于lite场景。如果使用了modelmanger,需要在实现该函数时调用相应modelmanager的方法IdleResume
        */
        virtual AIStatus IdleResume() { return SUCCESS; }
        /*
        * @brief 设置最大闲置时间,如果超过该时间则自动销毁释放资源,未设置情况下,默认60s
        *        业务构造函数中调用
        *        在AIServiceBase中实现
        * @param [in] time 最大闲置时间,单位ms
        */
        virtual void SetMaxIdleTime(const int32_t time) { (void)time;}
#endif // __LITE__  
       
       /*
        * @brief 获取业务最大使用内存
        * @return 业务最大使用内存大小
        */
        virtual uint32_t GetMaxUsedMemory() { return 0; }
    };
分享:

    相关文档

    相关产品