- [object Object]Ascend 950DT[object Object]:支持
- [object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:支持
- [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]:支持
- [object Object]Atlas 200I/500 A2 推理产品[object Object]:不支持
- [object Object]Atlas 推理系列产品[object Object]:不支持
- [object Object]Atlas 训练系列产品[object Object]:不支持
- 接口功能:需与配套使用,完成MoE的并行部署下的token的dispatch和combine。
- 支持非量化、静态量化、pertoken动态量化、pergroup动态量化、mx动态量化和mx clip动态量化场景,对token数据先进行量化(可选),进行EP(Expert Parallelism)域的alltoallv通信;
- 支持特殊专家场景。
- 计算公式:
量化场景:
若
[object Object]不为None,先按专家维或量化系数进行平滑/缩放;若为None,则直接使用[object Object]:如果quant_mode=0(非量化)
如果quant_mode=1(静态量化)
如果quant_mode=2(动态量化)
如果quant_mode=3(pergroup量化)
如果quant_mode=4(mxfp8量化)
如果quant_mode=5(mxfp8量化chip方法)
特殊专家场景:
零专家场景,即
[object Object]不为0:拷贝专家场景,即
[object Object]不为0:常量专家场景,即
[object Object]不为0:参数ori_x、const_expert_alpha_1、const_expert_alpha_2、const_expert_v见文档。
该接口支持推理场景下使用。
该接口支持单算子模式和torchair图模式调用,
[object Object]和[object Object]必须配套使用。各输入Tensor的list[Tensor]长度、是否转置、是否支持非连续Tensor约束如下:
[object Object]参数里Shape使用的变量如下:
A:表示本卡接收的最大token数量,取值范围如下
- 对于共享专家,要满足A=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 >= num_max_dispatch_tokens_per_rank * ep_world_size * min(local_expert_num, K)。
H:表示hidden size隐藏层大小。取值为[1024, 8192]。
BS:表示batch sequence size,即本卡最终输出的token数量。取值范围为0<BS≤512。
K:表示选取topK个专家,取值范围为0<K≤16,同时满足0 < K ≤ num_experts + zero_expert_num + copy_expert_num + const_expert_num。
local_expert_num:表示本卡专家数量。
- 对于共享专家卡,local_expert_num为1。
- 对于MoE专家卡,local_expert_num=num_experts/(ep_world_size-shared_expert_rank_num),应满足0 < local_expert_num * ep_world_size ≤ 2048。
在不同产品型号、不同通信算法或不同版本中,
[object Object]的Tensor输出[object Object]、[object Object]、[object Object]中的元素值可能不同,使用时直接将上述Tensor传给[object Object]对应参数即可,模型其他业务逻辑不应对其存在依赖。调用接口过程中使用的
[object Object]、[object Object]、[object Object]、[object Object]、[object Object]参数取值所有卡需保持一致,[object Object]、[object Object]网络中不同层中也需保持一致,且和对应参数也保持一致。该场景下单卡包含双DIE(简称为“晶粒”或“裸片”),因此参数说明里的“本卡”均表示单DIE。
num_experts + zero_expert_num + copy_expert_num + const_expert_num < MAX_INT32。
quant_mode相关约束:
- [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]:
[object Object]表示非量化场景,[object Object]不传,[object Object]的数据类型支持float16、bfloat16。[object Object]表示pertoken动态量化场景,[object Object]的数据类型支持int8,[object Object]可传可不传;若传入有效Tensor,shape为(num_experts, H),输出[object Object]shape为(A,)。
- [object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:
[object Object]可传有效Tensor、空Tensor或None,有效Tensor为2D Tensor,shape为(BS, K),传空Tensor或None时[object Object]和[object Object]输出无效;传有效Tensor时支持[object Object]输出。[object Object]表示非量化场景,[object Object]不传,[object Object]的数据类型支持float16、bfloat16。[object Object]表示pertoken动态量化场景,[object Object]的数据类型支持int8,[object Object]可传可不传;若存在共享专家且传入有效Tensor,shape为(shared_expert_num + num_experts, H),若不存在共享专家,shape为(num_experts, H),输出[object Object]shape为(A,)。
- [object Object]Ascend 950DT[object Object]:
[object Object]可传有效Tensor、空Tensor或None,有效Tensor为2D Tensor,shape为(BS, K),传空Tensor或None时[object Object]和[object Object]输出无效;传有效Tensor时支持[object Object]输出。[object Object]表示非量化场景。当[object Object]为float16或bfloat16时,[object Object]可与[object Object]一致,也可通过[object Object]指定为hifloat8,[object Object]必须为None;当[object Object]为hifloat8、float8_e5m2、float8_e4m3fn、float4_e2m1、float4_e1m2时,[object Object]必须传有效Tensor,[object Object]与[object Object]逻辑类型一致。[object Object]为hifloat8时,[object Object]逻辑类型为float;[object Object]为float8_e5m2或float8_e4m3fn时,[object Object]逻辑类型为float或float8_e8m0;[object Object]为float4_e2m1或float4_e1m2时,[object Object]逻辑类型为float8_e8m0,且H必须为偶数。此时[object Object]shape为(BS, dim1),其中dim1 <= H。[object Object]表示静态量化场景,[object Object]支持int8、hifloat8,[object Object]必须传有效Tensor。[object Object]为int8时,[object Object]可表示量化系数,shape为(1,);也可表示每个专家共享的平滑权重,shape为(H,);也可表示融合了每个专家平滑权重的量化系数,有共享专家时shape为(shared_expert_num + num_experts, H),无共享专家时shape为(num_experts, H)。[object Object]为hifloat8时,[object Object]shape必须为(1,)。[object Object]表示pertoken动态量化场景,[object Object]支持int8、float8_e4m3fn、float8_e5m2,[object Object]可传可不传;若传入有效Tensor,其专家维shape规则同[object Object],输出[object Object]shape为(A,)。[object Object]表示pergroup动态量化场景,[object Object]支持float8_e4m3fn、float8_e5m2,[object Object]可传可不传;若传入有效Tensor,其专家维shape规则同[object Object],输出[object Object]shape为(A, Ceil(H, 128))。[object Object]表示mx动态量化场景,[object Object]表示mx clip动态量化场景,[object Object]支持float8_e4m3fn、float8_e5m2、float4_e2m1、float4_e1m2,[object Object]必须为None,输出[object Object]shape为(A, Align2(Ceil(H, 32)));当[object Object]为float4_e2m1或float4_e1m2时,H必须为偶数。
- 本文中的
[object Object]表示[object Object],[object Object]表示向上对齐到2的整数倍。
- [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]:
HCCL通信域缓存区大小: 调用本接口前需检查HCCL_BUFFSIZE环境变量取值是否合理,该环境变量表示单个通信域占用内存大小,单位MB,不配置时默认为200MB。
- 该场景仅支持通过环境变量HCCL_BUFFSIZE配置,该环境变量按通信域粒度管理,每个通信域独占一组“2*HCCL_BUFFSIZE”大小的内存。
- ep通信域内,comm_alg配置为"fullmesh_v1"或"": 设置大小要求 >= 2 * (local_expert_num * max_bs * ep_world_size * Align512(Align32(2 * H) + 64) + (K + shared_expert_num) * max_bs * Align512(2 * H))。
- ep通信域内,comm_alg配置为"fullmesh_v2": 设置大小要求 >= 2 * (local_expert_num * max_bs * ep_world_size * 480Align512(Align32(2 * H) + 64) + (K + shared_expert_num) * max_bs * Align512(2 * H))。
- 其中480Align512(x) = ((x+480-1)/480)*512,Align512(x) = ((x+512-1)/512)*512,Align32(x) = ((x+32-1)/32)*32。
- 通信域开设大小可通过调用MoeDistributeBuffer.get_low_latency_ccl_buffer_size接口计算。
本文公式中的“/”表示整除。
通信域使用约束:
一个模型中的
[object Object]和[object Object]算子仅支持相同EP通信域,且该通信域中不允许有其他算子。一个通信域内的节点需在一个超节点内,不支持跨超节点。
版本配套约束:
静态图模式下,从Ascend Extension for PyTorch 8.0.0版本开始,Ascend Extension for PyTorch框架会对静态图中最后一个节点输出结果做Meta推导与inferShape推导的结果强校验。当图中只有一个Dispatch算子,若CANN版本落后于Ascend Extension for PyTorch版本,会出现Shape不匹配报错,建议用户升级CANN版本,详细的版本配套关系参见《》中“相关产品版本配套说明”。
默认支持确定性计算。
单算子模式调用:
[object Object]图模式调用:
[object Object]