Files
Masahiro Tanaka 02663d6e50 Support AutoEP with ZeRO-3 zero.Init source modules (#8060)
This PR enables ZeRO3 support for AutoEP-managed MoE layers by
partitioning expert parameters over expert replica groups while router
and replicated parameters use the global data-parallel group.

With ZeRO3 enable, AutoEP preserves global data-parallel gradient
averaging for AutoEP expert parameters while reducing them over expert
replica groups. ZeRO parameters are gathered before AutoEP reads router
or expert tensors when replacing MoE modules created under
`deepspeed.zero.Init()`.

---------

Signed-off-by: Masahiro Tanaka <mtanaka@anyscale.com>
Co-authored-by: Ma, Guokai <guokai.ma@gmail.com>
2026-06-26 22:29:58 +00:00

107 lines
4.9 KiB
ReStructuredText

AutoEP (Automatic Expert Parallelism)
=====================================
AutoEP automatically detects MoE layers in Hugging Face models and replaces them
with EP-enabled versions, requiring zero model code changes. It follows the
pattern of AutoTP (Automatic Tensor Parallelism).
This API is separate from the explicit ``deepspeed.moe.layer.MoE`` layer API.
For the explicit DeepSpeed MoE layer API, see :doc:`moe`.
**Built-in AutoEP presets:** ``mixtral`` (Mixtral), ``qwen3_moe`` (Qwen3-MoE),
``qwen3_5_moe`` (Qwen3.5-MoE), ``deepseek_v2`` (DeepSeek-V2), and
``deepseek_v3`` (DeepSeek-V3).
The preset name means AutoEP knows the router, expert, and weight naming
patterns for that model family. Running a Hugging Face model also requires a
Transformers build that exposes the matching config/model classes,
``model.config.model_type`` value, and fused expert layout.
.. list-table:: AutoEP preset compatibility by Transformers version
:header-rows: 1
* - Preset
- Minimum Transformers version
- Notes
* - ``mixtral``
- ``5.0.0``
-
* - ``qwen3_moe``
- ``5.0.0``
- Also covers Qwen2-MoE when the installed Transformers build uses the
validated fused expert layout. Qwen3-MoE classes appear in ``4.51.3``,
but the tested ``4.x`` builds do not match the validated AutoEP layout.
* - ``qwen3_5_moe``
- ``5.2.0``
- Requires the Qwen3.5 text-backbone ``qwen3_5_moe_text`` model type;
for performance on Qwen3.5's Gated DeltaNet layers, install optimized
kernels. See the `Hugging Face Transformers kernel loading docs
<https://huggingface.co/docs/transformers/kernel_doc/loading_kernels>`__
and the `Qwen FlashQLA blog <https://qwen.ai/blog?id=flashqla>`__.
* - ``deepseek_v2``
- ``5.0.0``
- ``load_balance_coeff`` / expert-bias auxiliary-loss-free load balancing
is not currently supported; non-null values are rejected.
* - ``deepseek_v3``
- ``5.0.0``
- ``load_balance_coeff`` / expert-bias auxiliary-loss-free load balancing
is not currently supported; non-null values are rejected.
**ZeRO compatibility:** Stages 0, 1, and 2, plus constrained Stage 3
support. Stage 3 requires AutoEP-managed MoE layers and does not support native
DeepSpeed MoE layers, AutoTP, tensor model parallelism from ``mpu``, sequence
parallelism, MiCS, hpZeRO secondary tensor groups, non-1 expert tensor
parallelism, or quantized gradients. Stage 3 AutoEP checkpoints are saved
partition-natively in the ``zero_pp_rank_*`` shard files and support
same-topology load, module-only loads (``load_module_only``),
optimizer-state-free loads (``load_optimizer_states=False``), and Universal
Checkpoint conversion. Optimizer-including Universal Checkpoint loads can
resume with a different data-parallel world size, a different ``autoep_size``,
or both, when the target ``autoep_size`` divides the model's expert count.
Weights-only/module-only Universal Checkpoint loads use the converted
``fp32.pt`` parameter files and support the same data-parallel and
``autoep_size`` topology changes.
**Usage:**
.. code-block:: json
{
"expert_parallel": {
"enabled": true,
"autoep_size": 4,
"preset_model": "mixtral"
}
}
**How it works:**
1. During ``deepspeed.initialize()``, AutoEP scans the model for MoE layers
using preset-defined patterns (router name, expert name, weight shapes).
2. Detected MoE blocks are replaced with ``AutoEPMoELayer``, which uses
TorchTitan's grouped GEMM kernels and AllToAll token dispatch.
3. EP/EDP process groups are created automatically based on ``autoep_size``.
4. Expert parameters are marked for expert-data-parallel gradient reduction;
router and shared-expert parameters use standard data-parallel reduction.
**Constraints:**
- ``autoep_size`` must divide ``num_experts`` for all detected MoE layers.
- ``autoep_size=1`` is valid: all experts remain local (no AllToAll), useful
for functional testing on a single GPU.
- AutoEP currently cannot be combined with AutoTP
(``tensor_parallel.autotp_size > 1``) or tensor model parallelism from
``mpu``; support is planned as follow-up work.
- AutoEP with ZeRO Stage 3 is supported only without sequence parallelism,
MiCS, hpZeRO secondary tensor groups, non-1 expert tensor parallelism, or
quantized gradients.
- Regular checkpoint save/load requires matching ``autoep_size``. To change
``autoep_size`` or data-parallel world size across runs for the same
AutoEP-detected model topology, convert the checkpoint to Universal
Checkpoint format and load it with ``checkpoint.load_universal``; see the
`Universal Checkpointing tutorial </tutorials/universal-checkpointing/>`__
for the detailed flow and constraints.
- DeepSeek-V2 and DeepSeek-V3 AutoEP do not support load-balance expert bias
yet. The built-in DeepSeek presets disable it by default; explicit non-null
values fail.