CANN/asc-devkit随路量化

CANN/asc-devkit随路量化

随路量化

【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C++标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit

随路量化是矩阵计算结果从L0C Buffer搬出到Global Memory或Unified Buffer过程中的数据转换能力。L0C Buffer到Global Memory/Unified Buffer搬运根据是否传入quant参数自动选择不量化、直接cast、scalar量化或tensor量化模式。

调用形式

不传入quant参数时,接口根据源类型和目的类型选择不量化输出或直接cast输出:

auto atom = MakeCopy(CopyL0C2GM{}).with(fixpipeParams); Copy(atom, dst, src);

传入uint64_t类型的quant参数时,表示scalar量化。整个C矩阵共用同一个量化参数:

uint64_t quant = 1; auto atom = MakeCopy(CopyL0C2GM{}).with(fixpipeParams); Copy(atom, dst, src, quant);

传入Tensor API张量作为quant参数时,表示tensor量化。量化参数通常位于L1 Buffer,元素类型为uint64_t,每个channel维度对应一个量化参数:

auto quant = MakeTensor(MakeMemPtr(quantAddr), MakeFrameLayout<NDExtLayoutPtn>(1, n)); auto atom = MakeCopy(CopyL0C2GM{}).with(fixpipeParams); Copy(atom, dst, src, quant);

量化参数

scalar量化参数和tensor量化参数的元素类型均为uint64_t

约束说明

  • tensor量化参数张量应位于L1 Buffer,元素类型为uint64_t,地址要求32字节对齐。
  • 量化参数不能为infnan或非规格化数。该约束属于硬件约束,接口不单独检查参数值。
  • RoundMode::HYBRID仅在源类型为float、目的类型为hifloat8_t的量化输出场景支持。
  • 不传入quant时,仅支持不量化输出或floathalf/bfloat16_t的直接cast输出。

【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C++标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考