Skip to content

Commit 5723015

Browse files
committed
fix(perf): restore non-qwen flat recipe parity
Signed-off-by: yaoyu-33 <yaoyu.094@gmail.com>
1 parent 34e145f commit 5723015

19 files changed

Lines changed: 278 additions & 106 deletions

File tree

src/megatron/bridge/perf_recipes/deepseek/b200/deepseek_v3.py

Lines changed: 46 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
ConfigContainer,
1818
_benchmark_common,
1919
_deepseek_v3_common,
20+
_enable_deepseek_transformer_engine_graph,
2021
_perf_precision,
2122
deepseek_v3_pretrain_config,
2223
set_deepseek_v3_pipeline_model_parallel_layout,
@@ -82,34 +83,74 @@ def deepseek_v3_pretrain_256gpu_b200_fp8mx_config() -> ConfigContainer:
8283
_deepseek_v3_common(cfg)
8384

8485
cfg.model.tensor_model_parallel_size = 1
85-
cfg.model.pipeline_model_parallel_size = 16
86-
cfg.model.virtual_pipeline_model_parallel_size = None
86+
cfg.model.pipeline_model_parallel_size = 8
87+
cfg.model.virtual_pipeline_model_parallel_size = 2
8788
cfg.model.context_parallel_size = 1
88-
cfg.model.expert_model_parallel_size = 8
89+
cfg.model.expert_model_parallel_size = 32
8990
cfg.model.sequence_parallel = False
9091
cfg.train.global_batch_size = 4096
9192
cfg.train.micro_batch_size = 1
9293

93-
cfg.model.recompute_modules = ["mla_up_proj"]
94+
cfg.model.recompute_modules = ["mla_up_proj", "mlp"]
95+
96+
cfg.model.moe_flex_dispatcher_backend = "deepep"
97+
cfg.model.moe_hybridep_num_sms = 16
9498

9599
cfg.ddp.overlap_grad_reduce = True
96100
cfg.comm_overlap.overlap_grad_reduce = True
101+
cfg.comm_overlap.delay_wgrad_compute = True
102+
cfg.comm_overlap.overlap_moe_expert_parallel_comm = True
97103

98104
set_deepseek_v3_pipeline_model_parallel_layout(cfg.model)
99105

100106
_benchmark_common(cfg)
107+
cfg.model.moe_flex_dispatcher_backend = "deepep"
108+
cfg.model.moe_hybridep_num_sms = 16
109+
cfg.comm_overlap.delay_wgrad_compute = True
110+
cfg.comm_overlap.overlap_moe_expert_parallel_comm = True
111+
_enable_deepseek_transformer_engine_graph(cfg)
101112
return cfg
102113

103114

104115
def deepseek_v3_pretrain_256gpu_b200_nvfp4_config() -> ConfigContainer:
105116
"""DeepSeek V3 pretrain: 256× B200, NVFP4 (same layout as BF16)."""
106117
cfg = deepseek_v3_pretrain_256gpu_b200_bf16_config()
107118
cfg.mixed_precision = _perf_precision("nvfp4")
119+
cfg.mixed_precision.fp4_param = False
120+
cfg.mixed_precision.fp4_param_gather = False
121+
cfg.model.pipeline_model_parallel_size = 8
122+
cfg.model.virtual_pipeline_model_parallel_size = 2
123+
cfg.model.expert_model_parallel_size = 32
124+
cfg.model.recompute_modules = ["mla_up_proj", "layernorm", "moe_act"]
125+
cfg.model.moe_flex_dispatcher_backend = "deepep"
126+
cfg.model.moe_hybridep_num_sms = 16
127+
cfg.comm_overlap.delay_wgrad_compute = True
128+
cfg.comm_overlap.overlap_moe_expert_parallel_comm = True
129+
set_deepseek_v3_pipeline_model_parallel_layout(cfg.model)
108130
return cfg
109131

110132

