Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
119 commits
Select commit Hold shift + click to select a range
eecb6a8
Add dense and expert device mesh views with a MeshManager
3outeille Sep 16, 2026
29f5126
cleaning
3outeille Sep 16, 2026
4074526
clean
3outeille Sep 16, 2026
578af0e
update
3outeille Sep 16, 2026
083e253
clean doc
3outeille Sep 16, 2026
2e68296
Use ep_size in the Kimi K2.5 expert parallel example
3outeille Sep 16, 2026
29eb5a3
Enable expert parallelism in the Mega MoE example
3outeille Sep 16, 2026
d6090df
warn once
3outeille Sep 18, 2026
76ff6f0
Add dense and expert device mesh views with a MeshManager
3outeille Sep 16, 2026
9a1b525
cleaning
3outeille Sep 16, 2026
ce8657f
update
3outeille Sep 16, 2026
ea3aacb
clean doc
3outeille Sep 16, 2026
d498e80
Update src/transformers/distributed/mixin.py
3outeille Sep 18, 2026
ce3f576
style: ruff import block formatting in distributed config
3outeille Sep 18, 2026
f8415e7
add more comments
3outeille Sep 30, 2026
a115da8
Decouple tp_plan and ep_plan for expert parallelism.
3outeille Sep 18, 2026
271de16
Match expert paths with a regex and keep only expert rules under toke…
3outeille Sep 22, 2026
cc5200f
revert change on warning
3outeille Sep 30, 2026
17f7b65
Apply suggestion from @ArthurZucker
3outeille Sep 30, 2026
ef83726
cleaning
3outeille Sep 30, 2026
e7bfac9
Fix tied embeddings for models with an EP-only base plan
3outeille Sep 18, 2026
4cc84e4
[distributed] Add expert-parallel token dispatch, default for Qwen3 MoE
3outeille Sep 18, 2026
b756980
clean
3outeille Sep 18, 2026
4d5ef4c
fix
3outeille Sep 19, 2026
556f4b9
make check repo
3outeille Sep 28, 2026
59578e0
Drop the load-time ep_size == tp_size guard that rejects token dispatch
3outeille Sep 28, 2026
16fbcca
remove all to all warning by using functional version
3outeille Sep 29, 2026
60fd082
use ep plan instead of group_gemm is_expert
3outeille Sep 30, 2026
fc42fb9
use dtensor instead of manuall all_reduce
3outeille Sep 30, 2026
1478d28
better comment
3outeille Oct 1, 2026
51472f9
[`distributed`]: Fix DeepSeek-V4 tied embeddings with combined TP and…
3outeille Sep 30, 2026
ea814eb
linting
3outeille Oct 1, 2026
925415d
Add dense and expert device mesh views with a MeshManager
3outeille Sep 16, 2026
0c227f1
cleaning
3outeille Sep 16, 2026
a5958d4
clean
3outeille Sep 16, 2026
6571916
update
3outeille Sep 16, 2026
90fbd09
clean doc
3outeille Sep 16, 2026
e4561f0
Use ep_size in the Kimi K2.5 expert parallel example
3outeille Sep 16, 2026
7f4951f
Enable expert parallelism in the Mega MoE example
3outeille Sep 16, 2026
e65e3ea
warn once
3outeille Sep 18, 2026
03af9e8
Add dense and expert device mesh views with a MeshManager
3outeille Sep 16, 2026
69a145b
cleaning
3outeille Sep 16, 2026
caa7640
update
3outeille Sep 16, 2026
a3de4dc
clean doc
3outeille Sep 16, 2026
84cb4be
Update src/transformers/distributed/mixin.py
3outeille Sep 18, 2026
b552195
style: ruff import block formatting in distributed config
3outeille Sep 18, 2026
d1cf207
add more comments
3outeille Sep 30, 2026
4b655fb
Decouple tp_plan and ep_plan for expert parallelism.
3outeille Sep 18, 2026
a4f11e3
Match expert paths with a regex and keep only expert rules under toke…
3outeille Sep 22, 2026
a5cd182
revert change on warning
3outeille Sep 30, 2026
3d45692
Apply suggestion from @ArthurZucker
3outeille Sep 30, 2026
04752eb
cleaning
3outeille Sep 30, 2026
c41435b
Fix tied embeddings for models with an EP-only base plan
3outeille Sep 18, 2026
8dc8333
[distributed] Add expert-parallel token dispatch, default for Qwen3 MoE
3outeille Sep 18, 2026
865d5d9
clean
3outeille Sep 18, 2026
cac1b2b
fix
3outeille Sep 19, 2026
c59446d
make check repo
3outeille Sep 28, 2026
abf336c
Drop the load-time ep_size == tp_size guard that rejects token dispatch
3outeille Sep 28, 2026
6244a1c
remove all to all warning by using functional version
3outeille Sep 29, 2026
c72bbf7
use ep plan instead of group_gemm is_expert
3outeille Sep 30, 2026
c31a1b7
use dtensor instead of manuall all_reduce
3outeille Sep 30, 2026
00ee316
better comment
3outeille Oct 1, 2026
ec8278e
linting
3outeille Oct 1, 2026
39c7e41
Train models sharded at load time with the Trainer, token dispatch in…
3outeille Sep 16, 2026
dfec8d1
Use ep-dispatch version of expert_parallelism.md
3outeille Sep 25, 2026
628da80
Sync replicated trainable parameters when training a model sharded at…
3outeille Sep 25, 2026
e72d719
Fix utf-8 encoding in expert parallel trainer tests
3outeille Sep 28, 2026
e9bcdc5
[distributed] Default MoE expert-parallel plans to token dispatch
3outeille Sep 28, 2026
4497d74
remove
3outeille Sep 28, 2026
9b41975
fix ruff
3outeille Sep 28, 2026
69ecbf1
use attribute instead
3outeille Sep 28, 2026
0cb580c
Fix EP plans for youtu (dense, drop inherited plan) and zaya (token d…
3outeille Sep 28, 2026
bcbb851
fix
3outeille Oct 5, 2026
d51aca8
Merge branch 'ep-mesh-infrastructure' of github.com:huggingface/trans…
3outeille Oct 5, 2026
448315e
Merge branch 'ep-plans' of github.com:huggingface/transformers into e…
3outeille Oct 5, 2026
877afee
revert
3outeille Oct 5, 2026
bec5a12
Merge branch 'ep-dispatch' of github.com:huggingface/transformers int…
3outeille Oct 5, 2026
0ec824f
Merge branch 'main' into ep-mesh-infrastructure
3outeille Oct 5, 2026
b20486c
Merge branch 'ep-plans' into ep-dispatch
3outeille Oct 5, 2026
c85c8bc
Merge branch 'ep-mesh-infrastructure' into ep-plans
3outeille Oct 5, 2026
0d8d4f5
revert
3outeille Oct 5, 2026
a7a37be
Merge branch 'ep-dispatch' into ep-trainer
3outeille Oct 5, 2026
c9d6429
Merge branch 'ep-plans' into ep-dispatch
3outeille Oct 5, 2026
cedde47
typo
3outeille Oct 5, 2026
b62bbbc
Merge branch 'main' into ep-mesh-infrastructure
3outeille Oct 5, 2026
6a23a30
clearer
3outeille Oct 5, 2026
daac87a
Merge branch 'ep-mesh-infrastructure' of github.com:huggingface/trans…
3outeille Oct 5, 2026
6c73628
Merge branch 'main' into ep-mesh-infrastructure
3outeille Oct 5, 2026
b4d81b5
clean
3outeille Oct 6, 2026
e3cc578
Merge branch 'ep-mesh-infrastructure' of github.com:huggingface/trans…
3outeille Oct 6, 2026
9bb2518
Merge branch 'ep-mesh-infrastructure' into ep-plans
3outeille Oct 6, 2026
38704ae
Merge branch 'ep-plans' into ep-dispatch
3outeille Oct 6, 2026
7b43249
cleaning
3outeille Oct 6, 2026
e0f7012
cleaning
3outeille Oct 6, 2026
926ee70
Merge branch 'ep-plans' of github.com:huggingface/transformers into e…
3outeille Oct 6, 2026
746b2c5
Merge branch 'main' into ep-mesh-infrastructure
3outeille Oct 6, 2026
0eac0f5
Merge branch 'ep-mesh-infrastructure' into ep-plans
3outeille Oct 6, 2026
030900b
Merge branch 'ep-plans' into ep-dispatch
3outeille Oct 6, 2026
af79397
dont torch cat for empty tokens
3outeille Oct 6, 2026
43a8c2d
Merge branch 'ep-dispatch' of github.com:huggingface/transformers int…
3outeille Oct 6, 2026
37089c1
Merge branch 'ep-dispatch' into ep-trainer
3outeille Oct 6, 2026
40c20a4
Merge branch 'ep-trainer' into ep-dispatch-default
3outeille Oct 6, 2026
865aa96
check code quality
3outeille Oct 6, 2026
7b57dd2
Update src/transformers/distributed/utils.py
3outeille Oct 6, 2026
ec77a59
Merge branch 'main' into ep-mesh-infrastructure
3outeille Oct 6, 2026
7af3cbc
Update src/transformers/distributed/configuration_utils.py
3outeille Oct 6, 2026
f37bc0f
linting
3outeille Oct 6, 2026
11f0a3d
Merge branch 'ep-mesh-infrastructure' of github.com:huggingface/trans…
3outeille Oct 6, 2026
a4d0693
fix comment
3outeille Oct 6, 2026
6a504c1
Merge branch 'ep-mesh-infrastructure' into ep-plans
3outeille Oct 6, 2026
812c060
Merge branch 'main' into ep-mesh-infrastructure
3outeille Oct 6, 2026
13d2fc7
Merge branch 'ep-plans' into ep-dispatch
3outeille Oct 6, 2026
430bb2e
Merge branch 'ep-mesh-infrastructure' into ep-plans
3outeille Oct 6, 2026
e431d5c
Merge branch 'ep-dispatch' into ep-trainer
3outeille Oct 6, 2026
50d2f6b
Merge branch 'ep-trainer' into ep-dispatch-default
3outeille Oct 6, 2026
42d0607
Merge branch 'ep-plans' into ep-dispatch
3outeille Oct 6, 2026
b0fd271
Merge branch 'ep-dispatch' into ep-trainer
3outeille Oct 6, 2026
3186819
Merge branch 'ep-trainer' into ep-dispatch-default
3outeille Oct 6, 2026
114cc5c
Merge branch 'main' into ep-dispatch-default
3outeille Oct 6, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions docs/source/en/expert_parallelism.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ rendered properly in your Markdown viewer.

## DistributedConfig

Enable expert parallelism with the [`DistributedConfig`] class and the `ep_size` argument. Most models route with masking and all-reduce, which requires `ep_size=tp_size` so every rank in an expert group receives the same tokens. Models whose plan uses [token dispatch](#token-dispatch), such as Qwen3 MoE, can set `ep_size` independently of `tp_size`.
Enable expert parallelism with the [`DistributedConfig`] class and the `ep_size` argument. Most MoE models default to [token dispatch](#token-dispatch), so `ep_size` can be set independently of `tp_size`. A few, such as Llama 4 and Gemma 4, still default to masking and all-reduce (`"ep_router"` and `"moe_tp_experts"` in `model.ep_plan`). Masking is also available on any model with an `ep_plan` override, and requires `ep_size=tp_size` so every rank in an expert group receives the same tokens.

```py
import os
Expand Down Expand Up @@ -74,7 +74,7 @@ distributed_config = DistributedConfig(

Providing a plan does not infer parallel sizes: set `tp_size` and `ep_size` explicitly.

Qwen3 MoE defaults to `"ep_dispatch_experts"`. To use masking and all-reduce instead, set `ep_size=tp_size` and override both the router and the expert forward rules:
Most MoE models default to `"ep_dispatch_experts"`. To use masking and all-reduce instead, set `ep_size=tp_size` and override both the router and the expert forward rules (the router module name depends on the model, e.g. `mlp.router` on gpt-oss):

```py
distributed_config = DistributedConfig(
Expand Down Expand Up @@ -155,7 +155,7 @@ These configurations each use eight GPUs:

| Configuration | Result |
| :--- | :--- |
| `DistributedConfig(tp_size=4, fsdp_size=2, ep_size=4)` | Dispatch with TP groups of four, each slicing its batch in four (Qwen3 MoE default plan); unless you specify a ep_plan to use the legacy masked EP |
| `DistributedConfig(tp_size=4, fsdp_size=2, ep_size=4)` | Dispatch with TP groups of four, each slicing its batch in four (default plan); unless you specify a ep_plan to use the legacy masked EP |
| `DistributedConfig(tp_size=1, fsdp_size=8, ep_size=4)` | Dispatch with an independent batch on each rank, no slicing, and experts FSDP-sharded across pairs of ranks. |
| `DistributedConfig(tp_size=2, fsdp_size=4, ep_size=4)` | Dispatch with a TP pair per batch, each pair slicing its batch in two; two batches per expert group. |
| `DistributedConfig(tp_size=8, ep_size=8)` | Dispatch with every rank sharing one batch, sliced in eight, or masking and all-reduce for a masked plan. |
Expand Down
10 changes: 10 additions & 0 deletions src/transformers/distributed/mixin.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ class DistributedMixin:
"""Distributed orchestration and save/load hooks for [`PreTrainedModel`]."""

_device_mesh = None
_is_distributed_loading_by_transformers = False
_mesh_manager: TransformersDeviceMesh | None = None
_tp_plan: dict[str, str] | None = None
_ep_plan: dict[str, str] | None = None
Expand All @@ -60,6 +61,14 @@ class DistributedMixin:
_pp_plan: dict[str, tuple[str, str]] | None = None
_fsdp_plan: dict[str, str] | None = None

@property
def is_distributed_loading_by_transformers(self) -> bool:
"""
Whether `from_pretrained(distributed_config=...)` sharded the model at load time (each rank reads only its
shard through `DtensorShardOperation`), rather than a wrapper such as Accelerate sharding it afterwards.
"""
return self._is_distributed_loading_by_transformers

def init_parallel_plans(self) -> None:
"""Copy class-level plans onto the instance and merge config/children contributions."""
model_cls = type(self)
Expand Down Expand Up @@ -192,6 +201,7 @@ def maybe_distribute_model(
model.config.distributed_config = distributed_config
model._mesh_manager = mesh_manager
model._device_mesh = mesh_manager.get_mesh(("pp", "fsdp", "tp"))
model._is_distributed_loading_by_transformers = True
model._tp_size = distributed_config.tp_size
model._fsdp_size = distributed_config.fsdp_size

Expand Down
3 changes: 1 addition & 2 deletions src/transformers/models/afmoe/configuration_afmoe.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,10 +62,9 @@ class AfmoeConfig(PreTrainedConfig):
"norm": (["hidden_states"], ["hidden_states"]),
}
base_model_ep_plan = {
"layers.*.mlp.router": "ep_router",
"layers.*.mlp.experts.gate_up_proj": "grouped_gemm",
"layers.*.mlp.experts.down_proj": "grouped_gemm",
"layers.*.mlp.experts": "moe_tp_experts",
"layers.*.mlp.experts": "ep_dispatch_experts",
}

vocab_size: int = 200192
Expand Down
3 changes: 1 addition & 2 deletions src/transformers/models/axk1/configuration_axk1.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,10 +69,9 @@ class AXK1Config(PreTrainedConfig):
"norm": (["hidden_states"], ["hidden_states"]),
}
base_model_ep_plan = {
"layers.*.mlp.gate": "ep_router",
"layers.*.mlp.experts.gate_up_proj": "grouped_gemm",
"layers.*.mlp.experts.down_proj": "grouped_gemm",
"layers.*.mlp.experts": "moe_tp_experts",
"layers.*.mlp.experts": "ep_dispatch_experts",
}
attribute_map = {
"num_local_experts": "n_routed_experts",
Expand Down
3 changes: 1 addition & 2 deletions src/transformers/models/axk2/configuration_axk2.py
Original file line number Diff line number Diff line change
Expand Up @@ -82,10 +82,9 @@ class AXK2Config(PreTrainedConfig):
"norm": (["hidden_states"], ["hidden_states"]),
}
base_model_ep_plan = {
"layers.*.mlp.gate": "ep_router",
"layers.*.mlp.experts.gate_up_proj": "grouped_gemm",
"layers.*.mlp.experts.down_proj": "grouped_gemm",
"layers.*.mlp.experts": "moe_tp_experts",
"layers.*.mlp.experts": "ep_dispatch_experts",
}

attribute_map = {"num_local_experts": "n_routed_experts"}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,10 +85,9 @@ class Cohere2MoeConfig(PreTrainedConfig):
"norm": (["hidden_states"], ["hidden_states"]),
}
base_model_ep_plan = {
"layers.*.mlp.gate": "ep_router",
"layers.*.mlp.experts.gate_up_proj": "grouped_gemm",
"layers.*.mlp.experts.down_proj": "grouped_gemm",
"layers.*.mlp.experts": "moe_tp_experts",
"layers.*.mlp.experts": "ep_dispatch_experts",
}

vocab_size: int = 256000
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -238,10 +238,9 @@ class DeepseekOcr2TextConfig(PreTrainedConfig):
mlp_bias: bool = False
head_dim: int | None = None
base_model_ep_plan = {
"layers.*.mlp.gate": "ep_router",
"layers.*.mlp.experts.gate_up_proj": "grouped_gemm",
"layers.*.mlp.experts.down_proj": "grouped_gemm",
"layers.*.mlp.experts": "moe_tp_experts",
"layers.*.mlp.experts": "ep_dispatch_experts",
}
attribute_map = {
"num_experts": "n_routed_experts",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,10 +95,9 @@ class DeepseekV2Config(PreTrainedConfig):
mlp_bias: bool = False
head_dim: int | None = None
base_model_ep_plan = {
"layers.*.mlp.gate": "ep_router",
"layers.*.mlp.experts.gate_up_proj": "grouped_gemm",
"layers.*.mlp.experts.down_proj": "grouped_gemm",
"layers.*.mlp.experts": "moe_tp_experts",
"layers.*.mlp.experts": "ep_dispatch_experts",
}
attribute_map = {
"num_experts": "n_routed_experts",
Expand Down
3 changes: 1 addition & 2 deletions src/transformers/models/deepseek_v2/modular_deepseek_v2.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,10 +86,9 @@ class DeepseekV2Config(LlamaConfig):
"layers.*.mlp.down_proj": "rowwise",
}
base_model_ep_plan = {
"layers.*.mlp.gate": "ep_router",
"layers.*.mlp.experts.gate_up_proj": "grouped_gemm",
"layers.*.mlp.experts.down_proj": "grouped_gemm",
"layers.*.mlp.experts": "moe_tp_experts",
"layers.*.mlp.experts": "ep_dispatch_experts",
}

model_type = "deepseek_v2"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,10 +69,9 @@ class DeepseekV3Config(PreTrainedConfig):
"norm": (["hidden_states"], ["hidden_states"]),
}
base_model_ep_plan = {
"layers.*.mlp.gate": "ep_router",
"layers.*.mlp.experts.gate_up_proj": "grouped_gemm",
"layers.*.mlp.experts.down_proj": "grouped_gemm",
"layers.*.mlp.experts": "moe_tp_experts",
"layers.*.mlp.experts": "ep_dispatch_experts",
}

attribute_map = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,10 +77,9 @@ class DeepseekV32Config(PreTrainedConfig):
"norm": (["hidden_states"], ["hidden_states"]),
}
base_model_ep_plan = {
"layers.*.mlp.gate": "ep_router",
"layers.*.mlp.experts.gate_up_proj": "grouped_gemm",
"layers.*.mlp.experts.down_proj": "grouped_gemm",
"layers.*.mlp.experts": "moe_tp_experts",
"layers.*.mlp.experts": "ep_dispatch_experts",
}

attribute_map = {"num_local_experts": "n_routed_experts"}
Expand Down
26 changes: 6 additions & 20 deletions src/transformers/models/deepseek_v4/configuration_deepseek_v4.py
Original file line number Diff line number Diff line change
Expand Up @@ -111,29 +111,15 @@ class DeepseekV4Config(PreTrainedConfig):
"layers": (["hidden_states", "attention_mask"], ["hidden_states"]),
"norm": (["hidden_states"], ["hidden_states"]),
}
# Main attention and the shared MLP stay replicated. Shared-KV MQA and the CSA / HCA compressor
# broadcast one KV head via `repeat_kv`, so colwise `q_b_proj` would mismatch the rank-local
# head count; the shared MLP is too small to be worth sharding.
base_model_ep_plan = {
# V4 ships EP only (no `base_model_tp_plan` — the runtime picks one plan or
# the other, never both, and V4 is MoE so EP is the only sensible config).
# MoE parallelism: route on the gate, run the routed experts as a grouped-GEMM
# kernel sharded along the expert axis, and wrap the experts module with
# `moe_tp_experts` so its output gets all-reduced across ranks. Same shape as
# gpt-oss. Main attention stays replicated: V4 is shared-KV MQA + a CSA / HCA
# compressor branch — both broadcast a single KV head across all attention
# heads via `repeat_kv`, so colwise-sharding `q_b_proj` would leave KV
# replicated and `repeat_kv` would no longer match the rank-local query head
# count. The shared MLP also stays replicated — it's small and not worth
# sharding. The Lightning Indexer is the one carve-out: its keys are
# replicated (own compressor at index_head_dim fed by replicated
# hidden_states), so head-sharding is well-formed; `q_b_proj` and the
# `scorer.weights_proj` go colwise, and the `scorer` output is all-reduced
# so every rank sees the same `index_scores` and picks the same top-k.
"layers.*.mlp.gate": "ep_router",
# V4 ships EP only (no `base_model_tp_plan`). Routed experts run as a grouped-GEMM kernel
# sharded along the expert axis, with all-to-all token dispatch (same as gpt-oss).
"layers.*.mlp.experts.gate_up_proj": "grouped_gemm",
"layers.*.mlp.experts.down_proj": "grouped_gemm",
"layers.*.mlp.experts": "moe_tp_experts",
"layers.*.self_attn.compressor.indexer.q_b_proj": "colwise",
"layers.*.self_attn.compressor.indexer.scorer.weights_proj": "colwise",
"layers.*.self_attn.compressor.indexer.scorer": "all_reduce",
"layers.*.mlp.experts": "ep_dispatch_experts",
}

