专家混合(MoE)

层级规范

class deepspeed.moe.layer.MoE(hidden_size: int, expert: Module, num_experts: int = 1, ep_size: int = 1, k: int = 1, capacity_factor: float = 1.0, eval_capacity_factor: float = 1.0, min_capacity: int = 4, use_residual: bool = False, noisy_gate_policy: Optional[str] = None, drop_tokens: bool = True, use_rts: bool = True, use_tutel: bool = False, enable_expert_tensor_parallelism: bool = False, top2_2nd_expert_sampling: bool = True)[source]

初始化一个 MoE 层级。

参数
  • hidden_size (int) – 模型的隐藏维度,重要的是它也是输入和输出维度。

  • expert (nn.Module) – 定义专家的 PyTorch 模块(例如,MLP,torch.linear)。

  • num_experts (int, optional) – 默认值:1,每层级的专家总数。

  • ep_size (int, optional) – 默认值:1,专家并行世界或组中的排名数。

  • k (int, optional) – 默认值:1,top-k 门控值,仅支持 k=1 或 k=2。

  • capacity_factor (float, optional) – 默认值:1.0,专家在训练时的容量。

  • eval_capacity_factor (float, optional) – 默认值:1.0,专家在评估时的容量。

  • min_capacity (int, optional) – 默认值:4,每个专家的最小容量,与 capacity_factor 无关。

  • use_residual (bool, optional) – 默认值:False,使此 MoE 层级成为一个残差 MoE (https://arxiv.org/abs/2201.05596) 层级。

  • noisy_gate_policy (str, optional) – 默认值:None,噪声门控策略,有效选项为 “Jitter”、”RSample” 或 “None”。

  • drop_tokens (bool, optional) – 默认值:True,是否丢弃标记 - (设置为 False 等同于无限容量)。

  • use_rts (bool, optional) – 默认值:True,是否使用随机标记选择。

  • use_tutel (bool, optional) – 默认值:False,是否使用 Tutel 优化(如果已安装)。

  • enable_expert_tensor_parallelism (bool, optional) – 默认值:False,是否对专家使用张量并行。

  • top2_2nd_expert_sampling (bool, optional) – 默认值:True,是否对第二个专家进行采样。

forward(hidden_states: Tensor, used_token: Optional[Tensor] = None) Tuple[Tensor, Tensor, Tensor][source]

MoE 正向传播

参数
  • hidden_states (Tensor) – 层级的输入。

  • used_token (Tensor, optional) – 默认值:None,仅掩盖已使用的标记。

返回值

包含输出、门控损失和专家计数的元组。

  • output (Tensor): 模型的输出

  • l_aux (Tensor): 门控损失值

  • exp_counts (Tensor): 专家计数