如果AI应用中不仅仅包括模型推理,还有数学运算(例如BLAS基础线性代数运算)、数据类型转换等功能,也想使用昇腾的算力,昇腾CANN还能支持吗?
答案是肯定的,昇腾CANN提供了单算子调用的方式,直接通过AscendCL接口加载并执行单个算子,省去模型构建、训练的过程,相对轻量级,又可以使用昇腾的算力。
另外,自定义的算子,也可以通过单算子调用的方式来验证算子的功能。
在解释单算子调用与模型推理的差别前,我们先观察下面这个开发流程图,先找出基本的共同点、不同点。
请参见准备开发和运行环境。
在开发应用前,您需要先创建目录,存放代码文件、编译脚本、测试图片数据、模型文件等。
如下仅是示例,供参考:
├App名称 ├── op_model // 该目录下存放编译算子的算子描述文件 │ ├── xxx.json ├── data │ ├── xxxxxx // 测试数据 ├── inc // 该目录下存放声明函数的头文件 │ ├── xxx.h ├── out // 该目录下存放输出结果 ├── src │ ├── xxx.json // 系统初始化的配置文件 │ ├── CMakeLists.txt // 编译脚本 │ ├── xxx.cpp // 实现文件
若基于“单算子API执行”方式调用算子,则无需编译算子。
若基于“单算子模型执行”方式调用算子,则需编译算子,编译算子有以下两种方式:
该种方式,需要先构造*.json格式单算子描述文件(描述算子的输入、输出及属性等信息),借助ATC工具,将单算子描述文件编译成om模型文件;再分别调用AscendCL接口加载om模型文件、执行算子。
关于ATC工具的使用说明,请参见《ATC工具使用指南》。
关于单算子模型执行、单算子API执行的区别及详细的接口调用流程请参见单算子调用流程。
依赖的头文件和库文件的说明请参见调用接口依赖的头文件和库文件说明。
单算子调用的流程请参见单算子调用流程及相关的示例代码。