[NPU] Fix evalscope accuracy parsing and add glm5_1 aime26 request timeout (#36459)

This commit is contained in:
pllimax
2026-08-31 17:19:03 +08:00
committed by GitHub
parent a53718e88c
commit 63b2adbeac
4 changed files with 12 additions and 67 deletions
@@ -227,17 +227,24 @@ def run_evalscope(
if "accuracy" not in metrics:
accuracy_patterns = [
# Add adaptation for evalscope 1.11+ table format
r"Accuracy\s*[↑↓]?\s*│\s*[^│]*│\s*\d+\s*│\s*([\d.]+)%?\s*│",
r"mean_acc\s*.*?│\s*\d+\s*│\s*([\d.]+)\s*│",
r"\s+([\d.]+)\s+│\s+\S+\s+│\s*$",
r"accuracy\s*[:=]?\s*([\d.]+)",
# Keep compatibility with legacy evalscope 1.10 table format
r"Accuracy\s*[:=]?\s*([\d.]+)",
r"score\s*[:=]?\s*([\d.]+)",
]
for pattern in accuracy_patterns:
matches = re.findall(pattern, full_output)
matches = list(re.finditer(pattern, full_output))
if matches:
final_accuracy = float(matches[-1])
final_accuracy = float(matches[-1].group(1))
# evalscope 1.11+ reports accuracy as a percentage (e.g. 66.67%);
# normalize it to a 0-1 fraction to compare against the baseline.
if "%" in matches[-1].group(0):
final_accuracy /= 100.0
metrics["accuracy"] = final_accuracy
logger.info(f"The Final Accuracy from output: {final_accuracy}")
break
@@ -307,7 +314,6 @@ class TestNpuAccuracyTestCaseBase(CustomTestCase):
other_args = None
server_timeout = DEFAULT_TIMEOUT_FOR_SERVER_LAUNCH
envs = None
n_runs = 3
accuracy = 0.1
test_type = "accuracy"
@@ -504,67 +510,6 @@ class TestNpuAccuracyTestCaseBase(CustomTestCase):
)
assert_metrics(self, best_metrics)
def run_accuracy_multiple(self, n_runs=None):
if n_runs is None:
n_runs = self.n_runs
parsed_url = urlparse(self.base_url)
host = parsed_url.hostname
port = parsed_url.port
if self.benchmark_tool != EVALSCOPE:
raise Exception(
"run_accuracy_multiple only supports evalscope benchmark tool"
)
model_name = os.path.basename(self.model)
all_metrics = []
for i in range(n_runs):
logger.info(f"=== Accuracy run {i + 1}/{n_runs} ===")
metrics = run_evalscope(
host=host,
port=port,
model=model_name,
datasets=self.datasets,
dataset_args=self.dataset_args,
eval_batch_size=self.eval_batch_size,
limit=self.limit,
generation_config=self.generation_config,
dataset_dir=self.dataset_dir,
stream=self.stream,
timeout=self.timeout,
eval_type=self.eval_type,
)
all_metrics.append(metrics)
if metrics and "accuracy" in metrics:
logger.info(f"Run {i + 1} accuracy: {metrics['accuracy']}")
else:
logger.warning(f"Run {i + 1} failed to get accuracy metric")
valid_metrics = [m for m in all_metrics if m and "accuracy" in m]
if not valid_metrics:
raise Exception("No valid accuracy metrics obtained from any run")
avg_accuracy = sum(float(m["accuracy"]) for m in valid_metrics) / len(
valid_metrics
)
logger.info("=" * 60)
logger.info("Multiple Run Accuracy Results:")
for i, m in enumerate(valid_metrics):
logger.info(f" Run {i + 1}: {m['accuracy']}")
logger.info(f" Average: {avg_accuracy}")
logger.info("=" * 60)
avg_metrics = {"accuracy": avg_accuracy}
dump_metric(
"accuracy_avg",
avg_accuracy,
labels={"test_case": self.__class__.__name__, "type": "accuracy"},
)
assert_metrics(self, avg_metrics)
class TestNpuAccuracyMultiNodePdMixTestCaseBase(CustomTestCase):
model_config = None