vocab_size: int = 129280
Expand Down
3 changes: 1 addition & 2 deletions src/transformers/models/dots1/configuration_dots1.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,10 +71,9 @@ class Dots1Config(PreTrainedConfig):
"norm": (["hidden_states"], ["hidden_states"]),
}
base_model_ep_plan = {
"layers.*.mlp.gate": "ep_router",
"layers.*.mlp.experts.gate_up_proj": "grouped_gemm",
"layers.*.mlp.experts.down_proj": "grouped_gemm",
"layers.*.mlp.experts": "moe_tp_experts",
"layers.*.mlp.experts": "ep_dispatch_experts",
}

attribute_map = {
Expand Down
3 changes: 1 addition & 2 deletions src/transformers/models/dots1/modular_dots1.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,10 +88,9 @@ class Dots1Config(PreTrainedConfig):
"norm": (["hidden_states"], ["hidden_states"]),
}
base_model_ep_plan = {
"layers.*.mlp.gate": "ep_router",
"layers.*.mlp.experts.gate_up_proj": "grouped_gemm",
"layers.*.mlp.experts.down_proj": "grouped_gemm",
"layers.*.mlp.experts": "moe_tp_experts",
"layers.*.mlp.experts": "ep_dispatch_experts",
}

attribute_map = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,10 +83,9 @@ class Ernie4_5_MoeConfig(PreTrainedConfig):
"norm": (["hidden_states"], ["hidden_states"]),
}
base_model_ep_plan = {
"layers.*.mlp.gate": "ep_router",
"layers.*.mlp.experts.gate_up_proj": "grouped_gemm",
"layers.*.mlp.experts.down_proj": "grouped_gemm",
"layers.*.mlp.experts": "moe_tp_experts",
"layers.*.mlp.experts": "ep_dispatch_experts",
}

