18 Star 38 Fork 95

Ascend/ascendc-api-adv

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

概述

本样例介绍了调用AscendQuant高阶API实现QuantCustom单算子,并按照不同的算子调用方式分别给出了对应的端到端实现。

  • 直调:使用核函数直调QuantCustom自定义算子。

    核函数的基础调用方式,开发者完成算子核函数的开发和Tiling实现后,即可通过AscendCL运行时接口,完成算子的调用。

  • 框架调用:使用框架调用QuantCustom自定义算子。

    按照工程创建->算子实现->编译部署->算子调用的流程完成算子开发。整个过程都依赖于算子工程:基于工程代码框架完成算子核函数的开发和Tiling实现,通过工程编译脚本完成算子的编译部署,继而实现单算子调用或第三方框架中的算子调用。

本样例中包含如下调用方式:

调用方式 目录 描述
直调 kernel_launch_method_by_direct host侧的核函数调用程序,包含CPU侧、NPU侧、仿真侧三种运行验证方法。
框架调用 kernel_launch_method_by_framework 通过aclnn调用的方式调用QuantCustom算子。

样例支持的产品型号为:

  • Atlas A2训练系列产品/Atlas 800I A2推理产品
  • Atlas推理系列产品AI Core

目录结构

目录 描述
kernel_launch_method_by_direct 通过kernel直调的方式调用自定义算子工程样例目录
kernel_launch_method_by_framework 通过aclnn调用的方式调用自定义算子工程样例目录
host_tiling 本样例tiling代码实现
kernel_impl 本样例kernel侧代码实现

算子描述

QuantCustom单算子,对输入tensor按元素做量化计算,将half/float数据类型量化为int8_t数据类型。

QuantCustom算子规格:

算子类型(OpType)QuantCustom
算子输入
nameshapedata typeformat
inputGm1024floatND
算子输出
outputGm1024int8_tND
核函数名quant_custom

算子实现介绍

本样例实现了QuantCustom算子,其中输入inputGm为固定shape[1024]。

  • kernel实现

    计算逻辑是:Ascend C提供的矢量计算接口的操作元素都为LocalTensor,输入数据需要先搬运进片上存储,然后使用AscendQuant高阶API接口完成量化计算,得到最终结果,再搬出到外部存储上。

    QuantCustom算子的实现流程分为3个基本任务:CopyIn,Compute,CopyOut。CopyIn任务负责将Global Memory上的输入Tensor inputGm存储在srcLocal中,Compute任务负责对srcLocal执行量化计算,计算结果存储在dstLocal中,CopyOut任务负责将输出数据从dstLocal搬运至Global Memory上的输出Tensor outputGm。

  • tiling实现

    QuantCustom算子的tiling实现流程如下:首先获取AscendQuant接口能完成计算所需最大/最小临时空间大小,根据该范围结合实际的内存使用情况设置合适的空间大小,然后根据输入长度dataLength确定所需tiling参数。

马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/ascend/ascendc-api-adv.git
git@gitee.com:ascend/ascendc-api-adv.git
ascend
ascendc-api-adv
ascendc-api-adv
v0.8-8.0.0.beta1

搜索帮助