开发者
资源
[object Object][object Object][object Object]undefined
[object Object]
  • 接口功能:完成AlltoAll通信、Permute(保证通信后地址连续)、Quant、Matmul和Dequant计算的融合,先通信后计算,支持K-C量化、K-C动态量化和mx

  • 计算公式:假设x1输入shape为(BS, H),mx量化场景下x1Scale输入shape为(BS, ceil(H/64), 2),rankSize为NPU卡数

    • [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]:

      • K-C量化场景:

        commOut=AlltoAll(x1.view(rankSize,BS/rankSize,H))permutedOut=commOut.permute(1,0,2).view(BS/rankSize,rankSizeH)outputquant=x1@x2output=outputquant×x1scale×x2scaleoutput=output+biascommOut = AlltoAll(x1.view(rankSize, BS/rankSize, H)) \\ permutedOut = commOut.permute(1, 0, 2).view(BS/rankSize, rankSize*H) \\ output_{quant} = x1 @ x2 \\ output = output_{quant} \times x1_{scale} \times x2_{scale} \\ output = output + bias
      • K-C动态量化场景:

        commOut=AlltoAll(x1.view(rankSize,BS/rankSize,H))permutedOut=commOut.permute(1,0,2).view(BS/rankSize,rankSizeH)x1quant,x1scale=Quant(permutedOut)outputquant=x1quant@x2output=outputquant×x1scale×x2scaleoutput=output+biascommOut = AlltoAll(x1.view(rankSize, BS/rankSize, H)) \\ permutedOut = commOut.permute(1, 0, 2).view(BS/rankSize, rankSize*H) \\ x1_{quant}, x1_{scale} = Quant(permutedOut) \\ output_{quant} = x1_{quant} @ x2 \\ output = output_{quant} \times x1_{scale} \times x2_{scale} \\ output = output + bias
    • Atlas 350 加速卡:

      • K-C动态量化场景:

        commOut=AlltoAll(x1.view(rankSize,BS/rankSize,H))permutedOut=commOut.permute(1,0,2).view(BS/rankSize,rankSizeH)dynQuantX1,dynQuantX1Scale=dynamicQuant(permutedOut)output=(dynQuantX1@x2+bias)×dynQuantX1Scale×x2ScalecommOut = AlltoAll(x1.view(rankSize, BS/rankSize, H)) \\ permutedOut = commOut.permute(1, 0, 2).view(BS/rankSize, rankSize*H) \\ dynQuantX1, dynQuantX1Scale = dynamicQuant(permutedOut) \\ output = (dynQuantX1@x2 + bias) \times dynQuantX1Scale \times x2Scale
      • mx量化场景:

        commOut=AlltoAll(x1.view(rankSize,BS/rankSize,H))permutedOut=commOut.permute(1,0,2).view(BS/rankSize,rankSizeH)commX1Scale=AlltoAll(x1Scale.view(rankSize,BS/rankSize,ceil(H/64),2))permuteX1Scale=commX1Scale.permute(1,0,2,3)permutedX1Scale=permuteX1Scale.view(BS/rankSize,ceil(H/64)rankSize,2)output=(permutedOutpermutedX1Scale)@(x2x2Scale)+biascommOut = AlltoAll(x1.view(rankSize, BS/rankSize, H)) \\ permutedOut = commOut.permute(1, 0, 2).view(BS/rankSize, rankSize*H) \\ commX1Scale = AlltoAll(x1Scale.view(rankSize, BS/rankSize, ceil(H/64), 2)) \\ permuteX1Scale = commX1Scale.permute(1, 0, 2, 3) \\ permutedX1Scale = permuteX1Scale.view(BS/rankSize, ceil(H/64)*rankSize, 2) \\ output = (permutedOut* permutedX1Scale)@(x2* x2Scale) + bias
[object Object]

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

