import os import unittest from types import SimpleNamespace from sglang.test.ci.ci_register import register_cuda_ci from sglang.test.run_eval import run_eval from sglang.test.server_fixtures.disaggregation_fixture import ( PDDisaggregationServerBase, ) from sglang.test.test_utils import ( DEFAULT_TIMEOUT_FOR_SERVER_LAUNCH, popen_launch_pd_server, ) QWEN3_8B_MODEL_PATH = "Qwen/Qwen3-8B" register_cuda_ci(est_time=300, stage="base-c", runner_config="4-gpu-gb300") class TestDisaggregationMooncakeAARCH64Accuracy(PDDisaggregationServerBase): @classmethod def setUpClass(cls): super().setUpClass() os.environ["SGLANG_MOONCAKE_CUSTOM_MEM_POOL"] = "true" os.environ["MC_FORCE_MNNVL"] = "true" cls.model = QWEN3_8B_MODEL_PATH # Non blocking start servers cls.start_prefill() cls.start_decode() # Block until both cls.wait_server_ready(cls.prefill_url + "/health", process=cls.process_prefill) cls.wait_server_ready(cls.decode_url + "/health", process=cls.process_decode) cls.launch_lb() @classmethod def tearDownClass(cls): os.environ.pop("SGLANG_MOONCAKE_CUSTOM_MEM_POOL") os.environ.pop("MC_FORCE_MNNVL") super().tearDownClass() @classmethod def start_prefill(cls): prefill_args = [ "--trust-remote-code", "--disaggregation-mode", "prefill", "--disaggregation-bootstrap-port", cls.bootstrap_port, "--tp", "2", ] prefill_args += cls.transfer_backend + cls.rdma_devices cls.process_prefill = popen_launch_pd_server( cls.model, cls.prefill_url, timeout=DEFAULT_TIMEOUT_FOR_SERVER_LAUNCH, other_args=prefill_args, ) @classmethod def start_decode(cls): decode_args = [ "--trust-remote-code", "--disaggregation-mode", "decode", "--disaggregation-bootstrap-port", cls.bootstrap_port, "--tp", "2", "--base-gpu-id", "2", ] decode_args += cls.transfer_backend + cls.rdma_devices cls.process_decode = popen_launch_pd_server( cls.model, cls.decode_url, timeout=DEFAULT_TIMEOUT_FOR_SERVER_LAUNCH, other_args=decode_args, ) def test_gsm8k(self): args = SimpleNamespace( base_url=self.base_url, model=self.model, eval_name="gsm8k", api="completion", max_tokens=512, num_examples=200, num_threads=128, ) metrics = run_eval(args) print(f"Evaluation metrics: {metrics}") self.assertGreater(metrics["score"], 0.62) if __name__ == "__main__": unittest.main()