fix(ci): apply MMMU retry logic to all affected test files (#17329)

This commit is contained in:
Hudson Xing
2026-01-19 10:00:29 -08:00
committed by GitHub
parent 71279e31f7
commit c1282da236
5 changed files with 49 additions and 27 deletions
+35 -1
View File
@@ -64,6 +64,33 @@ def _run_lmms_eval_with_retry(cmd: list[str], timeout: int = 3600) -> None:
capture_output=True, capture_output=True,
text=True, text=True,
) )
# Check for errors in output even if exit code is 0
# lmms_eval sometimes returns 0 even when errors occur
combined_output = result.stdout + result.stderr
if _is_mmmu_parquet_corruption(combined_output):
print(
"Detected MMMU parquet corruption error in output. Attempting recovery..."
)
if _cleanup_mmmu_dataset_cache():
print("Retrying lmms_eval with fresh download...")
with temp_set_env(
HF_HUB_OFFLINE="0",
HF_DATASETS_DOWNLOAD_MODE="force_redownload",
):
retry_result = subprocess.run(
cmd, check=True, timeout=timeout, capture_output=True, text=True
)
# Print retry output
if retry_result.stdout:
print(retry_result.stdout, end="")
if retry_result.stderr:
print(retry_result.stderr, end="")
else:
print(
f"Failed to cleanup corrupted MMMU cache. Output from lmms_eval:\nStdout:\n{result.stdout}\nStderr:\n{result.stderr}"
)
raise RuntimeError("Failed to cleanup corrupted MMMU cache")
else:
# Print captured output to maintain visibility of successful runs # Print captured output to maintain visibility of successful runs
if result.stdout: if result.stdout:
print(result.stdout, end="") print(result.stdout, end="")
@@ -79,7 +106,14 @@ def _run_lmms_eval_with_retry(cmd: list[str], timeout: int = 3600) -> None:
HF_HUB_OFFLINE="0", HF_HUB_OFFLINE="0",
HF_DATASETS_DOWNLOAD_MODE="force_redownload", HF_DATASETS_DOWNLOAD_MODE="force_redownload",
): ):
subprocess.run(cmd, check=True, timeout=timeout) retry_result = subprocess.run(
cmd, check=True, timeout=timeout, capture_output=True, text=True
)
# Print retry output
if retry_result.stdout:
print(retry_result.stdout, end="")
if retry_result.stderr:
print(retry_result.stderr, end="")
else: else:
print( print(
f"Failed to cleanup corrupted MMMU cache. Error from lmms_eval:\nStdout:\n{e.stdout}\nStderr:\n{e.stderr}" f"Failed to cleanup corrupted MMMU cache. Error from lmms_eval:\nStdout:\n{e.stdout}\nStderr:\n{e.stderr}"
@@ -3,12 +3,12 @@ import glob
import json import json
import os import os
import random import random
import subprocess
import sys import sys
import unittest import unittest
from types import SimpleNamespace from types import SimpleNamespace
from sglang.srt.utils import kill_process_tree from sglang.srt.utils import kill_process_tree
from sglang.test.kits.mmmu_vlm_kit import _run_lmms_eval_with_retry
from sglang.test.test_utils import ( from sglang.test.test_utils import (
DEFAULT_TIMEOUT_FOR_SERVER_LAUNCH, DEFAULT_TIMEOUT_FOR_SERVER_LAUNCH,
DEFAULT_URL_FOR_TEST, DEFAULT_URL_FOR_TEST,
@@ -85,11 +85,7 @@ class TestVLMPiecewiseCudaGraph(CustomTestCase):
str(output_path), str(output_path),
] ]
subprocess.run( _run_lmms_eval_with_retry(cmd, timeout=3600)
cmd,
check=True,
timeout=3600,
)
def _run_vlm_mmmu_test( def _run_vlm_mmmu_test(
self, self,
@@ -3,12 +3,12 @@ import glob
import json import json
import os import os
import random import random
import subprocess
import sys import sys
import unittest import unittest
from types import SimpleNamespace from types import SimpleNamespace
from sglang.srt.utils import kill_process_tree from sglang.srt.utils import kill_process_tree
from sglang.test.kits.mmmu_vlm_kit import _run_lmms_eval_with_retry
from sglang.test.test_utils import ( from sglang.test.test_utils import (
DEFAULT_TIMEOUT_FOR_SERVER_LAUNCH, DEFAULT_TIMEOUT_FOR_SERVER_LAUNCH,
DEFAULT_URL_FOR_TEST, DEFAULT_URL_FOR_TEST,
@@ -88,11 +88,7 @@ class TestVLMViTCudaGraph(CustomTestCase):
str(output_path), str(output_path),
] ]
subprocess.run( _run_lmms_eval_with_retry(cmd, timeout=3600)
cmd,
check=True,
timeout=3600,
)
def _run_vlm_mmmu_test( def _run_vlm_mmmu_test(
self, self,
+2 -6
View File
@@ -3,13 +3,13 @@ import glob
import json import json
import os import os
import random import random
import subprocess
import sys import sys
import unittest import unittest
from types import SimpleNamespace from types import SimpleNamespace
from sglang.srt.utils import kill_process_tree from sglang.srt.utils import kill_process_tree
from sglang.test.ci.ci_register import register_cuda_ci from sglang.test.ci.ci_register import register_cuda_ci
from sglang.test.kits.mmmu_vlm_kit import _run_lmms_eval_with_retry
from sglang.test.test_utils import ( from sglang.test.test_utils import (
DEFAULT_TIMEOUT_FOR_SERVER_LAUNCH, DEFAULT_TIMEOUT_FOR_SERVER_LAUNCH,
DEFAULT_URL_FOR_TEST, DEFAULT_URL_FOR_TEST,
@@ -94,11 +94,7 @@ class TestVLMEncoderDP(CustomTestCase):
str(output_path), str(output_path),
] ]
subprocess.run( _run_lmms_eval_with_retry(cmd, timeout=3600)
cmd,
check=True,
timeout=3600,
)
def _run_vlm_mmmu_test( def _run_vlm_mmmu_test(
self, self,
+3 -3
View File
@@ -1,9 +1,9 @@
import os import os
import subprocess
import threading import threading
import unittest import unittest
from sglang.srt.utils import kill_process_tree from sglang.srt.utils import kill_process_tree
from sglang.test.kits.mmmu_vlm_kit import _run_lmms_eval_with_retry
from sglang.test.server_fixtures.disaggregation_fixture import ( from sglang.test.server_fixtures.disaggregation_fixture import (
PDDisaggregationServerBase, PDDisaggregationServerBase,
) )
@@ -177,7 +177,7 @@ class TestEPDDisaggregationOneEncoder(PDDisaggregationServerBase):
limit, limit,
] ]
subprocess.run(cmd, check=True, timeout=3600) _run_lmms_eval_with_retry(cmd, timeout=3600)
def test_mmmu(self): def test_mmmu(self):
"""Test MMMU evaluation with EPD disaggregation""" """Test MMMU evaluation with EPD disaggregation"""
@@ -393,7 +393,7 @@ class TestEPDDisaggregationMultiEncoders(PDDisaggregationServerBase):
limit, limit,
] ]
subprocess.run(cmd, check=True, timeout=3600) _run_lmms_eval_with_retry(cmd, timeout=3600)
def test_mmmu(self): def test_mmmu(self):
"""Test MMMU evaluation with EPD disaggregation (multiple encoders)""" """Test MMMU evaluation with EPD disaggregation (multiple encoders)"""