111133
def deepseek_v3_pretrain_256gpu_b200_fp8mx_large_scale_config() -> ConfigContainer:
112134
"""DeepSeek V3 pretrain: 256× B200, MXFP8, large-scale proxy (GBS=256)."""
113-
cfg = deepseek_v3_pretrain_256gpu_b200_fp8mx_config()
135+
cfg = deepseek_v3_pretrain_config()
136+
cfg.mixed_precision = _perf_precision("fp8_mx")
137+
_deepseek_v3_common(cfg)
138+
139+
cfg.model.tensor_model_parallel_size = 1
140+
cfg.model.pipeline_model_parallel_size = 16
141+
cfg.model.virtual_pipeline_model_parallel_size = None
142+
cfg.model.context_parallel_size = 1
143+
cfg.model.expert_model_parallel_size = 8
144+
cfg.model.sequence_parallel = False
114145
cfg.train.global_batch_size = 256
146+
cfg.train.micro_batch_size = 1
147+
148+
cfg.model.recompute_modules = ["mla_up_proj"]
149+
150+
cfg.ddp.overlap_grad_reduce = True
151+
cfg.comm_overlap.overlap_grad_reduce = True
152+
153+
set_deepseek_v3_pipeline_model_parallel_layout(cfg.model)
154+
155+
_benchmark_common(cfg)
115156
return cfg

src/megatron/bridge/perf_recipes/deepseek/b300/deepseek_v3.py

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
ConfigContainer,
1818
_benchmark_common,
1919
_deepseek_v3_common,
20+
_enable_deepseek_transformer_engine_graph,
2021
_perf_precision,
2122
deepseek_v3_pretrain_config,
2223
set_deepseek_v3_pipeline_model_parallel_layout,
@@ -36,7 +37,7 @@ def deepseek_v3_pretrain_256gpu_b300_bf16_config() -> ConfigContainer:
3637
cfg.model.expert_model_parallel_size = 8
3738
cfg.model.sequence_parallel = False
3839
cfg.train.global_batch_size = 4096
39-
cfg.train.micro_batch_size = 1
40+
cfg.train.micro_batch_size = 2
4041

4142
cfg.model.recompute_modules = ["mla_up_proj"]
4243

@@ -46,6 +47,7 @@ def deepseek_v3_pretrain_256gpu_b300_bf16_config() -> ConfigContainer:
4647
set_deepseek_v3_pipeline_model_parallel_layout(cfg.model)
4748

4849
_benchmark_common(cfg)
50+
_enable_deepseek_transformer_engine_graph(cfg)
4951
return cfg
5052

5153

@@ -56,13 +58,13 @@ def deepseek_v3_pretrain_256gpu_b300_fp8cs_config() -> ConfigContainer:
5658
_deepseek_v3_common(cfg)
5759

5860
cfg.model.tensor_model_parallel_size = 1
59-
cfg.model.pipeline_model_parallel_size = 16
61+
cfg.model.pipeline_model_parallel_size = 8
6062
cfg.model.virtual_pipeline_model_parallel_size = None
6163
cfg.model.context_parallel_size = 1
6264
cfg.model.expert_model_parallel_size = 8
6365
cfg.model.sequence_parallel = False
6466
cfg.train.global_batch_size = 4096
65-
cfg.train.micro_batch_size = 1
67+
cfg.train.micro_batch_size = 2
6668

6769
cfg.model.recompute_modules = ["mla_up_proj"]
6870

@@ -72,6 +74,7 @@ def deepseek_v3_pretrain_256gpu_b300_fp8cs_config() -> ConfigContainer:
7274
set_deepseek_v3_pipeline_model_parallel_layout(cfg.model)
7375

7476
_benchmark_common(cfg)
77+
_enable_deepseek_transformer_engine_graph(cfg)
7578
return cfg
7679

7780

@@ -82,13 +85,13 @@ def deepseek_v3_pretrain_256gpu_b300_fp8mx_config() -> ConfigContainer:
8285
_deepseek_v3_common(cfg)
8386

8487
cfg.model.tensor_model_parallel_size = 1
85-
cfg.model.pipeline_model_parallel_size = 16
88+
cfg.model.pipeline_model_parallel_size = 8
8689
cfg.model.virtual_pipeline_model_parallel_size = None
8790
cfg.model.context_parallel_size = 1
8891
cfg.model.expert_model_parallel_size = 8
8992
cfg.model.sequence_parallel = False
9093
cfg.train.global_batch_size = 4096
91-
cfg.train.micro_batch_size = 1
94+
cfg.train.micro_batch_size = 2
9295

9396
cfg.model.recompute_modules = ["mla_up_proj"]
9497

@@ -98,21 +101,42 @@ def deepseek_v3_pretrain_256gpu_b300_fp8mx_config() -> ConfigContainer:
98101
set_deepseek_v3_pipeline_model_parallel_layout(cfg.model)
99102

