# CANNKit_Codelab_Optimization_cpp **Repository Path**: harmonyos_codelabs/cannkit_codelab_optimization_cpp ## Basic Information - **Project Name**: CANNKit_Codelab_Optimization_cpp - **Description**: 本示例基于CANN Kit提供的维测调优能力,实现基于用户提供的AI模型和输入数据获取Profiling/Dump维测数据的示例,辅助开发者用于模型和单算子的性能调优与分析。 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-09-29 - **Last Updated**: 2025-10-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 基于CANN Kit实现获取模型的Profiling/Dump维测数据 ## 介绍 本示例展示了如何建立一个HarmonyOS应用程序去运行AI模型并获取Profiling/Dump数据进行性能分析,支持离线模型调优与输出数据可视化。 需要编译依赖CANN的动态库libhiai_foundation.so和AI领域公共动态库libneural_network_core.so。 ## 效果预览 | **主界面** | **调优数据展示** | **调优数据展示** | |:------------------------------:|:-----------------------------:|---------------------------------| | | | | ## 使用说明 1. 环境准备
安装[DevEco Studio](https://developer.huawei.com/consumer/cn/deveco-studio/)。
2. 模型转化
通过DDK工具完成[离线模型转换](https://developer.huawei.com/consumer/cn/doc/hiai-Guides/offline-model-conversion-0000001053807006)。
3. 文件传输
预先在本地创建与应用同名的目录(通过app.json5文件中的bundleName定义),并通过指定命令将离线模型和输入文件文件预置到手机的目录中(本示例以" Download"为例)。
1)hdc file send com.huawei.canndemo/test.om /mnt/hmdfs/100/account/device_view/local/files/Docs/Download
2)hdc file send com.huawei.canndemo/input.bin /mnt/hmdfs/100/account/device_view/local/files/Docs/Download
4. 执行推理
1)在手机的主屏幕,依次获取模型的输入bin文件和模型文件,并选择维测选项。
2)点击“运行”,调优模式为“Profiling”,可通过“查看调优数据”进行数据展示;调优模式为“Dump”,可直接在手机目录获取数据。
5. 退出应用时,自动卸载模型。
## 工程目录 ``` ├──entry/src/main/cpp │ ├──CMakeLists.txt // Native 层编译配置 │ ├──HIAIModelManager.cpp // 管理 HiAI 模型加载、初始化和推理的接口实现 │ └──HIAIModelManager.h // 管理 HiAI 模型加载、初始化和推理的接口封装 ├──entry/src/main/ets │ ├──constants │ │ └──CommonConstants.ets // 公共常量 │ ├──entryability │ │ └──EntryAbility.ets // 负责应用的启动、界面加载和生命周期管理 │ ├──model │ │ └──PathModel.ets // 应用资源实体类 │ ├──pages │ │ ├──Index.ets // 主界面 │ │ └──TabsManager.ets │ ├──utils │ │ ├──DataUtils.ets // 模型数据工具类 │ │ ├──DrawUtils.ets // 窗口管理 │ │ └──FileUtils.ets │ ├──view │ │ ├──DataShower.ets // 调优数据展示页面组件 │ │ ├──DetailDialog.ets // 弹出框数据展示组件 │ │ └──FilePicker.ets // 文件和调优选项配置页面组件 │ └──viewmodel │ ├──DetailData.ets // 主窗口实体类 │ └──DialogData.ets // 副窗口实体类 └──entry/src/main/resources // 引用资源目录 ``` ## 具体实现 本示例展示的维测调优功能主要使用的API: - OH_NN_ReturnCode HMS_HiAIOptions_SetOmOptions(OH_NNCompilation* compilation, HiAI_OmType type, const char* outputDir); ``` typedef enum { /** Disables operating and maintenance. */ HIAI_OM_TYPE_OFF = 0, // 关闭 OM 选项。 /** Profiling type of operating and maintenance. */ HIAI_OM_TYPE_PROFILING = 1, // 启用性能分析。 /** Dump model level output. */ HIAI_OM_TYPE_DUMP = 2, // 启用模型数据导出。 } HiAI_OmType; ``` 展示的功能还使用了在CANN和NNCore中定义的以下API: ``` OH_NN_ReturnCode OH_NNDevice_GetAllDevicesID(const size_t **allDevicesID, uint32_t *deviceCount); void *OH_NNTensor_GetDataBuffer(const NN_Tensor *tensor); OH_NNCompilation *OH_NNCompilation_ConstructWithOfflineModelBuffer(const void *modelBuffer, size_t modelSize); OH_NN_ReturnCode OH_NNCompilation_SetDevice(OH_NNCompilation *compilation, size_t deviceID); void OH_NNCompilation_Destroy(OH_NNCompilation **compilation); NN_TensorDesc *OH_NNExecutor_CreateInputTensorDesc(const OH_NNExecutor *executor, size_t index); OH_NN_ReturnCode OH_NNTensorDesc_SetShape(NN_TensorDesc *tensorDesc, const int32_t *shape, size_t shapeLength); NN_TensorDesc *OH_NNExecutor_CreateOutputTensorDesc(const OH_NNExecutor *executor, size_t index); OH_NN_ReturnCode OH_NNExecutor_RunSync(OH_NNExecutor *executor, NN_Tensor *inputTensor[], size_t inputCount, NN_Tensor *outputTensor[], size_t outputCount); OH_NN_ReturnCode OH_NNTensor_GetSize(const NN_Tensor *tensor, size_t *size); ``` ## 相关权限 不涉及。 ## 依赖 不涉及。 ## 约束与限制 1. 本示例仅支持标准系统上运行,支持设备:华为手机。 2. HarmonyOS系统:HarmonyOS 6.0.0 Release及以上。 3. DevEco Studio版本:DevEco Studio 6.0.0 Release及以上。 4. HarmonyOS SDK版本:HarmonyOS 6.0.0 Release SDK及以上。