函数:create_search_result
函数:destroy_query_table
| C函数原型 | aclError aclfvDestroyQueryTable(aclfvQueryTable *queryTable) |
|---|---|
| Python函数 | ret = acl.fv.destroy_query_table(query_table) |
| 函数功能 | 销毁通过acl.fv.create_query_table接口创建的aclfvQueryTable类型的数据。同步接口。 Atlas 200/500 A2推理产品不支持该接口。 |
| 输入说明 | query_table:int,指针地址,待销毁的aclfvQueryTable类型。 |
| 返回值说明 | ret:int,错误码。 - 返回0表示成功。 - 返回其它值表示失败。 |
| 约束说明 | 无 |
父主题: 特征向量检索
函数:create_search_input
| C函数原型 | aclfvSearchInput *aclfvCreateSearchInput(aclfvQueryTable *queryTable, aclfvRepoRange *repoRange, uint32_t topk) |
|---|---|
| Python函数 | search_input = acl.fv.create_search_input(query_table, repo_range, topk) |
| 函数功能 | 创建aclfvSearchInput类型的数据,表示创建检索任务输入信息。同步接口。 如需销毁aclfvSearchInput类型的数据,请参见函数:destroy_search_input。 Atlas 200/500 A2推理产品不支持该接口。 |
| 输入说明 | - query_table:int,指针地址,检索的输入表信息。 调用acl.fv.create_query_table接口创建aclfvQueryTable类型的数据。 - repo_range:int,指针地址,检索的特征库范围。 调用acl.fv.create_repo_range接口创建aclfvRepoRange类型的数据。 - topk:单个检索请求需要返回的结果数量。 |
| 返回值说明 | **search_input:**int,指针地址。 - 返回aclfvSearchInput类型,表示成功。 - 返回0,表示失败。 |
| 约束说明 | 无 |
父主题: 特征向量检索
函数:destroy_search_input
| C函数原型 | aclError aclfvDestroySearchInput(aclfvSearchInput *searchInput) |
|---|---|
| Python函数 | ret = acl.fv.destroy_search_input(search_input) |
| 函数功能 | 销毁通过acl.fv.create_search_input接口创建的aclfvSearchInput类型的数据。同步接口。 Atlas 200/500 A2推理产品不支持该接口。 |
| 输入说明 | search_input:int,指针地址,待销毁的aclfvSearchInput类型。 |
| 返回值说明 | ret:int,错误码。 - 返回0表示成功。 - 返回其它值表示失败。 |
| 约束说明 | 无 |
父主题: 特征向量检索
函数:create_search_result
| C函数原型 | aclfvSearchResult *aclfvCreateSearchResult(uint32_t queryCnt, uint32_t *resultNum, uint32_t resultNumDataLen, uint32_t *id0, uint32_t *id1, uint32_t *resultOffset, float *resultDistance, uint32_t dataLen) |
|---|---|
| Python函数 | search_result = acl.fv.create_search_result(query_cnt, result_num, result_num_data_len, id_0, id_1, result_offset, result_distance, data_len) |
| 函数功能 | 创建aclfvSearchResult类型的数据,表示创建检索结果信息。同步接口。 如需销毁aclfvSearchResult类型的数据,请参见函数:destroy_search_result。 Atlas 200/500 A2推理产品不支持该接口。 |
| 输入说明 | - query_cnt:int,检索请求个数,1:N场景为1。 - result_num:int,每个检索请求的结果个数。 - result_num_data_len:int,resultNum的内存总长度。 - id_0:int,一级库id,总个数为topK*queryCnt。 - id_1:int,二级库id,总个数为topK*queryCnt。 - result_offset:int,每个检索请求的检索结果对应底库的偏移,总个数为topK*queryCnt。 - result_distance:int,每个检索结果与检索请求间的距离,总个数为topK*queryCnt。 - data_len:int,申请的内存大小,计算公式为:topK*queryCnt*4Byte。 |
| 返回值说明 | search_result:int,指针地址。 - 返回aclfvSearchResult类型,表示成功。 - 返回0,表示失败。 |
| 约束说明 | 无 |
父主题: 特征向量检索
函数:destroy_search_result
| C函数原型 | aclError aclfvDestroySearchResult(aclfvSearchResult *searchResult) |
|---|---|
| Python函数 | ret = acl.fv.destroy_search_result(search_result) |
| 函数功能 | 销毁通过acl.fv.create_search_result接口创建的aclfvSearchResult类型的数据。同步接口。 Atlas 200/500 A2推理产品不支持该接口。 |
| 输入说明 | search_result:int,指针地址,待销毁的aclfvSearchResult类型。 |
| 返回值说明 | ret:int,错误码。 - 返回0表示成功。 - 返回其它值表示失败。 |
| 约束说明 | 无 |
父主题: 特征向量检索
功能介绍
功能
该章节描述通过Profiling pyACL API采集并落盘性能数据,实现将采集到的Profiling数据写入文件,再使用Profiling工具解析该文件(请参见《性能分析工具使用指南》下的“数据解析与导出”),并展示性能分析数据。
包括以下两种接口调用方式:
-
acl.prof.init接口、acl.prof.start接口、acl.prof.stop接口、acl.prof.finalize接口配合使用,实现该方式的性能数据采集。该方式可获取pyACL的接口性能数据、AI Core上算子的执行时间、AI Core性能指标数据等。目前这些接口为进程级控制,表示在进程内任意线程调用该接口,其它线程都会生效。
一个进程内,可以根据需求多次调用这些接口,基于不同的Profiling采集配置,采集数据。
-
调用acl.init接口,在pyACL初始化阶段,通过*.json文件传入要采集的Profiling数据。该方式可获取pyACL的接口性能数据、AI Core上算子的执行时间、AI Core性能指标数据等。
一个进程内,只能调用一次acl.init接口,如果要修改Profiling采集配置,需修改*.json文件中的配置。详细使用说明请参见acl.init接口处的说明,不在本章节描述。
总体约束
不能与Profiling pyACL API for Subscription(订阅算子信息的Profiling pyACL API)的接口交叉调用:acl.prof.init接口和acl.prof.finalize接口之间不能调用acl.prof.model_subscribe接口、aclprofGet*接口、acl.prof.model_unsubscribe接口。
接口约束说明
- 调用接口要求:
-
acl.prof.init接口必须在acl.init接口之后、模型加载之前调用。
如果已经通过acl.init接口配置了Profiling信息,则调用acl.prof.init接口、acl.prof.start接口、acl.prof.stop接口、acl.prof.finalize时,会返回报错。
如果没有调用acl.prof.init接口,调用acl.prof.start接口、acl.prof.stop接口、acl.prof.finalize时,会返回报错。
-
acl.prof.start接口在模型执行之前调用,若在模型执行过程中调用acl.prof.start接口,Profling采集到的数据为调用acl.prof.start接口之后的数据,可能导致数据不完整。
调用acl.prof.start接口时,可以指定从一个Device上采集性能数据,也可以指定从多个Device上采集性能数据。
一个用户APP进程内,如果连续调用多次acl.prof.start接口,指定重复的Profiling配置,或指定的Device重复,会返回报错。
-
在用户APP的进程生命周期内,acl.prof.init接口与acl.prof.finalize接口配对使用,建议只调用一次,如该组合多次调用可以改变保存性能数据的文件的路径。
-
acl.prof.start接口与acl.prof.stop接口需配对使用。
-
Profiling msproftx采集功能相关接口须在acl.prof.start接口与acl.prof.stop接口之间调用。其中配对使用的接口有:acl.prof.create_stamp/acl.prof.destroy_stamp、acl.prof.push/acl.prof.pop、acl.prof.range_start/acl.prof.range_stop。
-
调用acl.finalize并接收到正常退出码后为执行完毕,其他情况为非正常。由于性能数据采集不支持多进程并发执行,为确保驱动关闭正常,需要在前一个性能数据采集用例完全执行完毕之后再执行下一轮采集。建议在acl.finalize接口返回值上加入异常处理操作,方便展示执行状态与问题定位。
-
- 接口调用顺序:
-
建议的接口调用顺序如下,以“一个用户APP进程内采集多个模型推理时的性能数据”为例:
acl.init接口-->acl.prof.init接口-->acl.prof.start接口(指定Device 0和Device 1)-->模型1加载-->模型1执行-->acl.prof.stop接口(与acl.prof.start接口的aclprofConfig数据保持一致)-->acl.prof.start接口(指定Device 1和Device 2)-->模型2加载-->模型2执行-->acl.prof.stop接口(与acl.prof.start接口的aclprofConfig数据保持一致)-->acl.prof.finalize接口-->执行其它任务-->模型卸载-->acl.finalize接口
-
错误的接口调用顺序示例如下,以“一个用户APP进程内,如果连续调用多次acl.prof.start接口,指定的Device重复”为例:
acl.init接口-->acl.prof.init接口-->acl.prof.start接口(指定Device 0和Device 1)-->acl.prof.start接口(指定Device 1和Device 2)-->模型1加载-->模型1执行-->模型2加载-->模型2执行-->acl.prof.stop接口-->acl.prof.stop接口-->acl.prof.finalize-->执行其它任务-->模型卸载-->acl.finalize接口
-
父主题: Profiling pyACL API(通过Profiling pyACL API采集并落盘性能数据)
函数:create_config
| C函数原型 | aclprofConfig *aclprofCreateConfig(uint32_t *deviceIdlist,uint32_t deviceNums, aclprofAicoreMetrics aicoreMetrics, aclprofAicoreEvents *aicoreEvents, uint64_t dataTypeConfig) |
|---|---|
| Python函数 | prof_config = acl.prof.create_config(device_list,aicore_metrics, aicore_events**, data_type_config)** |
| 函数功能 | 创建aclprofConfig类型的数据,表示创建Profiling配置数据。同步接口。 aclProfConfig类型数据可以只创建一次、多处使用,用户需要保证数据的一致性和准确性。 如需销毁aclprofConfig类型的数据,请参见函数:destroy_config。 |
| 输入说明 | device_list:Device ID列表。 aicore_metrics:表示aclprofAicoreMetrics。 aicore_events:表示AI Core事件,目前配置为0。 data_type_config: 用户选择如下多个值进行逻辑或(例如:ACL_PROF_ACL_API|ACL_PROF_AICORE_METRICS),作为data_type_config参数值。每个值表示某一类性能数据,详细说明如下: - ACL_PROF_ACL_API:表示采集pyACL接口的性能数据,包括的同步异步内存复制时延等。 - ACL_PROF_TASK_TIME:采集算子下发耗时、算子执行耗时数据以及算子基本信息数据,提供更全面的性能分析数据。 - ACL_PROF_TASK_TIME_L0:采集算子下发耗时、算子执行耗时数据。与ACL_PROF_TASK_TIME相比,由于不采集算子基本信息数据,采集时性能开销较小,可更精准统计相关耗时数据。 - ACL_PROF_AICORE_METRICS:表示采集AI Core性能指标数据,逻辑或时必须包括该宏,aicore_metrics入参处配置的性能指标采集项才有效。 - ACL_PROF_TASK_MEMORY:控制CANN算子的内存占用情况采集开关。仅采集GE组件算子。 - ACL_PROF_AICPU:表示采集AI CPU任务的开始、结束数据。 - ACL_PROF_L2CACHE:表示采集L2 Cache数据。 - ACL_PROF_HCCL_TRACE:控制hccl数据采集开关。 - ACL_PROF_MSPROFTX:获取用户和上层框架程序输出的性能数据。 - ACL_PROF_RUNTIME_API:控制runtime api性能数据采集开关。 |
| 返回值说明 | prof_config:int。 - 返回非0值表示成功,返回值为返回aclprofConfig类型的指针地址。 - 返回0表示失败。 |
| 约束说明 | - 使用acl.prof.destroy_config接口销毁aclprofConfig类型的数据,如不销毁会导致内存未被释放。 - 与acl.prof.destroy_config接口配对使用,先调用acl.prof.create_config接口再调用acl.prof.destroy_config接口。 |
父主题: Profiling pyACL API(通过Profiling pyACL API采集并落盘性能数据)
在线提单