[object Object]
[object Object]
[object Object]
  • 参数说明​:

    [object Object]

    x1QuantMode、x2QuantMode、commQuantMode的枚举值跟关系如下:

    • 0: 不量化
    • 1: pertensor
    • 2: perchannel
    • 3: pertoken
    • 4: pergroup
    • 5: perblock
    • 6: mx量化
    • 7: pertoken动态量化
  • 返回值

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

    第一段接口完成入参校验,出现以下场景时报错:

    [object Object]
[object Object]
  • 参数说明:

    [object Object]
  • 返回值:

    返回aclnnStatus状态码,具体参见

[object Object]
  • 默认支持确定性计算。
  • NPU卡数(rankSize),根据设备型号有不同限制:
    • [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]:支持2、4、8卡。
    • Atlas 350 加速卡:支持2、4、8、16卡。
  • 参数说明中shape使用的变量BS必须整除rankSize。
  • BS和N的值不得超过2147483647(INT32_MAX),BS的值不得小于2,N的值不得小于1。
  • 不支持空tensor。
  • 非连续tensor的支持度根据不同设备型号有不同的限制:
    • [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]:不支持任何非连续tensor。
    • Atlas 350 加速卡:仅支持x2为非连续tensor,其它非连续tensor均不支持。
  • 传入的x1、x2、x2Scale和output不为空指针,且
    • Atlas 350 加速卡:在x1QuantMode为pertoken动态量化场景下,不支持传入x1ScaleOptional。
  • 该算子输入输出的数据类型、数据维度和量化模式根据不同设备型号有不同的限制:
    • [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]:
      • 量化模式:
        • 目前支持左矩阵perToken量化和perToken动态量化,x1QuantMode=3或7;右矩阵perChannel量化,x2QuantMode=2。
      • 类型约束:
        • x1、alltoAllOutOptional的数据类型必须一致。
        • 若x1、x2、alltoallout输入int32类型,则视作8个int4打包,会被重新解释为int4。
        • A16W8和A16W4时,smoothQuant场景,x1ScaleOptional与x1的数据类型必须一致。
        • A16W8时,x1、x2、biasOptional和output支持的数据类型组合有:[object Object]undefined
        • A16W4时,x1、x2、biasOptional和output支持的数据类型组合有:[object Object]undefined
        • A4W4时,x1、x2、biasOptional和output支持的数据类型组合有:[object Object]undefined
      • 维度约束:
        • A16W8时,rankSize * H必须整除16;rankSize * H取值范围:[1, 35000]。
        • A16W4时,rankSize * H必须整除16;N必须为偶数; rankSize * H取值范围:[1, 35000]。
        • A4W4时,H与N必须为偶数;rankSize * H取值范围:[1, 35000]。
    • Atlas 350 加速卡:
      • 量化模式:
        • 目前支持:K-C动态量化,左矩阵perToken动态量化,x1QuantMode=7,右矩阵perChannel量化,x2QuantMode=2;mx量化,左矩阵mx量化,x1QuantMode=6,右矩阵mx量化,x2QuantMode=6。
      • 类型约束:
        • x1、alltoAllOutOptional的数据类型必须一致。
        • x1QuantDtype在K-C动态量化场景下配置生效,支持配置35(表示aclDataType.ACL_FLOAT8_E5M2)和36(表示aclDataType.ACL_FLOAT8_E4M3FN)。其它量化场景配置不生效。
        • biasOptional可以为空。
        • 输入输出支持的数据类型组合有:
          • K-C动态量化: [object Object]undefined
          • mx量化:[object Object]undefined
      • 维度约束:
        • rankSize * H范围仅支持[1, 65535]。
        • mx量化场景下,H必须整除64。
        • mx量化场景下,x2必须转置,shape为(H*rankSize, N),transposeX2为True。
  • 通算融合算子不支持并发调用,不同的通算融合算子也不支持并发调用。
  • 不支持跨超节点通信,只支持超节点内。
[object Object]

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

说明:本示例代码调用了部分HCCL集合通信库接口:HcclGetCommName、HcclCommInitAll、HcclCommDestroy, 请参考

  • [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]:

    [object Object]
  • Atlas 350 加速卡:

    [object Object]