test(moe): add GLM MegaMoE validation coverage
Add parser coverage for --moe-a2a-backend=megamoe and local unit coverage for MegaMoE gating, GLM fast-path routing, fallback routing, and sidecar weight preservation. Use monkeypatch-style tests so the forward and weight-layout checks do not require loading GLM 5.2 or importing a real deep_gemm runtime. Constraint: tests must not stage or depend on local skill/doc artifacts. Feature-flag: --moe-a2a-backend=megamoe. Conflict-hotspots: test/registered/unit/server_args/test_server_args.py, test/registered/unit/moe/test_glm_megamoe.py. Scope-risk: runtime GPU e2e still needs target Blackwell/DeepGEMM environment. Tested: PYTHONPYCACHEPREFIX=/private/tmp/sglang_pycache python3 -m py_compile test/registered/unit/server_args/test_server_args.py test/registered/unit/moe/test_glm_megamoe.py. Tested: git diff --check. Not-tested: PYTHONPATH=python python3 -m pytest test/registered/unit/moe/test_glm_megamoe.py -q; local Python has no pytest. Not-tested: PYTHONPATH=python python3 -m unittest test.registered.unit.moe.test_glm_megamoe -v; local Python has no torch. Not-tested: GLM 5.2 MegaMoE GPU e2e; local environment lacks target runtime and hardware.
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import json
|
||||
import os
|
||||
import tempfile
|
||||
import unittest
|
||||
from unittest.mock import MagicMock, patch
|
||||
@@ -195,6 +196,46 @@ def test_nsa_index_skip_topk_offset_zero_means_unset():
|
||||
assert override_args == {"index_topk_freq": 4}
|
||||
|
||||
|
||||
def test_megamoe_a2a_backend_parser_sets_ep_to_tp():
|
||||
import argparse
|
||||
|
||||
from sglang.srt.environ import envs
|
||||
|
||||
field = envs.SGLANG_OPT_FIX_MEGA_MOE_MEMORY
|
||||
backup_present = field.name in os.environ
|
||||
backup_value = os.environ.get(field.name)
|
||||
backup_set_to_none = field._set_to_none
|
||||
os.environ.pop(field.name, None)
|
||||
field._set_to_none = False
|
||||
field._cache_valid = False
|
||||
|
||||
try:
|
||||
parser = argparse.ArgumentParser()
|
||||
ServerArgs.add_cli_args(parser)
|
||||
raw_args = parser.parse_args(
|
||||
[
|
||||
"--model-path",
|
||||
"dummy",
|
||||
"--tp-size",
|
||||
"4",
|
||||
"--moe-a2a-backend",
|
||||
"megamoe",
|
||||
]
|
||||
)
|
||||
args = ServerArgs.from_cli_args(raw_args)
|
||||
assert args.moe_a2a_backend == "megamoe"
|
||||
assert args.tp_size == 4
|
||||
assert args.ep_size == 4
|
||||
assert field.get() is True
|
||||
finally:
|
||||
if backup_present:
|
||||
os.environ[field.name] = backup_value
|
||||
else:
|
||||
os.environ.pop(field.name, None)
|
||||
field._set_to_none = backup_set_to_none
|
||||
field._cache_valid = False
|
||||
|
||||
|
||||
class TestLoadBalanceMethod(unittest.TestCase):
|
||||
def test_non_pd_defaults_to_round_robin(self):
|
||||
server_args = ServerArgs(model_path="dummy", disaggregation_mode="null")
|
||||
|
||||
Reference in New Issue
Block a user