下载
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助
昇腾小AI

AscendCL接口调用流程

本节介绍AscendCL接口调用流程以及调用AscendCL接口依赖的头文件和库文件。

接口调用流程

调用AscendCL接口,可开发包含模型推理、媒体数据处理、单算子调用等功能的应用,这些功能可以独立存在,也可以组合存在。下图给出了使用AscendCL接口开发AI应用的整体接口调用流程。

图1 接口调用流程图

上图根据应用开发中的典型功能抽象出主要的接口调用流程,例如,如果模型对输入图片的宽高要求与用户提供的源图不一致,则需要媒体数据处理,将源图裁剪成符合模型的要求;如果需要实现模型推理的功能,则需要先加载模型,模型推理结束后,则需要卸载模型;如果模型推理后,需要从推理结果中查找最大置信度的类别标识对图片分类,则需要数据后处理。

  1. AscendCL初始化。

    调用aclInit接口实现初始化AscendCL。

  2. 运行管理资源申请。

    具体流程,请参见运行管理资源申请与释放

  3. 应用业务处理。
    • 模型推理
      1. 模型加载:模型推理前,需要先将对应的模型加载到系统中。

        接口调用流程,请参见模型加载

        但加载模型前,必须要有适配昇腾AI处理器的离线模型,需提前构建模型,请参见模型构建

      2. (可选)媒体数据处理:可实现JPEG图片解码、视频解码、抠图/图片缩放/格式转换、JPEG图片编码等功能。

        接口调用流程,请参见媒体数据处理(含图像/视频等)

      3. 模型执行:使用模型实现图片分类、目标识别等功能。

        接口调用流程,请参见模型执行

      4. (可选)数据后处理:处理模型推理的结果,此处根据用户的实际需求来处理推理结果,例如用户可以将获取到的推理结果写入文件、从推理结果中找到每张图片最大置信度的类别标识等。
      5. 模型卸载:调用aclmdlUnload接口卸载模型。
    • 单算子调用

      如果AI应用中不仅包括模型推理,还有数学运算(例如BLAS基础线性代数运算)、数据类型转换等功能,也想使用昇腾的算力,直接通过AscendCL接口加载并执行单个算子,省去模型构建、训练的过程,相对轻量级,又可以使用昇腾的算力。另外,自定义的算子,也可以通过单算子调用的方式来验证算子的功能。

      算子调用的接口调用流程,请参见单算子调用流程

  4. 运行管理资源释放。

    所有数据处理都结束后,需要依次释放运行管理资源,接口调用流程,请参见运行管理资源申请与释放

  5. AscendCL去初始化。

    调用aclFinalize接口实现AscendCL去初始化。

在应用开发过程中,各环节都涉及内存的申请与释放、数据传输(通过内存复制实现)、数据类型的创建与销毁,因此未在图中一一标识,关于内存申请与释放、内存复制的接口请参见内存管理,数据类型的创建与销毁的接口请参见数据类型及其操作接口

调用接口依赖的头文件和库文件说明

您需要根据实际使用的接口来include依赖的文件,AscendCL中各头文件的用途如下表所示。

AscendCL头文件在“CANN软件安装后文件存储路径/include/”目录下,AscendCL库文件在“CANN软件安装后文件存储路径/lib64/”目录下。

编译基于AscendCL接口的代码逻辑时,请按照include的头文件依赖对应的库文件,如果引用多余的so文件(例如libascendcl.a),可能导致版本功能异常或后续版本升级时存在兼容性问题。

表1 头文件列表

定义接口的头文件

用途

对应的库文件

acl/acl_base.h

用于定义基本的数据类型(例如aclDataBuffer、aclTensorDesc等)及其操作接口、枚举值(例如aclFormat)、日志管理接口等。

libascendcl.so

acl/acl.h

该头文件中已包含acl/acl_mdl.h、acl/acl_rt.h、acl/acl_op.h。包含acl.h文件后,可以引用初始化/去初始化、Device管理、算力Group查询与设置、Context管理、Stream管理、同步等待、内存管理、模型加载与执行、单算子执行(含部分接口)等接口。

libascendcl.so

acl/acl_prof.h

用于定义Profiling配置的接口。

libmsprofiler.so

说明:

为了兼容旧版本,旧版本中支持使用libascendcl.so,但后续版本这种方式会废弃,建议使用libmsprofiler.so,防止后续版本出现兼容性问题。

acl/ops/acl_cblas.h

用于定义CBLAS接口。

