cann/asc-devkit矩阵计算流程
普通矩阵计算流程【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkitAscend C针对矩阵计算编程模型提供了四类接口分别承载Cube核中各个通路的搬运能力和计算能力如下图所示图1普通矩阵基础计算流程图通过DataCopy接口将A、B原始矩阵的GM数据搬运到L1 Buffer中如果存在Bias/随路量化则同样通过DataCopy搬运到L1 Buffer中。详细内容请参考矩阵数据搬入至L1 Buffer。通过LoadData接口将A、B矩阵分别加载到L0A Buffer和L0B Buffer上准备计算如果存在Bias/随路量化则通过DataCopy将L1 Buffer中的bias数据/量化系数数据搬运到BT Buffer/Fixpipe Buffer上。详细内容请参考矩阵数据搬入至L0A Buffer/L0B Buffer。通过Mmad接口对L0A Buffer、L0B Buffer、BT Buffer上面的数据进行矩阵计算并输出结果到L0C Buffer上。详细内容请参考Mmad计算。通过Fixpipe接口将L0C Buffer的数据进行处理并搬出到GMFixpipe接口可以利用Fixpipe Buffer数据进行如随路量化、Relu等操作。详细内容请参考L0C到GM数据搬运Fixpipe。Mx矩阵计算流程Mx矩阵计算仅在Ascend 950PR/Ascend 950DT型号支持。MxMmad全称Microscaling Mmad为带有量化系数的矩阵乘法即左矩阵和右矩阵均有对应的量化系数矩阵左量化系数矩阵scaleA和右量化系数矩阵scaleB。MxMmad场景中左量化系数矩阵与左矩阵乘积右量化系数矩阵与右矩阵乘积对两个乘积的结果做矩阵乘法。Ascend C针对Mx矩阵计算编程模型提供了对应Mx类接口如下图所示图 2Mx矩阵基础计算流程图通过DataCopy接口将A、B原始矩阵、左系数矩阵scaleA、右系数矩阵scaleB的GM数据搬运到L1 Buffer中如果存在Bias/随路量化则同样通过DataCopy搬运到L1 Buffer中。详细内容请参考矩阵数据搬入至L1 Buffer。通过LoadDataMX矩阵搬运接口将A矩阵与scaleA矩阵加载到L0A Buffer与内置L0A_MX Buffer、将B矩阵与scaleB矩阵分别加载到L0B Buffer与L0B_MX Buffer上准备计算如果存在Bias/随路量化则通过DataCopy将L1 Buffer中的bias数据/量化系数数据搬运到BT Buffer/Fixpipe Buffer上。详细内容请参考矩阵数据搬入至L0A Buffer/L0B Buffer。通过MmadMx接口对L0A Buffer、L0A_MX Buffer、L0B Buffer、L0B_MX Buffer、BT Buffer上面的数据进行矩阵计算并输出结果到L0C Buffer上。详细内容请参考MmadMx计算。通过Fixpipe接口将L0C Buffer的数据进行处理并搬出到GMFixpipe接口可以利用Fixpipe Buffer数据进行如随路量化、Relu等操作。详细内容请参考L0C到GM数据搬运Fixpipe。4选2稀疏矩阵计算流程稀疏矩阵是一种特殊类型的矩阵即矩阵中包含较多的零元素。4选2结构化稀疏矩阵计算要求一个连续的4个权重或激活值的组通常是张量中的一行或一列中最多只有2个值为非零其余2个强制为零。针对Atlas A2训练系列产品/Atlas A2推理系列产品和Atlas A3训练系列产品/Atlas A3推理系列产品Ascend C针对4选2稀疏矩阵计算编程模型提供了对应sparse类接口如下图所示图 34选2稀疏矩阵基础计算流程图首先将原始矩阵B按照固定粒度划分连续4个元素为一组按照固定结构稠密算法离线生成对应的稠密矩阵B与索引矩阵作为输入。通过DataCopy接口将原始矩阵A稀疏矩阵、稠密矩阵B、索引矩阵的GM数据搬运到L1 Buffer中如果存在随路量化则同样通过DataCopy搬运到L1 Buffer中。详细内容请参考矩阵数据搬入至L1 Buffer。通过LoadData接口将原始矩阵A加载到L0A Buffer通过LoadDataWithSparse接口将稠密矩阵B与索引矩阵分别加载到L0B Buffer与内置IDX Buffer上准备计算如果存在随路量化则通过DataCopy将L1 Buffer中的量化系数数据搬运到Fixpipe Buffer上。详细内容请参考矩阵数据搬入至L0A Buffer/L0B Buffer。通过MmadWithSparse接口对L0A Buffer、L0B Buffer、内置IDX Buffer上面的数据进行4选2稀疏矩阵计算并输出结果到L0C Buffer上。详细内容请参考MmadWithSparse计算。通过Fixpipe接口将L0C Buffer的数据进行处理并搬出到GMFixpipe接口可以利用Fixpipe Buffer数据进行如随路量化、Relu等操作。详细内容请参考L0C到GM数据搬运Fixpipe。Conv2D前向计算流程Conv2D前向计算的本质是将卷积运算转换为矩阵乘先通过img2colImage to Column将FeatureMap按卷积核滑动窗口展开为左矩阵A将Weight作为右矩阵B再做矩阵乘累加得到输出。与普通矩阵计算流程的区别在于A矩阵从GM直接搬入后由LoadData卷积数据搬运在L1 Buffer到L0A Buffer的搬运过程中根据卷积核尺寸、stride、dilation、padding在线完成img2col空间展开生成如下图所示图 4Conv2D前向计算流程图通过DataCopy接口将FeatureMap、Weight的GM数据搬运到L1 Buffer中。FeatureMap搬运时完成到NC1HWC0格式的随路转换Weight搬运到L1 Buffer得到Nz分形布局。详细内容请参考矩阵计算的搬入。通过LoadData卷积数据搬运接口将L1 Buffer中的FeatureMap执行img2col根据卷积核尺寸、stride、dilation、padding完成空间展开与padding填充生成L0A Buffer上的左矩阵A通过LoadData接口将L1 Buffer中的Weight搬运到L0B Buffer得到右矩阵B。FeatureMap的属性描述l1H、l1W、padList可通过LoadData3DParamsV1/LoadData3DParamsV2/LoadData3DParamsV2Pro结构体字段设置也可在LoadData接口defaultConfig参数的isSetFMatrix字段为false时通过SetFmatrix显式设置fmatrixMode需与结构体的fMatrixCtrl保持一致img2col的repeat参数需通过SetLoadDataRepeat配置padding填充值可通过结构体字段或SetLoadDataPaddingValue设置。详细内容请参考矩阵计算的搬入。通过Mmad接口对L0A Buffer、L0B Buffer上的数据进行矩阵计算并输出结果到L0C Buffer上。详细内容请参考Mmad计算。通过Fixpipe接口将L0C Buffer的数据进行处理并按指定格式搬出到GMFixpipe接口可以利用Fixpipe Buffer数据进行如随路量化、Relu等操作。L0C Buffer上存放的卷积结果为NC1HWC0格式Fixpipe通过NZ2ND能力将其转为NHWC格式输出。 特别地针对Ascend 950PR/Ascend 950DT产品Fixpipe还支持通过NZ2DN能力将L0C Buffer上的卷积结果转为NCHW格式输出。 详细内容请参考卷积格式转换。更多搬出相关内容请参考矩阵计算的搬出。【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考