[CI] Migrate mgsm_en eval to gsm8k to remove openaipublic dependency (#21931)
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> Co-authored-by: Kangyan-Zhou <zky314343421@gmail.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
Kangyan-Zhou
parent
7546d04c81
commit
f6fc39569a
@@ -1,7 +1,7 @@
|
||||
"""
|
||||
AMD GSM8K Evaluation Test (Migrated from test/srt/nightly/)
|
||||
|
||||
This test evaluates instruction-tuned models on the mgsm_en benchmark using chat completions.
|
||||
This test evaluates instruction-tuned models on the gsm8k benchmark using chat completions.
|
||||
Models are tested with various TP configurations on AMD GPUs.
|
||||
|
||||
Registry: nightly-amd suite (2-GPU tests)
|
||||
@@ -35,34 +35,35 @@ from sglang.test.test_utils import (
|
||||
register_amd_ci(est_time=3600, suite="nightly-amd", nightly=True)
|
||||
|
||||
MODEL_SCORE_THRESHOLDS = {
|
||||
# Thresholds set at 5% below reported GSM8K (5-shot/CoT) scores
|
||||
# Llama 3.1 series
|
||||
"meta-llama/Llama-3.1-8B-Instruct": 0.82,
|
||||
"meta-llama/Llama-3.1-70B-Instruct": 0.95,
|
||||
"meta-llama/Llama-3.1-8B-Instruct": 0.80, # 84.5% - 5%
|
||||
"meta-llama/Llama-3.1-70B-Instruct": 0.89, # 94.1% - 5%
|
||||
# Llama 3.2 series (smaller models)
|
||||
"meta-llama/Llama-3.2-3B-Instruct": 0.55,
|
||||
"meta-llama/Llama-3.2-3B-Instruct": 0.43, # 48.2% - 5%
|
||||
# Mistral series
|
||||
"mistralai/Mistral-7B-Instruct-v0.3": 0.55,
|
||||
"mistralai/Mixtral-8x7B-Instruct-v0.1": 0.58,
|
||||
"mistralai/Mistral-7B-Instruct-v0.3": 0.47, # 52.1% - 5%
|
||||
"mistralai/Mixtral-8x7B-Instruct-v0.1": 0.69, # 74.4% - 5% (lower if AMD scores differently)
|
||||
# DeepSeek series
|
||||
"deepseek-ai/DeepSeek-Coder-V2-Lite-Instruct": 0.85,
|
||||
"deepseek-ai/DeepSeek-Coder-V2-Lite-Instruct": 0.81, # 86.4% - 5%
|
||||
# Qwen2 series
|
||||
"Qwen/Qwen2-57B-A14B-Instruct": 0.86,
|
||||
"Qwen/Qwen2.5-7B-Instruct": 0.85,
|
||||
"Qwen/Qwen2-57B-A14B-Instruct": 0.76, # 80.7% - 5% (official A14B score; 88.2% was the 72B)
|
||||
"Qwen/Qwen2.5-7B-Instruct": 0.82, # 86.3% - 5%
|
||||
# Qwen3 series
|
||||
"Qwen/Qwen3-30B-A3B-Thinking-2507": 0.84, # MoE model verified on MI300X
|
||||
"Qwen/Qwen3-8B": 0.77,
|
||||
"Qwen/Qwen3-30B-A3B-Thinking-2507": 0.86, # 91.4% - 5% (full attention mode; ensure sufficient max_tokens)
|
||||
"Qwen/Qwen3-8B": 0.76, # ~81% - 5%
|
||||
# Google Gemma
|
||||
"google/gemma-2-27b-it": 0.91,
|
||||
"google/gemma-2-9b-it": 0.72,
|
||||
"google/gemma-2-27b-it": 0.86, # 90.7% - 5%
|
||||
"google/gemma-2-9b-it": 0.74, # 78.5% - 5%
|
||||
# "neuralmagic/gemma-2-2b-it-FP8": 0.4, # Small 2B model - OOM on single GPU
|
||||
# FP8 quantized models
|
||||
"neuralmagic/Meta-Llama-3.1-8B-Instruct-FP8": 0.8,
|
||||
"neuralmagic/Mistral-7B-Instruct-v0.3-FP8": 0.54,
|
||||
"neuralmagic/Meta-Llama-3.1-70B-Instruct-FP8": 0.94,
|
||||
"neuralmagic/Qwen2-72B-Instruct-FP8": 0.92,
|
||||
"neuralmagic/Qwen2-57B-A14B-Instruct-FP8": 0.81,
|
||||
"neuralmagic/Mixtral-8x7B-Instruct-v0.1-FP8": 0.57,
|
||||
"neuralmagic/DeepSeek-Coder-V2-Lite-Instruct-FP8": 0.84,
|
||||
"neuralmagic/Meta-Llama-3.1-8B-Instruct-FP8": 0.80, # 84.5% - 5%
|
||||
"neuralmagic/Mistral-7B-Instruct-v0.3-FP8": 0.46, # ~51% - 5%
|
||||
"neuralmagic/Meta-Llama-3.1-70B-Instruct-FP8": 0.89, # 94.1% - 5%
|
||||
"neuralmagic/Qwen2-72B-Instruct-FP8": 0.86, # 91.1% - 5%
|
||||
"neuralmagic/Qwen2-57B-A14B-Instruct-FP8": 0.76, # 80.7% - 5% (official A14B score)
|
||||
"neuralmagic/Mixtral-8x7B-Instruct-v0.1-FP8": 0.69, # 74.4% - 5%
|
||||
"neuralmagic/DeepSeek-Coder-V2-Lite-Instruct-FP8": 0.81, # 86.4% - 5%
|
||||
}
|
||||
|
||||
failing_models = {
|
||||
@@ -185,7 +186,7 @@ def check_model_scores(results):
|
||||
summary += line
|
||||
|
||||
print(f"\n{'='*60}")
|
||||
print("SUMMARY - TP=2 Instruction Models (mgsm_en)")
|
||||
print("SUMMARY - TP=2 Instruction Models (gsm8k)")
|
||||
print(f"{'='*60}")
|
||||
print(summary)
|
||||
print(f"\n📊 Final Statistics:")
|
||||
@@ -200,7 +201,7 @@ def check_model_scores(results):
|
||||
raise AssertionError(f"The following models failed:\n{failure_msg}")
|
||||
|
||||
|
||||
# Do not use `CustomTestCase` since `test_mgsm_en_all_models` does not want retry
|
||||
# Do not use `CustomTestCase` since `test_gsm8k_all_models` does not want retry
|
||||
class TestNightlyGsm8KEval(unittest.TestCase):
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
@@ -215,7 +216,7 @@ class TestNightlyGsm8KEval(unittest.TestCase):
|
||||
]
|
||||
cls.base_url = DEFAULT_URL_FOR_TEST
|
||||
|
||||
def test_mgsm_en_all_models(self):
|
||||
def test_gsm8k_all_models(self):
|
||||
warnings.filterwarnings(
|
||||
"ignore", category=ResourceWarning, message="unclosed.*socket"
|
||||
)
|
||||
@@ -226,7 +227,7 @@ class TestNightlyGsm8KEval(unittest.TestCase):
|
||||
print(f"\n{'='*60}")
|
||||
print("AMD GSM8K Evaluation Test (TP=2 Instruction Models)")
|
||||
print(f"{'='*60}")
|
||||
print(f"Benchmark: mgsm_en (chat completions)")
|
||||
print(f"Benchmark: gsm8k (chat completions)")
|
||||
print(f"{'='*60}\n")
|
||||
|
||||
for model_group, is_fp8, is_tp2 in self.model_groups:
|
||||
@@ -261,13 +262,13 @@ class TestNightlyGsm8KEval(unittest.TestCase):
|
||||
args = SimpleNamespace(
|
||||
base_url=self.base_url,
|
||||
model=model,
|
||||
eval_name="mgsm_en",
|
||||
eval_name="gsm8k",
|
||||
num_examples=None,
|
||||
num_threads=1024,
|
||||
)
|
||||
|
||||
# Run eval with timing and retries
|
||||
print(f"📊 Running mgsm_en evaluation...")
|
||||
print(f"📊 Running gsm8k evaluation...")
|
||||
eval_start = time.time()
|
||||
threshold = MODEL_SCORE_THRESHOLDS.get(model)
|
||||
metrics = None
|
||||
|
||||
@@ -56,11 +56,11 @@ class TestDPAttentionDP2TP4(
|
||||
def tearDownClass(cls):
|
||||
kill_process_tree(cls.process.pid)
|
||||
|
||||
def test_mgsm_en(self):
|
||||
def test_gsm8k(self):
|
||||
args = SimpleNamespace(
|
||||
base_url=self.base_url,
|
||||
model=self.model,
|
||||
eval_name="mgsm_en",
|
||||
eval_name="gsm8k",
|
||||
num_examples=None,
|
||||
num_threads=1024,
|
||||
)
|
||||
|
||||
@@ -128,11 +128,11 @@ class TestDPAttentionDP2PP2(CustomTestCase):
|
||||
def tearDownClass(cls):
|
||||
kill_process_tree(cls.process.pid)
|
||||
|
||||
def test_mgsm_en(self):
|
||||
def test_gsm8k(self):
|
||||
args = SimpleNamespace(
|
||||
base_url=self.base_url,
|
||||
model=self.model,
|
||||
eval_name="mgsm_en",
|
||||
eval_name="gsm8k",
|
||||
num_examples=None,
|
||||
num_threads=1024,
|
||||
)
|
||||
|
||||
@@ -26,28 +26,29 @@ NIGHTLY_EVAL_SERVER_TIMEOUT = 1800
|
||||
register_cuda_ci(est_time=3600, suite="nightly-eval-text-2-gpu", nightly=True)
|
||||
|
||||
MODEL_SCORE_THRESHOLDS = {
|
||||
"meta-llama/Llama-3.1-8B-Instruct": 0.82,
|
||||
"mistralai/Mistral-7B-Instruct-v0.3": 0.58,
|
||||
"deepseek-ai/DeepSeek-Coder-V2-Lite-Instruct": 0.85,
|
||||
"google/gemma-2-27b-it": 0.91,
|
||||
"meta-llama/Llama-3.1-70B-Instruct": 0.95,
|
||||
"mistralai/Mixtral-8x7B-Instruct-v0.1": 0.616,
|
||||
"Qwen/Qwen2-57B-A14B-Instruct": 0.86,
|
||||
"neuralmagic/Meta-Llama-3.1-8B-Instruct-FP8": 0.83,
|
||||
"neuralmagic/Mistral-7B-Instruct-v0.3-FP8": 0.54,
|
||||
"neuralmagic/DeepSeek-Coder-V2-Lite-Instruct-FP8": 0.835,
|
||||
"zai-org/GLM-4.5-Air-FP8": 0.75,
|
||||
# The threshold of neuralmagic/gemma-2-2b-it-FP8 should be 0.6, but this model has some accuracy regression.
|
||||
# The fix is tracked at https://github.com/sgl-project/sglang/issues/4324, we set it to 0.50, for now, to make CI green.
|
||||
"neuralmagic/gemma-2-2b-it-FP8": 0.50,
|
||||
"neuralmagic/Meta-Llama-3.1-70B-Instruct-FP8": 0.94,
|
||||
"neuralmagic/Mixtral-8x7B-Instruct-v0.1-FP8": 0.65,
|
||||
"neuralmagic/Qwen2-72B-Instruct-FP8": 0.94,
|
||||
"neuralmagic/Qwen2-57B-A14B-Instruct-FP8": 0.82,
|
||||
# Thresholds set at 5% below reported GSM8K (5-shot/CoT) scores
|
||||
"meta-llama/Llama-3.1-8B-Instruct": 0.80, # 84.5% - 5%
|
||||
"mistralai/Mistral-7B-Instruct-v0.3": 0.47, # 52.1% - 5%
|
||||
"deepseek-ai/DeepSeek-Coder-V2-Lite-Instruct": 0.81, # 86.4% - 5%
|
||||
"google/gemma-2-27b-it": 0.86, # 90.7% - 5%
|
||||
"meta-llama/Llama-3.1-70B-Instruct": 0.89, # 94.1% - 5%
|
||||
"mistralai/Mixtral-8x7B-Instruct-v0.1": 0.69, # 74.4% - 5%
|
||||
"Qwen/Qwen2-57B-A14B-Instruct": 0.76, # 80.7% - 5% (official A14B score; 88.2% was the 72B)
|
||||
"neuralmagic/Meta-Llama-3.1-8B-Instruct-FP8": 0.80, # 84.5% - 5%
|
||||
"neuralmagic/Mistral-7B-Instruct-v0.3-FP8": 0.47, # 52.1% - 5%
|
||||
"neuralmagic/DeepSeek-Coder-V2-Lite-Instruct-FP8": 0.81, # 86.4% - 5%
|
||||
"zai-org/GLM-4.5-Air-FP8": 0.80, # ~85% - 5%
|
||||
# GSM8K baseline for gemma-2-2b is ~40-45%; threshold set at 5% below.
|
||||
# (Previously 0.50 based on MGSM-EN; tracked regression: https://github.com/sgl-project/sglang/issues/4324)
|
||||
"neuralmagic/gemma-2-2b-it-FP8": 0.38, # ~43% - 5%
|
||||
"neuralmagic/Meta-Llama-3.1-70B-Instruct-FP8": 0.89, # 94.1% - 5%
|
||||
"neuralmagic/Mixtral-8x7B-Instruct-v0.1-FP8": 0.69, # 74.4% - 5%
|
||||
"neuralmagic/Qwen2-72B-Instruct-FP8": 0.86, # 91.1% - 5%
|
||||
"neuralmagic/Qwen2-57B-A14B-Instruct-FP8": 0.76, # 80.7% - 5% (official A14B score)
|
||||
}
|
||||
|
||||
|
||||
# Do not use `CustomTestCase` since `test_mgsm_en_all_models` does not want retry
|
||||
# Do not use `CustomTestCase` since `test_gsm8k_all_models` does not want retry
|
||||
class TestNightlyGsm8KEval(unittest.TestCase):
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
@@ -66,7 +67,7 @@ class TestNightlyGsm8KEval(unittest.TestCase):
|
||||
|
||||
cls.base_url = DEFAULT_URL_FOR_TEST
|
||||
|
||||
def test_mgsm_en_all_models(self):
|
||||
def test_gsm8k_all_models(self):
|
||||
warnings.filterwarnings(
|
||||
"ignore", category=ResourceWarning, message="unclosed.*socket"
|
||||
)
|
||||
@@ -91,7 +92,7 @@ class TestNightlyGsm8KEval(unittest.TestCase):
|
||||
args = SimpleNamespace(
|
||||
base_url=self.base_url,
|
||||
model=model_setup.model_path,
|
||||
eval_name="mgsm_en",
|
||||
eval_name="gsm8k",
|
||||
num_examples=None,
|
||||
num_threads=1024,
|
||||
)
|
||||
|
||||
@@ -41,21 +41,19 @@ class TestPiecewiseCudaGraphQwen25VL(CustomTestCase):
|
||||
def tearDownClass(cls):
|
||||
kill_process_tree(cls.process.pid)
|
||||
|
||||
def test_mgsm_accuracy(self):
|
||||
num_examples = 2000
|
||||
|
||||
def test_gsm8k_accuracy(self):
|
||||
args = SimpleNamespace(
|
||||
base_url=self.base_url,
|
||||
model=self.model,
|
||||
eval_name="mgsm_en",
|
||||
num_examples=num_examples,
|
||||
num_threads=min(num_examples, 1024),
|
||||
eval_name="gsm8k",
|
||||
num_examples=None,
|
||||
num_threads=1024,
|
||||
)
|
||||
|
||||
metrics = run_eval(args)
|
||||
print(f"MGSM Accuracy: {metrics['score']:.3f}")
|
||||
print(f"GSM8K Accuracy: {metrics['score']:.3f}")
|
||||
|
||||
self.assertGreaterEqual(metrics["score"], 0.70)
|
||||
self.assertGreaterEqual(metrics["score"], 0.82)
|
||||
|
||||
|
||||
class TestPiecewiseCudaGraphInternVL25(CustomTestCase):
|
||||
@@ -79,21 +77,23 @@ class TestPiecewiseCudaGraphInternVL25(CustomTestCase):
|
||||
def tearDownClass(cls):
|
||||
kill_process_tree(cls.process.pid)
|
||||
|
||||
def test_mgsm_accuracy(self):
|
||||
num_examples = 2000
|
||||
|
||||
def test_gsm8k_accuracy(self):
|
||||
args = SimpleNamespace(
|
||||
base_url=self.base_url,
|
||||
model=self.model,
|
||||
eval_name="mgsm_en",
|
||||
num_examples=num_examples,
|
||||
num_threads=min(num_examples, 1024),
|
||||
eval_name="gsm8k",
|
||||
num_examples=None,
|
||||
num_threads=1024,
|
||||
)
|
||||
|
||||
metrics = run_eval(args)
|
||||
print(f"MGSM Accuracy: {metrics['score']:.3f}")
|
||||
print(f"GSM8K Accuracy: {metrics['score']:.3f}")
|
||||
|
||||
self.assertGreaterEqual(metrics["score"], 0.70)
|
||||
# Baseline (no piecewise CUDA graph): 0.571 — this eval uses 5-shot
|
||||
# concatenated text via chat API, which scores lower than reported
|
||||
# benchmarks (~77.8%) that use proper CoT chat format. The threshold
|
||||
# is set 5% below observed to catch catastrophic regressions.
|
||||
self.assertGreaterEqual(metrics["score"], 0.54)
|
||||
|
||||
|
||||
class TestPiecewiseCudaGraphQwen25VLEmbedding(CustomTestCase):
|
||||
|
||||
@@ -19,9 +19,12 @@ from sglang.test.test_utils import (
|
||||
register_cuda_ci(est_time=370, suite="stage-b-test-1-gpu-large")
|
||||
|
||||
MODEL_SCORE_THRESHOLDS = {
|
||||
"hugging-quants/Meta-Llama-3.1-8B-Instruct-AWQ-INT4": 0.825,
|
||||
"hugging-quants/Meta-Llama-3.1-8B-Instruct-GPTQ-INT4": 0.825,
|
||||
"hugging-quants/Mixtral-8x7B-Instruct-v0.1-AWQ-INT4": 0.615,
|
||||
# Baselines observed with gsm8k 5-shot concatenated format via chat API,
|
||||
# which scores lower than reported benchmarks using proper CoT format.
|
||||
# Thresholds set 5% below observed to catch catastrophic regressions.
|
||||
"hugging-quants/Meta-Llama-3.1-8B-Instruct-AWQ-INT4": 0.74, # observed: 0.781
|
||||
"hugging-quants/Meta-Llama-3.1-8B-Instruct-GPTQ-INT4": 0.74, # observed: 0.785
|
||||
"hugging-quants/Mixtral-8x7B-Instruct-v0.1-AWQ-INT4": 0.36, # observed: 0.380
|
||||
}
|
||||
|
||||
|
||||
@@ -93,7 +96,7 @@ class TestNightlyGsm8KEval(unittest.TestCase):
|
||||
]
|
||||
cls.base_url = DEFAULT_URL_FOR_TEST
|
||||
|
||||
def test_mgsm_en_all_models(self):
|
||||
def test_gsm8k_all_models(self):
|
||||
warnings.filterwarnings(
|
||||
"ignore", category=ResourceWarning, message="unclosed.*socket"
|
||||
)
|
||||
@@ -110,7 +113,7 @@ class TestNightlyGsm8KEval(unittest.TestCase):
|
||||
args = SimpleNamespace(
|
||||
base_url=self.base_url,
|
||||
model=model,
|
||||
eval_name="mgsm_en",
|
||||
eval_name="gsm8k",
|
||||
num_examples=None,
|
||||
num_threads=1024,
|
||||
)
|
||||
|
||||
@@ -428,10 +428,10 @@ class TestPrefillDelayerTokenUsageLowWatermark(CustomTestCase):
|
||||
|
||||
|
||||
class TestPrefillDelayerAccuracy(CustomTestCase):
|
||||
def test_1_mgsm_en_has_prefill_delayer(self):
|
||||
def test_1_gsm8k_has_prefill_delayer(self):
|
||||
self._run_accuracy_test(prefill_delayer=True)
|
||||
|
||||
def test_2_mgsm_en_no_prefill_delayer(self):
|
||||
def test_2_gsm8k_no_prefill_delayer(self):
|
||||
self._run_accuracy_test(prefill_delayer=False)
|
||||
|
||||
def _run_accuracy_test(self, prefill_delayer: bool):
|
||||
@@ -454,14 +454,14 @@ class TestPrefillDelayerAccuracy(CustomTestCase):
|
||||
args = SimpleNamespace(
|
||||
base_url=base_url,
|
||||
model=model,
|
||||
eval_name="mgsm_en",
|
||||
eval_name="gsm8k",
|
||||
num_examples=None,
|
||||
num_threads=1024,
|
||||
)
|
||||
metrics = run_eval(args)
|
||||
print(f"=== mgsm_en ({prefill_delayer=}) ===")
|
||||
print(f"=== gsm8k ({prefill_delayer=}) ===")
|
||||
print(f"{metrics=}")
|
||||
self.assertGreater(metrics["score"], 0.87)
|
||||
self.assertGreater(metrics["score"], 0.57)
|
||||
finally:
|
||||
kill_process_tree(process.pid)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user