ResourceKit.h 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. #pragma once
  2. #include <string>
  3. #include <iostream>
  4. #include <fstream>
  5. #include <vector>
  6. #include "nlohmann/json.hpp"
  7. #include "ConfigModule.h"
  8. #ifdef EEASY_CHIP
  9. #include "EeasyModel.h"
  10. #define Model EeasyModel
  11. #elif AXERA_CHIP
  12. #include "AxeraModel.h"
  13. #define Model AxeraModel
  14. #endif
  15. /**
  16. * @struct pipeline_t
  17. * @brief 推理管道结构体
  18. *
  19. * 该结构体用于存储推理管道的业务配置项目。
  20. */
  21. typedef struct
  22. {
  23. /**
  24. * @brief 类别属性映射
  25. *
  26. * 用于存储类别属性及其对应的值,与模型结构体中的 class_attributes的key和vlue 一一对应。
  27. */
  28. std::unordered_map<std::string, float> classAttributes;
  29. }PipelineConfig;
  30. /**
  31. * @brief AIMODEL模型类
  32. *
  33. * 该类包含了用于管理和操作AI模型的各种成员变量和方法。
  34. */
  35. class ResourceKit
  36. {
  37. public:
  38. /**
  39. * @brief 初始化AI模型资源
  40. *
  41. * 该函数用于初始化AI模型所需的资源,包括创建指定UID的资源,并根据配置文件初始化推理管道。
  42. *
  43. * @param cfg AI模型配置参数
  44. * @return 返回值为整数,表示初始化结果:
  45. * - 如果初始化成功,返回AIStatus::StatusCode::SUCCESS。
  46. * - 如果发生错误,返回错误码,可能的错误码及其含义如下:
  47. * - AIStatus::ErrorCode::MODEL_INIT_UID_START: 模型初始化错误,错误码起始值。
  48. * - AIStatus::ErrorCode::MODEL_INIT_UID_START - 1: 最后一个初始化资源失败。
  49. * - AIStatus::ErrorCode::MODEL_INIT_UID_START - 2: 最后两个个初始化资源失败。
  50. * - 以此类推
  51. */
  52. int initializeResources(const ConfigModule cfg);
  53. /**
  54. * @brief 更新AI模型资源
  55. *
  56. * 该函数用于更新AI模型所需的资源,删除所有已创建的资源,然后重新初始化资源。
  57. *
  58. * @param cfg AI模型配置参数
  59. * @return 返回值为整数,表示更新结果:
  60. * - 如果更新成功,返回AIStatus::StatusCode::SUCCESS。
  61. * - 如果删除资源或初始化资源过程中发生错误,返回相应的错误码,具体错误码含义请参考 init_resource 函数的注释。
  62. */
  63. int updateResources(const ConfigModule cfg,bool isEnabled,const std::vector<int> &needCreateResource,const std::vector<int> &needDeleteResource);
  64. /**
  65. * @brief update_resource之后执行
  66. *
  67. * 该函数用于更新推理管道的配置信息,根据给定的配置参数重新初始化推理管道。
  68. *
  69. * @param cfg AI模型配置参数
  70. * @return 返回值为整数,表示更新操作的结果:
  71. * - 如果更新成功,返回AIStatus::StatusCode::SUCCESS。
  72. * - 如果发生错误,返回相应的错误码,一般情况下不会出现错误。
  73. */
  74. int parsePipelineConfig(const ConfigModule cfg);
  75. int getRuntimeCacheConfig(const ConfigModule cfg, unsigned long &maxPreprocessDstImageSize, unsigned long &maxInferedTensorTotalSize);
  76. /**
  77. * @brief 预处理资源初始化映射
  78. *
  79. * 用于存储各个步骤的预处理资源初始化信息,其中包括UID和NPU厂家的预处理结构体。
  80. */
  81. std::unordered_map<int, Model::PreprocessConfig> uidPreprocessInitMap;
  82. /**
  83. * @brief 预处理资源资源最大dstImageSize
  84. *
  85. */
  86. long unsigned int maxPreprocessDstImageSize;
  87. long unsigned int maxInferedTensorTotalSize;
  88. /**
  89. * @brief 模型运行资源初始化映射
  90. *
  91. * 用于存储各个步骤的模型运行资源初始化信息,其中包括UID和NPU厂家的模型结构。
  92. */
  93. std::unordered_map<int, Model::ModelConfig>uidModelInitMap;
  94. /**
  95. * @brief 后处理资源初始化映射
  96. *
  97. * 用于存储各个步骤的后处理运行资源初始化信息,其中包括UID和NPU厂家的模型结构。
  98. */
  99. std::unordered_map<int, Model::PostprocessConfig>uidPostprocessInitMap;
  100. /**
  101. * @brief 推理管道资源初始化映射
  102. *
  103. * 用于存储各个推理管道的资源初始化信息,其中包括UID和推理管道的业务配置项目。
  104. */
  105. std::unordered_map<int, PipelineConfig> uidPipelineCfgMap;
  106. /**
  107. * @brief 模型厂家的类对象
  108. *
  109. * 用于处理底层AI模型操作的EZModel对象,实现了与NPU厂家的交互。
  110. */
  111. Model model;
  112. int deleteAllResource(const ConfigModule cfg);
  113. private:
  114. /**
  115. * @brief 创建AI模型资源
  116. *
  117. * 该函数根据给定的配置和步骤(step),创建AI模型所需的资源。
  118. *
  119. * @param cfg AI模型配置参数
  120. * @param step 模型创建的步骤编号
  121. * @return 返回值为整数,表示创建结果:
  122. * - 如果创建成功,返回AIStatus::StatusCode::SUCCESS。
  123. * - 如果发生错误,返回相应的错误码,可能的错误码及其含义如下:
  124. * - AIStatus::ErrorCode::INVALID_STEP_TYPE: 无效的步骤类型。
  125. * - AIStatus::ErrorCode::INVALID_PREPROCESS_CONFIG: 无效的预处理配置。
  126. * - AIStatus::ErrorCode::INVALID_MODEL_CONFIG: 无效的模型配置。
  127. * - 其他可能的错误码,请参考具体模块的初始化函数的注释。
  128. */
  129. int createResource(const ConfigModule cfg, int step);
  130. /**
  131. * @brief 创建AI模型资源PipeLine
  132. *
  133. * 该函数根据给定的配置和pipeline,创建AI模型所需的资源。
  134. *
  135. * @param cfg AI模型配置参数
  136. * @param pipeline 模型创建的步骤pipeline
  137. * @return 返回值为整数,表示创建结果:
  138. * - 如果创建成功,返回AIStatus::StatusCode::SUCCESS。
  139. * - 如果发生错误,返回相应的错误码,可能的错误码及其含义如下:
  140. * - AIStatus::ErrorCode::INVALID_STEP_TYPE: 无效的步骤类型。
  141. * - AIStatus::ErrorCode::INVALID_PREPROCESS_CONFIG: 无效的预处理配置。
  142. * - AIStatus::ErrorCode::INVALID_MODEL_CONFIG: 无效的模型配置。
  143. * - 其他可能的错误码,请参考具体模块的初始化函数的注释。
  144. */
  145. int createPipelineResource(const ConfigModule cfg, std::vector<int> pipeline);
  146. /**
  147. * @brief 删除AI模型资源
  148. *
  149. * 该函数根据给定的配置和步骤(step),删除AI模型所占用的资源。
  150. *
  151. * @param cfg AI模型配置参数
  152. * @param step 模型删除的步骤编号
  153. * @return 返回值为整数,表示删除结果:
  154. * - 如果删除成功,返回AIStatus::StatusCode::SUCCESS。
  155. * - 如果发生错误,返回相应的错误码,可能的错误码及其含义如下:
  156. * - AIStatus::ErrorCode::INVALID_STEP_TYPE: 无效的步骤类型。
  157. * - AIStatus::ErrorCode::RESOURCE_RELEASE_FAILURE: 资源释放失败。
  158. * - 其他可能的错误码,请参考具体模块的释放资源函数的注释。
  159. */
  160. int deleteResource(const ConfigModule cfg, int step);
  161. };