开发者
资源
[object Object][object Object][object Object]undefined
[object Object]
  • API功能:先进行reduce_scatterv通信,再进行alltoallv通信,最后将接收的数据整合(乘权重再相加)。需与配套使用,相当于按npu_moe_distribute_dispatch算子收集数据的路径原路返回。

  • 计算公式:

    rs_out=ReduceScatterV(expend_x)ata_out=AlltoAllv(rs_out)x=Sum(expert_scalesata_out+expert_scalesshared_expert_x)rs\_out = ReduceScatterV(expend\_x)\\ ata\_out = AlltoAllv(rs\_out)\\ x = Sum(expert\_scales * ata\_out + expert\_scales * shared\_expert\_x)
[object Object]
[object Object]
[object Object]
  • expand_x ([object Object]):必选参数。根据[object Object]进行扩展过的token特征,要求为2维张量,shape为(max(tp_world_size, 1) *A, H),数据类型支持[object Object][object Object],数据格式为NDND,支持非连续的Tensor。

    • [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]:不支持共享专家场景。
  • expert_ids ([object Object]):必选参数。每个token的topK个专家索引,要求为2维张量,shape为(BS, K)。数据类型支持[object Object],数据格式为NDND,支持非连续的Tensor。对应[object Object]输入,张量里value取值范围为[0, moe_expert_num),且同一行中的K个value不能重复。

  • expand_idx ([object Object]):必选参数。表示给同一专家发送的token个数,要求为1维张量。数据类型支持[object Object],数据格式为NDND,支持非连续的Tensor。对应[object Object]输出。

    • [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]:要求shape为(BS * K,)。
    • [object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:要求shape为(BS * K,)。
  • ep_send_counts ([object Object]):必选参数。表示本卡每个专家发给EP(Expert Parallelism)域每个卡的token数(token数以前缀和的形式表示),要求为1维张量。数据类型支持[object Object],数据格式为NDND,支持非连续的Tensor。对应[object Object]输出。

    • [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]:要求shape为(moe_expert_num+2*global_bs*K*server_num,),前[object Object]个数表示在EP通信域内,该卡上每个专家收到来自其他各卡的token数(以前缀和的形式表示),2*global_bs*K*server_num用于存储机间和机内通信前,combine可提前做reduce操作的token个数和通信区偏移量,[object Object]传入0时此处按照bs*ep_world_size计算。
    • [object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:要求shape为(ep_world_size*max(tp_world_size, 1)*local_expert_num,)。
  • expert_scales ([object Object]):必选参数。表示每个token的topK个专家的权重,要求为2维张量,shape为(BS, K),其中共享专家不需要乘权重系数,直接相加即可。数据类型支持[object Object],数据格式为NDND,支持非连续的Tensor。

  • group_ep ([object Object]):必选参数。EP通信域名称,专家并行的通信域。字符串长度范围为[1, 128)。[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]时不能和[object Object]相同。

  • ep_world_size ([object Object]):必选参数,EP通信域size。

    • [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]:取值支持16、32、64。
    • [object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:取值支持8、16、32、64、128、144、256、288。
  • ep_rank_id ([object Object]):必选参数,EP通信域本卡ID,取值范围[0, ep_world_size),同一个EP通信域中各卡的[object Object]不重复。

  • moe_expert_num ([object Object]):必选参数,MoE专家数量,取值范围[1, 512],并且满足以下条件:moe_expert_num%(ep_world_size - shared_expert_rank_num)=0。

    • [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]:还需满足moe_expert_num/(ep_world_size - shared_expert_rank_num) <= 24。
  • [object Object]*[object Object]:必选参数,代表其之前的变量是位置相关的,必须按照顺序输入;之后的变量是可选参数,位置无关,需要使用键值对赋值,不赋值会使用默认值。

  • tp_send_counts ([object Object]):可选参数,表示本卡每个专家发给TP(Tensor Parallelism)通信域每个卡的数据量。对应[object Object]输出。

    • [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]:不支持TP通信域,使用默认输入None。
    • [object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:支持TP通信域,要求为一个1维张量,shape为(tp_world_size,),数据类型支持[object Object],数据格式为NDND,支持非连续的Tensor。
  • x_active_mask ([object Object]):预留参数,暂未使用,使用默认值即可。

  • activation_scale ([object Object]):预留参数,暂未使用,使用默认值即可。

  • weight_scale ([object Object]):预留参数,暂未使用,使用默认值即可。

  • group_list ([object Object]):预留参数,暂未使用,使用默认值即可。

  • expand_scales ([object Object]):对应[object Object]输出。

    • [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]:必选参数,要求为1维张量,shape为(A,),数据类型支持[object Object],数据格式为NDND,支持非连续的Tensor。
    • [object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:暂不支持该参数,使用默认值即可。
  • shared_expert_x ([object Object]):预留参数,暂未使用,使用默认值即可。

  • group_tp ([object Object]):可选参数,TP通信域名称,数据并行的通信域。有TP域通信才需要传参。默认值为"",代表无TP域。

    • [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]:eager模式使用默认值即可,图模式传入与[object Object]相同。
    • [object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:字符串长度范围为[1, 128),不能和[object Object]相同。
  • tp_world_size ([object Object]):可选参数,TP通信域size。有TP域通信才需要传参。

    • [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]:不支持TP域通信,使用默认值0即可。
    • [object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:当有TP域通信时,取值范围[0, 2],0和1表示无TP域通信,2表示有TP域通信。
  • tp_rank_id ([object Object]):可选参数,TP通信域本卡ID。有TP域通信才需要传参。

    • [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]:不支持TP域通信,使用默认值0即可。
    • [object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:当有TP域通信时,取值范围[0, 1],同一个TP通信域中各卡的[object Object]不重复。无TP域通信时,传0即可。
  • expert_shard_type ([object Object]):表示共享专家卡排布类型。

    • [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]:暂不支持该参数,使用默认值即可。
    • [object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:当前仅支持0,表示共享专家卡排在MoE专家卡前面。
  • shared_expert_num ([object Object]):表示共享专家数量,一个共享专家可以复制部署到多个卡上。

    • [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]:暂不支持该参数,使用默认值即可。
    • [object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:仅支持1,默认值为1。
  • shared_expert_rank_num ([object Object]):可选参数,表示共享专家卡数量。

    • [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]:不支持共享专家,传0即可。
    • [object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:取值范围[0, ep_world_size)。取0表示无共享专家,不取0时需满足ep_world_size%shared_expert_rank_num=0。
  • global_bs ([object Object]):可选参数,表示EP域全局的BS(batch size)大小。

    • [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]:当每个rank的BS不同时,支持传入max_bs*ep_world_size或者256*ep_world_size,其中max_bs表示单rank BS最大值,建议按max_bs*ep_world_size传入,固定按256*ep_world_size传入,在后续版本BS大于256的场景下会无法支持;当每个rank的BS相同时,支持取值0或BS*ep_world_size。
    • [object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:当每个rank的BS不同时,支持传入max_bs*ep_world_size,其中max_bs表示单rank BS最大值;当每个rank的BS相同时,支持取值0或BS*ep_world_size。
  • out_dtype ([object Object]):预留参数,暂未使用,使用默认值即可。

  • comm_quant_mode ([object Object]):表示通信量化类型。

    • [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]:支持取0和2。0表示通信时不量化,2表示通信时进行[object Object]量化。仅当HCCL_INTRA_PCIE_ENABLE=1且HCCL_INTRA_ROCE_ENABLE=0且驱动版本不低于25.0.RC1.1时才支持取2。
    • [object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:支持取0和2。0表示通信时不量化,2表示通信时进行[object Object]量化。当且仅当[object Object]不等于2时,可以使能[object Object]量化。
  • group_list_type ([object Object]):预留参数,暂未使用,使用默认值即可。

[object Object]

[object Object]

表示处理后的token,要求为2维张量,shape为(BS, H),数据类型支持[object Object][object Object],类型与输入[object Object]保持一致,数据格式为NDND,不支持非连续的Tensor。

[object Object]
  • 该接口支持推理场景下使用。

  • 该接口支持静态图模式,[object Object][object Object]必须配套使用。

  • 在不同产品型号、不同通信算法或不同版本中,[object Object]的Tensor输出[object Object][object Object][object Object][object Object]中的元素值可能不同,使用时直接将上述Tensor传给[object Object]对应参数即可,模型其他业务逻辑不应对其存在依赖。

  • 调用接口过程中使用的[object Object][object Object][object Object][object Object][object Object][object Object][object Object][object Object][object Object]参数取值所有卡需保持一致,[object Object][object Object][object Object][object Object][object Object][object Object]网络中不同层中也需保持一致,且和对应参数也保持一致。

  • [object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:该场景下单卡包含双DIE(简称为“晶粒”或“裸片”),因此参数说明里的“本卡”均表示单DIE。

  • 参数里Shape使用的变量如下:

    • A:表示本卡接收的最大token数量,取值范围如下:

      • 对于共享专家,当[object Object]为0时,要满足A=BS*shared_expert_num/shared_expert_rank_num;当[object Object]非0时,要满足A=global_bs*shared_expert_num/shared_expert_rank_num。
      • 对于MoE专家,当[object Object]为0时,要满足A>=BS*ep_world_size*min(local_expert_num, K);当[object Object]非0时,要满足A>=global_bs* min(local_expert_num, K)。
    • H:表示hidden size隐藏层大小。

      • [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]:取值范围(0, 7168],且保证是32的整数倍。
      • [object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:仅支持 7168。
    • BS:表示待发送的token数量。

      • [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]:取值范围为0<BS≤256。
      • [object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:取值范围为0<BS≤512。
    • K:表示选取topK个专家,需满足0<K≤moe_expert_num。

      • [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]:保证取值范围为0<K≤16。
      • [object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:保证取值范围为0<K≤8。
    • server_num:表示服务器的节点数,取值只支持2、4、8。

      • [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]:仅该场景的shape使用了该变量。
    • local_expert_num:表示本卡专家数量。

      • 对于共享专家卡,local_expert_num=1
      • 对于MoE专家卡,local_expert_num=moe_expert_num/(ep_world_size-shared_expert_rank_num),当local_expert_num>1时,不支持TP域通信。
  • 调用本接口前需检查HCCL_BUFFSIZE环境变量取值是否合理:

    [object Object]
    • [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]:要求>=2*(BS*ep_world_size*min(local_expert_num, K)*H*sizeof(uint16)+2MB)。
    • [object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:要求>=2且满足1024^2*(HCCL_BUFFSIZE-2)/2>=BS*2*(H+128)*(ep_world_size*local_expert_num+K+1),local_expert_num需使用MoE专家卡的本卡专家数。
  • [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]:配置环境变量HCCL_INTRA_PCIE_ENABLE=1和HCCL_INTRA_ROCE_ENABLE=0可以减少跨机通信数据量,提升算子性能。此时要求HCCL_BUFFSIZE>=moe_expert_num*BS*(H*sizeof(dtype_x)+4*((K+7)/8*8)*sizeof(uint32))+4MB+100MB。并且,对于入参moe_expert_num,只要求moe_expert_num%(ep_world_size - shared_expert_rank_num)=0,不要求moe_expert_num/(ep_world_size - shared_expert_rank_num) <= 24。

  • 本文公式中的“/”表示整除。

  • 通信域使用约束:

    • 一个模型中的[object Object][object Object]算子仅支持相同EP通信域,且该通信域中不允许有其他算子。

    • 一个模型中的[object Object][object Object]算子仅支持相同TP通信域或都不支持TP通信域,有TP通信域时该通信域中不允许有其他算子。

[object Object]
  • 单算子模式调用

    [object Object]
  • 图模式调用

    [object Object]