Skip to content

Commit 6d958fb

Browse files
feat(recipe): add DSv3 256-GPU GB300 MXFP8 deterministic perf recipe (#6272)
Signed-off-by: Zhiyu Li <zhiyul@nvidia.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
1 parent 69a23fb commit 6d958fb

3 files changed

Lines changed: 47 additions & 0 deletions

File tree

‎src/megatron/bridge/perf_recipes/deepseek/__init__.py‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
deepseek_v3_pretrain_256gpu_gb300_bf16_config,
3636
deepseek_v3_pretrain_256gpu_gb300_fp8cs_config,
3737
deepseek_v3_pretrain_256gpu_gb300_fp8mx_config,
38+
deepseek_v3_pretrain_256gpu_gb300_fp8mx_deterministic_config,
3839
deepseek_v3_pretrain_256gpu_gb300_fp8mx_hsdp_config,
3940
deepseek_v3_pretrain_256gpu_gb300_fp8mx_large_scale_config,
4041
deepseek_v3_pretrain_256gpu_gb300_fp8mx_partial_cg_dev_config,

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

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
set_deepseek_v3_pipeline_model_parallel_layout,
2727
)
2828
from megatron.bridge.perf_recipes.environment import COMMON_PERF_ENV_VARS
29+
from megatron.bridge.recipes.utils.determinism_utils import apply_determinism_overrides
2930

3031

3132
def _build_deepseek_v3_gb300_bf16() -> ConfigContainer:
@@ -197,6 +198,30 @@ def deepseek_v3_pretrain_256gpu_gb300_fp8mx_config() -> ConfigContainer:
197198
return cfg
198199

199200

201+
def deepseek_v3_pretrain_256gpu_gb300_fp8mx_deterministic_config() -> ConfigContainer:
202+
"""DeepSeek V3 pretrain: 256× GB300, MXFP8, deterministic.
203+
204+
Wraps :func:`deepseek_v3_pretrain_256gpu_gb300_fp8mx_config` and applies
205+
:func:`~megatron.bridge.recipes.utils.determinism_utils.apply_determinism_overrides`.
206+
"""
207+
cfg = deepseek_v3_pretrain_256gpu_gb300_fp8mx_config()
208+
# TODO: revert back to NCCL EP once the NCCL EP issue is fixed.
209+
cfg.model.moe_flex_dispatcher_backend = "hybridep"
210+
cfg.model.moe_use_grouped_tensor = False
211+
cfg.env_vars.pop("NCCL_EP_HT_EM_PULL_PUSH")
212+
cfg.env_vars.update(
213+
{
214+
# HybridEP topology for the target system.
215+
"NUM_OF_HYBRID_EP_RANKS_PER_NVLINK_DOMAIN": 32,
216+
"NUM_OF_TOKENS_PER_CHUNK_COMBINE_API": 128,
217+
"NVLINK_DOMAIN_SIZE": 72,
218+
"USE_MNNVL": 1,
219+
}
220+
)
221+
apply_determinism_overrides(cfg)
222+
return cfg
223+
224+
200225
def _build_deepseek_v3_gb300_nvfp4() -> ConfigContainer:
201226
"""Shared HybridEP NVFP4 base for the DeepSeek V3 256-GPU GB300 recipe and its VR200 alias."""
202227
cfg = deepseek_v3_pretrain_config()

‎tests/unit_tests/recipes/test_gb300_ncclep_perf_recipes.py‎

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import importlib
1818

1919
import pytest
20+
from megatron.training.determinism import DETERMINISM_ENV_VAR_DEFAULTS
2021

2122
from megatron.bridge.perf_recipes.environment import HYBRID_EP_ENV_NAMES
2223
from tests.unit_tests.recipes.recipe_test_utils import patch_recipe_construction_dependencies
@@ -25,6 +26,7 @@
2526
pytestmark = pytest.mark.unit
2627

2728
_NCCL_EP_ENV = {"NCCL_EP_HT_EM_PULL_PUSH": 1}
29+
_SSM_DETERMINISM_ENV = {"MAMBA_DETERMINISTIC": "1", "CAUSAL_CONV1D_DETERMINISTIC": "1"}
2830

2931
# (module under megatron.bridge.perf_recipes, recipe factory) for the GB300 recipes defaulted to NCCL EP.
3032
_GB300_NCCLEP_RECIPES = (
@@ -131,3 +133,22 @@ def test_vr200_aliases_do_not_inherit_nccl_ep(module_name: str, factory_name: st
131133
assert cfg.env_vars.keys() >= HYBRID_EP_ENV_NAMES
132134
else:
133135
assert cfg.model.moe_token_dispatcher_type == "alltoall"
136+
137+
138+
def test_deepseek_v3_gb300_fp8mx_deterministic_is_base_plus_determinism_overrides() -> None:
139+
module = "deepseek.gb300.deepseek_v3"
140+
base = _build(module, "deepseek_v3_pretrain_256gpu_gb300_fp8mx_config")
141+
cfg = _build(module, "deepseek_v3_pretrain_256gpu_gb300_fp8mx_deterministic_config")
142+
143+
assert cfg.model.deterministic_mode is True
144+
assert cfg.model.cross_entropy_loss_fusion is False
145+
assert cfg.model.moe_router_aux_loss_fusion is False
146+
assert cfg.model.moe_router_fusion == base.model.moe_router_fusion
147+
# HybridEP with the legacy grouped MLP until the NCCL EP path is deterministic.
148+
assert cfg.model.moe_flex_dispatcher_backend == "hybridep"
149+
assert cfg.model.moe_use_grouped_tensor is False
150+
assert cfg.env_vars.keys() >= HYBRID_EP_ENV_NAMES
151+
assert cfg.env_vars.keys().isdisjoint(_NCCL_EP_ENV)
152+
expected_env = {name: value for name, value in base.env_vars.items() if name not in _NCCL_EP_ENV}
153+
expected_env.update({name: cfg.env_vars[name] for name in HYBRID_EP_ENV_NAMES})
154+
assert cfg.env_vars == {**expected_env, **DETERMINISM_ENV_VAR_DEFAULTS, **_SSM_DETERMINISM_ENV}

0 commit comments

Comments
 (0)