libacl_cblas.so

acl/ops/acl_dvpp.h

用于定义媒体数据处理V1版本的接口。

libacl_dvpp.so

acl/ops/acl_fv.h

用于定义特征向量检索的接口。

Atlas 200/300/500 推理产品,不支持引用该头文件中的接口。

Atlas 训练系列产品,不支持引用该头文件中的接口。

Atlas A2训练系列产品/Atlas 800I A2推理产品,不支持引用该头文件中的接口。

Atlas 200/500 A2推理产品,不支持引用该头文件中的接口。

libacl_retr.so

acl/acl_op_compiler.h

用于定义aclopCompile、aclopCompileAndExecute、aclSetCompileopt等算子在线编译相关的接口、数据类型、枚举值等。

libacl_op_compiler.so

acl/acl_tdt.h

用于定义Tensor数据传输接口。

Atlas 200/300/500 推理产品,不支持引用该头文件中的接口。

Atlas 推理系列产品,不支持引用该头文件中的接口。

Atlas 200/500 A2推理产品,不支持引用该头文件中的接口。

libacl_tdt_channel.so

acl/acl_tdt_queue.h

用于定义共享队列管理、共享Buffer管理接口。

libacl_tdt_queue.so

acl/dvpp/hi_dvpp.h

用于定义媒体数据处理V2版本的接口。

libacl_dvpp_mpi.so

acl/media目录下:

hi_mpi_vi.h

hi_common_vi.h

hi_common_dis.h

hi_common_gdc.h

hi_media_common.h

hi_media_type.h

hi_mpi_sys.h

用于定义VI(Video Input)视频数据获取功能的接口。

Atlas 200/300/500 推理产品,不支持引用该头文件中的接口。

Atlas 训练系列产品,不支持引用该头文件中的接口。

Atlas 推理系列产品,不支持引用该头文件中的接口。

Atlas A2训练系列产品/Atlas 800I A2推理产品,不支持引用该头文件中的接口。

libacl_vi_mpi.so

libacl_dvpp_mpi.so

acl/media目录下:

hi_mpi_isp.h

hi_common_isp.h

hi_common_3a.h

hi_mpi_ae.h

hi_common_ae.h

hi_mpi_awb.h

hi_common_awb.h

hi_common_sns.h

hi_media_common.h

hi_media_type.h

hi_mpi_sys.h

用于定义ISP(Image Signal Processing)系统控制功能的接口。

Atlas 200/300/500 推理产品,不支持引用该头文件中的接口。

Atlas 训练系列产品,不支持引用该头文件中的接口。

Atlas 推理系列产品,不支持引用该头文件中的接口。

Atlas A2训练系列产品/Atlas 800I A2推理产品,不支持引用该头文件中的接口。

libacl_isp_ae_mpi.so

libacl_isp_awb_mpi.so

libacl_isp_mpi.so

libacl_dvpp_mpi.so

acl/media目录下:

hi_mpi_vpss.h

hi_media_common.h

hi_media_type.h

hi_mpi_sys.h

用于定义VPSS(Video Process Sub-System)图像处理功能的接口。

Atlas 200/300/500 推理产品,不支持引用该头文件中的接口。

Atlas 训练系列产品,不支持引用该头文件中的接口。

Atlas 推理系列产品,不支持引用该头文件中的接口。

Atlas A2训练系列产品/Atlas 800I A2推理产品,不支持引用该头文件中的接口。

libacl_vpss_mpi.so

libacl_dvpp_mpi.so

acl/media/hi_mipi_rx.h

用于定义MIPI Rx ioctl命令字。

Atlas 200/300/500 推理产品,不支持引用该头文件中的接口。

Atlas 训练系列产品,不支持引用该头文件中的接口。

Atlas 推理系列产品,不支持引用该头文件中的接口。

Atlas A2训练系列产品/Atlas 800I A2推理产品,不支持引用该头文件中的接口。

-

acl/media目录下:

hi_mpi_audio.h

hi_common_aio.h

用于定义频输入、音频输出功能的接口。

Atlas 200/300/500 推理产品,不支持引用该头文件中的接口。

Atlas 训练系列产品,不支持引用该头文件中的接口。

Atlas 推理系列产品,不支持引用该头文件中的接口。

Atlas A2训练系列产品/Atlas 800I A2推理产品,不支持引用该头文件中的接口。

libacl_audio_mpi.so

acl/media/hi_acodec.h

用于定义音量调整的命令字。