100103
_benchmark_common(cfg)
104+
_enable_deepseek_transformer_engine_graph(cfg)
101105
return cfg
102106

103107

104108
def deepseek_v3_pretrain_256gpu_b300_nvfp4_config() -> ConfigContainer:
105109
"""DeepSeek V3 pretrain: 256× B300, NVFP4 (PP=16 matching base layout)."""
106110
cfg = deepseek_v3_pretrain_256gpu_b300_bf16_config()
107111
cfg.mixed_precision = _perf_precision("nvfp4")
108-
cfg.model.pipeline_model_parallel_size = 16
112+
cfg.model.pipeline_model_parallel_size = 8
109113
cfg.model.virtual_pipeline_model_parallel_size = None
110114
set_deepseek_v3_pipeline_model_parallel_layout(cfg.model)
115+
_enable_deepseek_transformer_engine_graph(cfg)
111116
return cfg
112117

113118

114119
def deepseek_v3_pretrain_256gpu_b300_fp8mx_large_scale_config() -> ConfigContainer:
115120
"""DeepSeek V3 pretrain: 256× B300, MXFP8, large-scale proxy (GBS=256)."""
116-
cfg = deepseek_v3_pretrain_256gpu_b300_fp8mx_config()
121+
cfg = deepseek_v3_pretrain_config()
122+
cfg.mixed_precision = _perf_precision("fp8_mx")
123+
_deepseek_v3_common(cfg)
124+
125+
cfg.model.tensor_model_parallel_size = 1
126+
cfg.model.pipeline_model_parallel_size = 16
127+
cfg.model.virtual_pipeline_model_parallel_size = None
128+
cfg.model.context_parallel_size = 1
129+
cfg.model.expert_model_parallel_size = 8
130+
cfg.model.sequence_parallel = False
117131
cfg.train.global_batch_size = 256
132+
cfg.train.micro_batch_size = 1
133+
134+
cfg.model.recompute_modules = ["mla_up_proj"]
135+
136+
cfg.ddp.overlap_grad_reduce = True
137+
cfg.comm_overlap.overlap_grad_reduce = True
138+
139+
set_deepseek_v3_pipeline_model_parallel_layout(cfg.model)
140+
141+
_benchmark_common(cfg)
118142
return cfg

src/megatron/bridge/perf_recipes/deepseek/common.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,41 @@ def _deepseek_v3_common(cfg: ConfigContainer) -> None:
3535
cfg.model.moe_router_force_load_balancing = True
3636

3737

38+
def _enable_deepseek_full_iteration_mxfp8(
39+
cfg: ConfigContainer,
40+
*,
41+
fp8_dot_product_attention: bool = False,
42+
fp8_output_proj: bool = False,
43+
) -> None:
44+
"""Apply legacy DeepSeek V3 HybridEP full-iteration MXFP8 settings."""
45+
cfg.model.cuda_graph_impl = "full_iteration"
46+
cfg.model.cuda_graph_scope = []
47+
cfg.model.high_priority_a2a_comm_stream = True
48+
cfg.model.moe_expert_rank_capacity_factor = 1.5
49+
cfg.model.moe_hybridep_num_sms_preprocessing = 32
50+
cfg.model.moe_mlp_glu_interleave_size = 32
51+
cfg.model.moe_pad_experts_for_cuda_graph_inference = True
52+
cfg.model.moe_paged_stash = True
53+
cfg.model.moe_paged_stash_buffer_size_factor_cpu = 1.0
54+
cfg.model.moe_paged_stash_buffer_size_factor_cuda = 1.2
55+
cfg.model.use_transformer_engine_op_fuser = True
56+
cfg.model.fp8_output_proj = fp8_output_proj
57+
cfg.model.use_te_rng_tracker = True
58+
cfg.rng.te_rng_tracker = True
59+
60+
cfg.mixed_precision.fp8_dot_product_attention = fp8_dot_product_attention
61+
cfg.comm_overlap.delay_wgrad_compute = True
62+
cfg.comm_overlap.overlap_moe_expert_parallel_comm = True
63+
64+
65+
def _enable_deepseek_transformer_engine_graph(cfg: ConfigContainer) -> None:
66+
"""Apply legacy DeepSeek V3 Transformer Engine graph capture settings."""
67+
cfg.model.cuda_graph_impl = "transformer_engine"
68+
cfg.model.cuda_graph_scope = ["attn", "moe_router", "moe_preprocess"]
69+
cfg.model.use_te_rng_tracker = True
70+
cfg.rng.te_rng_tracker = True
71+
72+
3873
def _apply_deepseek_v3_64gpu_gb300_fsdp_configs(cfg: ConfigContainer) -> None:
3974
"""Apply shared DeepSeek V3 64-GPU GB300 Megatron FSDP settings."""
4075
_deepseek_v3_common(cfg)