vocab_size: int = 103424
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,10 +103,9 @@ class Ernie4_5_VLMoeTextConfig(PreTrainedConfig):
"norm": (["hidden_states"], ["hidden_states"]),
}
base_model_ep_plan = {
"layers.*.mlp.gate": "ep_router",
"layers.*.mlp.experts.gate_up_proj": "grouped_gemm",
"layers.*.mlp.experts.down_proj": "grouped_gemm",
"layers.*.mlp.experts": "moe_tp_experts",
"layers.*.mlp.experts": "ep_dispatch_experts",
}

vocab_size: int = 103424
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,10 +104,9 @@ class ExaoneMoeConfig(PreTrainedConfig):
layer_types: list[str] | None = None

base_model_ep_plan = {
"layers.*.mlp.gate": "ep_router",
"layers.*.mlp.experts.gate_up_proj": "grouped_gemm",
"layers.*.mlp.experts.down_proj": "grouped_gemm",
"layers.*.mlp.experts": "moe_tp_experts",
"layers.*.mlp.experts": "ep_dispatch_experts",
}
mlp_layer_types: list[str] | None = None
first_k_dense_replace: int = 1
Expand Down
3 changes: 1 addition & 2 deletions src/transformers/models/exaone_moe/modular_exaone_moe.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,10 +80,9 @@ class ExaoneMoeConfig(Exaone4Config):
```"""

base_model_ep_plan = {
"layers.*.mlp.gate": "ep_router",
"layers.*.mlp.experts.gate_up_proj": "grouped_gemm",
"layers.*.mlp.experts.down_proj": "grouped_gemm",
"layers.*.mlp.experts": "moe_tp_experts",
"layers.*.mlp.experts": "ep_dispatch_experts",
}

vocab_size: int = 102400
Expand Down
3 changes: 1 addition & 2 deletions src/transformers/models/flex_olmo/configuration_flex_olmo.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,10 +64,9 @@ class FlexOlmoConfig(PreTrainedConfig):
"norm": (["hidden_states"], ["hidden_states"]),
}
base_model_ep_plan = {
"layers.*.mlp.gate": "ep_router",
"layers.*.mlp.experts.gate_up_proj": "grouped_gemm",
"layers.*.mlp.experts.down_proj": "grouped_gemm",
"layers.*.mlp.experts": "moe_tp_experts",
"layers.*.mlp.experts": "ep_dispatch_experts",
}

vocab_size: int = 100352
Expand Down
3 changes: 1 addition & 2 deletions src/transformers/models/flex_olmo/modular_flex_olmo.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,10 +74,9 @@ class FlexOlmoConfig(PreTrainedConfig):
"norm": (["hidden_states"], ["hidden_states"]),
}
base_model_ep_plan = {
"layers.*.mlp.gate": "ep_router",
"layers.*.mlp.experts.gate_up_proj": "grouped_gemm",
"layers.*.mlp.experts.down_proj": "grouped_gemm",
"layers.*.mlp.experts": "moe_tp_experts",
"layers.*.mlp.experts": "ep_dispatch_experts",
}

vocab_size: int = 100352
Expand Down
3 changes: 1 addition & 2 deletions src/transformers/models/glm4_moe/configuration_glm4_moe.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,10 +78,9 @@ class Glm4MoeConfig(PreTrainedConfig):
"norm": (["hidden_states"], ["hidden_states"]),
}
base_model_ep_plan = {
"layers.*.mlp.gate": "ep_router",
"layers.*.mlp.experts.gate_up_proj": "grouped_gemm",
"layers.*.mlp.experts.down_proj": "grouped_gemm",
"layers.*.mlp.experts": "moe_tp_experts",
"layers.*.mlp.experts": "ep_dispatch_experts",
}

attribute_map = {
Expand Down
3 changes: 1 addition & 2 deletions src/transformers/models/glm4_moe/modular_glm4_moe.py
Original file line number Diff line number Diff line change
Expand Up @@ -91,10 +91,9 @@ class Glm4MoeConfig(PreTrainedConfig):
"norm": (["hidden_states"], ["hidden_states"]),
}
base_model_ep_plan = {
"layers.*.mlp.gate": "ep_router",
"layers.*.mlp.experts.gate_up_proj": "grouped_gemm",
"layers.*.mlp.experts.down_proj": "grouped_gemm",
"layers.*.mlp.experts": "moe_tp_experts",
"layers.*.mlp.experts": "ep_dispatch_experts",
}

attribute_map = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,10 +69,9 @@ class Glm4MoeLiteConfig(PreTrainedConfig):
"norm": (["hidden_states"], ["hidden_states"]),
}
base_model_ep_plan = {
"layers.*.mlp.gate": "ep_router",
"layers.*.mlp.experts.gate_up_proj": "grouped_gemm",
"layers.*.mlp.experts.down_proj": "grouped_gemm",
"layers.*.mlp.experts": "moe_tp_experts",
"layers.*.mlp.experts": "ep_dispatch_experts",
}

attribute_map = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,10 +77,9 @@ class Glm4MoeLiteConfig(PreTrainedConfig):
"norm": (["hidden_states"], ["hidden_states"]),
}
base_model_ep_plan = {
"layers.*.mlp.gate": "ep_router",
"layers.*.mlp.experts.gate_up_proj": "grouped_gemm",
"layers.*.mlp.experts.down_proj": "grouped_gemm",
"layers.*.mlp.experts": "moe_tp_experts",
"layers.*.mlp.experts": "ep_dispatch_experts",
}

attribute_map = {
Expand Down
3 changes: 1 addition & 2 deletions src/transformers/models/glm4v_moe/configuration_glm4v_moe.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,10 +67,9 @@ class Glm4vMoeTextConfig(PreTrainedConfig):
"norm": (["hidden_states"], ["hidden_states"]),
}
base_model_ep_plan = {
"layers.*.mlp.gate": "ep_router",
"layers.*.mlp.experts.gate_up_proj": "grouped_gemm",
"layers.*.mlp.experts.down_proj": "grouped_gemm",
"layers.*.mlp.experts": "moe_tp_experts",
"layers.*.mlp.experts": "ep_dispatch_experts",
}
attribute_map = {
"num_local_experts": "n_routed_experts",
Expand Down
3 changes: 1 addition & 2 deletions src/transformers/models/glm5_next/configuration_glm5_next.py
Original file line number Diff line number Diff line change
Expand Up @@ -90,10 +90,9 @@ class Glm5NextTextConfig(PreTrainedConfig):
"norm": (["hidden_states"], ["hidden_states"]),
}
base_model_ep_plan = {
"layers.*.mlp.gate": "ep_router",
"layers.*.mlp.experts.gate_up_proj": "grouped_gemm",
"layers.*.mlp.experts.down_proj": "grouped_gemm",
"layers.*.mlp.experts": "moe_tp_experts",
"layers.*.mlp.experts": "ep_dispatch_experts",
}

attribute_map = {"num_local_experts": "n_routed_experts"}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,10 +82,9 @@ class GlmMoeDsaConfig(PreTrainedConfig):
"norm": (["hidden_states"], ["hidden_states"]),
}
base_model_ep_plan = {
"layers.*.mlp.gate": "ep_router",
"layers.*.mlp.experts.gate_up_proj": "grouped_gemm",
"layers.*.mlp.experts.down_proj": "grouped_gemm",
"layers.*.mlp.experts": "moe_tp_experts",
"layers.*.mlp.experts": "ep_dispatch_experts",
}

attribute_map = {"num_local_experts": "n_routed_experts"}
Expand Down
3 changes: 1 addition & 2 deletions src/transformers/models/gpt_oss/configuration_gpt_oss.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,11 @@ class GptOssConfig(PreTrainedConfig):
"norm": (["hidden_states"], ["hidden_states"]),
}
base_model_ep_plan = {
"layers.*.mlp.router": "ep_router",
"layers.*.mlp.experts.gate_up_proj": "grouped_gemm",
"layers.*.mlp.experts.gate_up_proj_bias": "grouped_gemm",
"layers.*.mlp.experts.down_proj": "grouped_gemm",
"layers.*.mlp.experts.down_proj_bias": "grouped_gemm",
"layers.*.mlp.experts": "moe_tp_experts",
"layers.*.mlp.experts": "ep_dispatch_experts",
}

num_hidden_layers: int = 36
Expand Down
Loading
Loading