昇腾社区首页
中文
注册

aclnnGroupedMatmulFinalizeRoutingWeightNzV2

产品支持情况

产品 是否支持
[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]
[object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]
[object Object]Atlas 200I/500 A2 推理产品[object Object] ×
[object Object]Atlas 推理系列产品 [object Object] ×
[object Object]Atlas 训练系列产品[object Object] ×

功能说明

算子功能:GroupedMatmul和MoeFinalizeRouting的融合算子,GroupedMatmul计算后的输出按照索引做combine动作,支持w为昇腾亲和数据排布格式(NZ)。 本接口相较于undefined,新增对INT4类型weight矩阵的支持,并新增入参offsetOptional、antiquantScaleOptional、antiquantOffsetOptional、tuningConfigOptional,其中前三个参数当前为预留参数,暂不生效,传入空指针即可。tuningConfigOptional是调优参数,数组中的第一个值表示各个专家处理的token数的预期值,算子tiling时会按照该预期值合理进行tiling切分,性能更优。请根据实际情况选择合适的接口。

函数原型

每个算子分为undefined,必须先调用“aclnnGroupedMatmulFinalizeRoutingWeightNzV2GetWorkspaceSize”接口获取计算所需workspace大小以及包含了算子计算流程的执行器,再调用“aclnnGroupedMatmulFinalizeRoutingWeightNzV2”接口执行计算。

  • aclnnStatus aclnnGroupedMatmulFinalizeRoutingWeightNzV2GetWorkspaceSize(const aclTensor *x, aclTensor *w, const aclTensor *scaleOptional, const aclTensor *biasOptional, const aclTensor *offsetOptional, const aclTensor *antiquantScaleOptional, const aclTensor *antiquantOffsetOptional, const aclTensor *pertokenScaleOptional, const aclTensor *groupListOptional, const aclTensor *sharedInputOptional, const aclTensor *logitOptional, const aclTensor *rowIndexOptional, int64_t dtype, float sharedInputWeight, int64_t sharedInputOffset, bool transposeX, bool transposeW, int64_t groupListType, const aclIntArray *tuningConfigOptional, aclTensor *y, uint64_t *workspaceSize, aclOpExecutor **executor)
  • aclnnStatus aclnnGroupedMatmulFinalizeRoutingWeightNzV2(void* workspace, uint64_t workspaceSize, aclOpExecutor* executor, aclrtStream stream)