src/megatron/bridge/perf_recipes/deepseek/gb200/deepseek_v3.py

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
ConfigContainer,
1818
_benchmark_common,
1919
_deepseek_v3_common,
20+
_enable_deepseek_full_iteration_mxfp8,
2021
_enable_overlap_param_gather_with_optimizer_step,
2122
_perf_precision,
2223
deepseek_v3_pretrain_config,
@@ -99,7 +100,7 @@ def deepseek_v3_pretrain_256gpu_gb200_fp8mx_config() -> ConfigContainer:
99100
cfg.train.global_batch_size = 4096
100101
cfg.train.micro_batch_size = 1
101102

102-
cfg.model.recompute_modules = ["mlp"]
103+
cfg.model.recompute_modules = ["mla_up_proj"]
103104

104105
cfg.model.cuda_graph_impl = "transformer_engine"
105106
cfg.model.cuda_graph_scope = ["attn", "moe_router", "moe_preprocess"]
@@ -110,6 +111,7 @@ def deepseek_v3_pretrain_256gpu_gb200_fp8mx_config() -> ConfigContainer:
110111
set_deepseek_v3_pipeline_model_parallel_layout(cfg.model)
111112

112113
_benchmark_common(cfg)
114+
_enable_deepseek_full_iteration_mxfp8(cfg, fp8_output_proj=True)
113115
return cfg
114116

115117

@@ -125,6 +127,29 @@ def deepseek_v3_pretrain_256gpu_gb200_nvfp4_config() -> ConfigContainer:
125127

126128
def deepseek_v3_pretrain_256gpu_gb200_fp8mx_large_scale_config() -> ConfigContainer:
127129
"""DeepSeek V3 pretrain: 256× GB200, MXFP8, large-scale proxy (GBS=256)."""
128-
cfg = deepseek_v3_pretrain_256gpu_gb200_fp8mx_config()
130+
cfg = deepseek_v3_pretrain_config()
131+
cfg.mixed_precision = _perf_precision("fp8_mx")
132+
_deepseek_v3_common(cfg)
133+
134+
cfg.model.tensor_model_parallel_size = 1
135+
cfg.model.pipeline_model_parallel_size = 4
136+
cfg.model.virtual_pipeline_model_parallel_size = 4
137+
cfg.model.context_parallel_size = 1
138+
cfg.model.expert_model_parallel_size = 64
139+
cfg.model.sequence_parallel = False
129140
cfg.train.global_batch_size = 256
141+
cfg.train.micro_batch_size = 1
142+
143+
cfg.model.recompute_modules = ["mlp"]
144+
145+
cfg.model.cuda_graph_impl = "transformer_engine"
146+
cfg.model.cuda_graph_scope = ["attn", "moe_router", "moe_preprocess"]
147+
148+
cfg.ddp.overlap_grad_reduce = True
149+
cfg.comm_overlap.overlap_grad_reduce = True
150+
151+
set_deepseek_v3_pipeline_model_parallel_layout(cfg.model)
152+
153+
_benchmark_common(cfg)
154+
cfg.model.fp8_output_proj = True
130155
return cfg

src/megatron/bridge/perf_recipes/deepseek/gb300/deepseek_v3.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
_apply_deepseek_v3_64gpu_gb300_fsdp_configs,
1919
_benchmark_common,
2020
_deepseek_v3_common,
21+
_enable_deepseek_full_iteration_mxfp8,
2122
_enable_overlap_param_gather_with_optimizer_step,
2223
_perf_precision,
2324
deepseek_v3_pretrain_config,
@@ -96,9 +97,9 @@ def deepseek_v3_pretrain_256gpu_gb300_fp8mx_config() -> ConfigContainer:
9697
cfg.model.expert_model_parallel_size = 32
9798
cfg.model.sequence_parallel = False
9899
cfg.train.global_batch_size = 4096
99-
cfg.train.micro_batch_size = 2
100+
cfg.train.micro_batch_size = 1
100101