Atlas 200/300/500 推理产品,不支持引用该头文件中的接口。

Atlas 训练系列产品,不支持引用该头文件中的接口。

Atlas 推理系列产品,不支持引用该头文件中的接口。

Atlas A2训练系列产品/Atlas 800I A2推理产品,不支持引用该头文件中的接口。

-

acl/media目录下:

hi_common_vo.h

hi_mpi_vo.h

用于定义视频输出接口。

Atlas 200/300/500 推理产品,不支持引用该头文件中的接口。

Atlas 训练系列产品,不支持引用该头文件中的接口。

Atlas 推理系列产品,不支持引用该头文件中的接口。

Atlas A2训练系列产品/Atlas 800I A2推理产品,不支持引用该头文件中的接口。

libacl_vo_mpi.so

acl/media/hi_mpi_hdmi.h

用于定义对接外设的HDMI接口。

Atlas 200/300/500 推理产品,不支持引用该头文件中的接口。

Atlas 训练系列产品,不支持引用该头文件中的接口。

Atlas 推理系列产品,不支持引用该头文件中的接口。

Atlas A2训练系列产品/Atlas 800I A2推理产品,不支持引用该头文件中的接口。

libacl_hdmi_mpi.so

acl/media/hi_mpi_tde.h

用于定义TDE图形绘制接口。

Atlas 200/300/500 推理产品,不支持引用该头文件中的接口。

Atlas 训练系列产品,不支持引用该头文件中的接口。

Atlas 推理系列产品,不支持引用该头文件中的接口。

Atlas A2训练系列产品/Atlas 800I A2推理产品,不支持引用该头文件中的接口。

libacl_tde_mpi.so

acl/media/hifb.h

用于定义叠加图形层管理接口。

Atlas 200/300/500 推理产品,不支持引用该头文件中的接口。

Atlas 训练系列产品,不支持引用该头文件中的接口。

Atlas 推理系列产品,不支持引用该头文件中的接口。

Atlas A2训练系列产品/Atlas 800I A2推理产品,不支持引用该头文件中的接口。

-

aclnn/acl_meta.h

用于定义依赖的AscendCL meta接口,通过这些元接口可构建不同数据结构,如aclTensor、aclScalar、aclIntArray等。

libnnopbase.so

aclnn/aclnn_base.h

用于定义NN/融合算子公共的base接口,即aclnnInit和aclnnFinalize。

libnnopbase.so

aclnnop/aclnn_*.h

(*表示具体的算子名称)

说明:

为兼容旧版本,旧版本NN/融合算子头文件路径是aclnnop/level2/aclnn_*.h,但后续版本该路径会废弃,建议使用新路径aclnnop/aclnn_*.h,防止后续版本出现兼容性问题。

用于定义NN/融合算子接口。

Atlas 200/300/500 推理产品,不支持引用该头文件中的接口。

NN/融合算子既支持动态库部署,也支持静态库部署。若不希望安装二进制包或已构建好的模型因版本变更而导致功能、性能及精度变化,推荐使用后者。

  • 动态库:libopapi.so(包含所有算子领域库)
    libopapi.so可分为如下库文件,支持用户选装特定领域的算子库,提高应用开发效率。
    • libaclnn_ops_infer.so(网络算子推理库)
    • libaclnn_ops_train.so(网络算子训练库)
    • libaclnn_math.so(数学算子库)
    • libaclnn_rand.so(随机数算子库)
  • 静态库:
    说明:

    OPP_Kernel包独立升级时,基于老版本OPP包编译的静态库文件不会升级;而基于和OPP_Kernel配套版本的OPP包编译的静态库文件可随之升级。

    • libopmaster_static.a(Tiling和InferShape库)
    • libaclnn_ops_infer_static.a(网络算子推理库)
    • libaclnn_ops_train_static.a(网络算子训练库)
    • libaclnn_math_static.a(数学算子库)
    • libaclnn_rand_static.a(随机数算子库)

关于NN/融合算子的编译和运行指导参见调用NN算子接口示例代码

acldvppop目录下:

acldvpp_base.h

acldvpp_op_api.h

用于定义DVPP媒体数据处理类算子的功能接口。

Atlas 200/300/500 推理产品,不支持引用该头文件中的接口。

Atlas 训练系列产品,不支持引用该头文件中的接口。

Atlas 推理系列产品,不支持引用该头文件中的接口。

Atlas 200/500 A2推理产品,不支持引用该头文件中的接口。

libacl_dvpp_op.so

搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词