aclnnGroupedMatmulFinalizeRoutingWeightNzV2GetWorkspaceSize

  • 参数说明:

    • x(aclTensor*,计算输入):Device侧的aclTensor,输入x(左矩阵),undefined支持ND,shape支持2维,维度为(m, k), 数据类型支持INT8,维度m的取值范围为[1,16*1024*8];w为INT8时k支持256、512、1024、1408、2048,w为INT4时k支持2048。
    • w(aclTensor*,计算输入):Device侧的aclTensor,输入weight(右矩阵),undefined支持昇腾亲和数据排布格式(NZ)。数据类型支持INT8、INT4(传入数据为INT32时每个元素按8个INT4来处理),shape支持5维。维度为(e, n1, k1, k0, n0),其中k0 = 16,n0 = 32(INT8)或n0 = 64(INT4), x shape中的k和w shape中的k1需要满足以下关系:ceilDiv(k,16) = k1。可使用aclnnCalculateMatmulWeightSizeV2接口以及aclnnTransMatmulWeight接口完成输入Format从ND到昇腾亲和数据排布格式(NZ)的转换。e取值范围[1,256]。
    • scaleOptional(aclTensor*,可选计算输入):Device侧的aclTensor,代表per-channel量化参数中的缩放因子,undefined支持ND,w为INT8时,数据类型支持FLOAT32,shape是2维(e, n),n = n1 * n0,e和w的e一致,n支持2048、7168、7680;w为INT4时,数据类型支持INT64,shape支持三维,维度为(e, 1, n),e和w的e一致,n = n1 * n0,n支持7168,不支持非连续的Tensor。
    • biasOptional(aclTensor*,可选计算输入):Device侧的aclTensor,矩阵偏移bias。w为INT8时暂不生效,传入空指针即可;w为INT4时,undefined支持ND,数据类型支持FLOAT32,shape支持二维,维度为(e, n),e、n和w的e、n一致,不支持非连续的Tensor。
    • offsetOptional(aclTensor*,可选计算输入):Device侧的aclTensor,非对称量化的偏移量。w为INT8时暂不生效,传入空指针即可;w为INT4时,undefined支持ND,数据类型支持FLOAT32,shape支持三维,维度为(e, 1, n),e、n和w的e、n一致,不支持非连续的Tensor。
    • antiquantScaleOptional(aclTensor*,可选计算输入):Device侧的aclTensor,伪量化的缩放因子,undefined支持ND,数据类型支持FLOAT32,当前为预留参数,暂不生效,传入空指针即可。
    • antiquantOffsetOptional(aclTensor*,可选计算输入):Device侧的aclTensor,伪量化的偏移量,undefined支持ND,数据类型支持FLOAT32,当前为预留参数,暂不生效,传入空指针即可。
    • pertokenScaleOptional(aclTensor*,可选计算输入):Device侧的aclTensor,矩阵计算的反量化参数,undefined支持ND,对应x矩阵,维度为(m),数据类型支持FLOAT32,不支持非连续的Tensor。
    • groupListOptional(aclTensor*,可选计算输入):Device侧的aclTensor,代表输入和输出分组轴方向的matmul大小分布,数据类型支持INT64,undefined支持ND,维度为(e),grouplist的值总和小于等于m。
    • sharedInputOptional(aclTensor*,可选计算输入):Device侧的aclTensor,moe计算中共享专家的输出,需要与moe专家的输出进行combine操作,数据类型支持BFLOAT16,不支持非连续的Tensor。undefined支持ND,维度(batch/dp, n),batch/dp取值范围[1, 2*1024],batch取值范围[1, 16*1024]。
    • logitOptional(aclTensor*,可选计算输入):Device侧的aclTensor,moe专家对各个token的logit大小,矩阵乘的计算输出与该logit做乘法,然后索引进行combine,不支持非连续的Tensor。undefined支持ND,维度(m),数据类型支持FLOAT32。
    • rowIndexOptional(aclTensor*,可选计算输入):Device侧的aclTensor,moe专家输出按照该rowIndex进行combine,其中的值即为combine做scatter add的索引,不支持非连续的Tensor。undefined支持ND,维度为(m),数据类型支持INT64、INT32。
    • dtype(int64_t,计算输入):GroupedMatmul计算的输出类型,0:FLOAT32;1:FLOAT16;2:BFLOAT16,仅支持取0。
    • sharedInputWeight(float,计算输入):共享专家与moe专家进行combine的系数,sharedInput先于该参数乘,然后在和moe专家结果累加。
    • sharedInputOffset(int64_t,计算输入):共享专家输出的在总输出中的偏移。
    • transposeX(bool,计算输入):左矩阵是否转置,仅支持false。
    • transposeW(bool,计算输入):右矩阵是否转置,仅支持false。
    • groupListType(int64_t,计算输入):GroupedMatmul的分组模式:配置为0:cumsum模式,即为前缀和;配置为1:count模式。
    • tuningConfigOptional(aclIntArray*, 可选计算输入): Host侧的aclIntArray, 数组里面存储INT64元素,要求是非负数且不大于x矩阵的行数。数组中的第一个元素表示各个专家处理的token数的预期值,算子tiling时会按照数组的第一个元素合理进行tiling切分,性能更优。从第二个元素开始预留,用户无须填写。未来会进行扩展。兼容历史版本,用户如不使用该参数,不传入(即为nullptr)即可。
    • y(aclTensor*,计算输出):2D的Tensor,不支持非连续的Tensor,输出的数据类型固定为FLOAT32。undefined支持ND,维度(batch, n)。
    • workspaceSize(uint64_t*,出参):返回需要在Device侧申请的workspace大小。
    • executor(aclOpExecutor**,出参):返回op执行器,包含了算子计算流程。
  • 返回值:

    返回aclnnStatus状态码,具体参见undefined

    [object Object]

aclnnGroupedMatmulFinalizeRoutingWeightNzV2

  • 参数说明:

    • workspace(void*,入参):在Device侧申请的workspace内存地址。
    • workspaceSize(uint64_t*,入参):在Device侧申请的workspace大小,由第一段接口aclnnGroupedMatmulFinalizeRoutingWeightNzV2GetWorkspaceSize获取。
    • executor(aclOpExecutor*,入参):op执行器,包含了算子计算流程。
    • stream(aclrtStream,入参):指定执行任务的Stream。
  • 返回值:

    返回aclnnStatus状态码,具体参见undefined

约束说明

输入和输出支持以下数据类型组合:

x w scale bias offset antiquantScale antiquantOffset pertokenScale groupList sharedInput logit rowIndex out tuningConfigOptional
INT8 INT8 FLOAT32 null null null null FLOAT32 INT64 BFLOAT16 FLOAT32 INT64 FLOAT IntArray
INT8 INT8 FLOAT32 null null null null FLOAT32 INT64 BFLOAT16 FLOAT32 INT64 FLOAT IntArray
INT8 INT4 INT64 FLOAT32 FLOAT32 null null FLOAT32 INT64 BFLOAT16 FLOAT32 INT64 FLOAT IntArray
INT8 INT4 INT64 FLOAT32 null null null FLOAT32 INT64 BFLOAT16 FLOAT32 INT64 FLOAT IntArray

调用示例

示例代码如下,仅供参考,具体编译和执行过程请参考undefined

[object Object]