101-
cfg.model.recompute_modules = ["mla_up_proj"]
102+
cfg.model.recompute_modules = []
102103

103104
cfg.model.cuda_graph_scope = []
104105
cfg.ddp.overlap_grad_reduce = True
@@ -107,6 +108,7 @@ def deepseek_v3_pretrain_256gpu_gb300_fp8mx_config() -> ConfigContainer:
107108
set_deepseek_v3_pipeline_model_parallel_layout(cfg.model, "Et*4|(t*4|)*14tmL")
108109

109110
_benchmark_common(cfg)
111+
_enable_deepseek_full_iteration_mxfp8(cfg, fp8_dot_product_attention=True, fp8_output_proj=True)
110112
return cfg
111113

112114

@@ -164,4 +166,7 @@ def deepseek_v3_pretrain_256gpu_gb300_fp8mx_large_scale_config() -> ConfigContai
164166
cfg = deepseek_v3_pretrain_256gpu_gb300_bf16_config()
165167
cfg.mixed_precision = _perf_precision("fp8_mx")
166168
cfg.train.global_batch_size = 256
169+
cfg.model.fp8_output_proj = True
170+
cfg.comm_overlap.overlap_param_gather_with_optimizer_step = None
171+
cfg.optimizer.overlap_param_gather_with_optimizer_step = False
167172
return cfg

src/megatron/bridge/perf_recipes/deepseek/h100/deepseek_v3.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -55,16 +55,11 @@ def deepseek_v3_pretrain_1024gpu_h100_fp8cs_config() -> ConfigContainer:
5555
"""DeepSeek V3 pretrain: 1024× H100, FP8 current-scaling."""
5656
cfg = deepseek_v3_pretrain_config()
5757
cfg.mixed_precision = _perf_precision("fp8_cs")
58-
cfg.mixed_precision.fp8_recipe = "blockwise"
59-
cfg.mixed_precision.fp8_param = False
60-
cfg.mixed_precision.fp8_param_gather = False
61-
cfg.mixed_precision.num_layers_at_start_in_bf16 = 0
62-
cfg.mixed_precision.num_layers_at_end_in_bf16 = 0
6358
_deepseek_v3_common(cfg)
6459

6560
cfg.model.tensor_model_parallel_size = 2
6661
cfg.model.pipeline_model_parallel_size = 8
67-
cfg.model.virtual_pipeline_model_parallel_size = 2
62+
cfg.model.virtual_pipeline_model_parallel_size = 4
6863
cfg.model.context_parallel_size = 1
6964
cfg.model.expert_model_parallel_size = 64
7065
cfg.model.sequence_parallel = True
@@ -76,7 +71,7 @@ def deepseek_v3_pretrain_1024gpu_h100_fp8cs_config() -> ConfigContainer:
7671
cfg.ddp.overlap_grad_reduce = False
7772
cfg.comm_overlap.overlap_grad_reduce = False
7873

79-
cfg.model.pipeline_model_parallel_layout = None
74+
set_deepseek_v3_pipeline_model_parallel_layout(cfg.model, "Et|(tt|)*30mL")
8075

8176
_benchmark_common(cfg)
8277
_enable_overlap_param_gather_with_optimizer_step(cfg)
@@ -86,6 +81,11 @@ def deepseek_v3_pretrain_1024gpu_h100_fp8cs_config() -> ConfigContainer:
8681
def deepseek_v3_pretrain_1024gpu_h100_fp8sc_config() -> ConfigContainer:
8782
"""DeepSeek V3 pretrain: 1024× H100, FP8-SC (VP=2, auto-applied default PP layout)."""
8883
cfg = deepseek_v3_pretrain_1024gpu_h100_fp8cs_config()
84+
cfg.mixed_precision.fp8_recipe = "blockwise"
85+
cfg.mixed_precision.fp8_param = False
86+
cfg.mixed_precision.fp8_param_gather = False
87+
cfg.mixed_precision.num_layers_at_start_in_bf16 = 0
88+
cfg.mixed_precision.num_layers_at_end_in_bf16 = 0
8989
cfg.model.virtual_pipeline_model_parallel_size = 2
9090
# DeepSeek-V3 has 61 layers; (61 // PP) % VP != 0 for (PP=8, VP=2), so a custom layout
9191
# is required. The helper's default layout map provides one for this (pp, vp) pair.

0 commit comments

Comments
 (0)