Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 14 additions & 5 deletions build_tools/github_actions/fetch_test_configurations.py
Original file line number Diff line number Diff line change
Expand Up @@ -710,8 +710,9 @@ def _family_matches(
# The runner ships in the MIOpen dist (share/miopen/bin/run_dbsync_rocjitsu.py, pulled via
# --miopen; defined in rocm-libraries projects/miopen/test/gtest/dbsync/): it resolves arch + CU
# list from AMDGPU_FAMILIES, sparse-builds the pinned rocjitsu KMD, and runs StaticFDBSync once
# per CU with a CU-corrected config. include_family restricts it to gfx942, whose FAMILY_MAP
# entry covers both CU variants -- MI300X (304 CU) and MI300A (228 CU) -- in a single job.
# per CU with a CU-corrected config. include_family restricts it to the arches rocjitsu has a
# KMD config for: gfx942, whose FAMILY_MAP entry covers both CU variants -- MI300X (304 CU) and
# MI300A (228 CU) -- in a single job, and gfx950 (MI355X, 256 CU; advisory via expect_failure).
# linux_cpu_runner: no scarce GPU test runner needed; uses the default no_rocm Ubuntu container
# (the runner sudo-apt-installs cmake/build-essential/libdrm-dev to build rocjitsu).
"miopen-dbsync": {
Expand All @@ -721,15 +722,15 @@ def _family_matches(
# job entirely on the `quick` tier -- no job is scheduled, so no artifact fetch
# or rocjitsu build is paid for on quick (the runner script also self-skips on
# TEST_TYPE=quick as a backstop). Runs serially (MIOPEN_DBSYNC_MAX_THREADS=1)
# under rocjitsu; full set (gfx942 304+228) + artifact fetch + rocjitsu build
# measures ~15 min, so 30 gives margin and fails a hung interposer faster.
# under rocjitsu; full set (gfx942 304+228, gfx950 256) + artifact fetch + rocjitsu
# build measures ~15 min, so 30 gives margin and fails a hung interposer faster.
"timeout_minutes": 30,
"test_script": "python ./build/share/miopen/bin/run_dbsync_rocjitsu.py",
Comment thread
JonathanLichtnerAMD marked this conversation as resolved.
Resolved
"platform": ["linux"],
"linux_cpu_runner": True,
"test_types": ["standard", "comprehensive", "full"],
"include_family": {
"linux": ["gfx942"],
"linux": ["gfx942", "gfx950"],
},
"total_shards_dict": {
"linux": 1,
Expand Down Expand Up @@ -1439,6 +1440,14 @@ def run():
job_config_data = {**_common_settings, **test_matrix[key]}
job_config_data["test_type"] = test_type

# gfx950 dbsync is advisory (non-blocking) while it is re-qualified:
# test_component.yml maps expect_failure to continue-on-error. gfx942
# stays blocking. Mirrors the benchmark components' use of this field.
# TODO(ALMIOPEN-2674): drop "gfx950-dcgpu" once gfx950 dbsync has been
# green for a few consecutive standard/comprehensive/full runs.
if key == "miopen-dbsync" and amdgpu_families in {"gfx950-dcgpu"}:
job_config_data["expect_failure"] = True
Comment thread
JonathanLichtnerAMD marked this conversation as resolved.
Resolved

# tensilelite: append the tensilelite/tests C++ gtest suite (run via
# ctest -L <test_type>, driven by the shared test_runner.py) after
# the existing pytest stage, for every tier except quick -- that
Expand Down
54 changes: 54 additions & 0 deletions build_tools/github_actions/tests/fetch_test_configurations_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -465,6 +465,60 @@ def test_miopen_dbsync_excluded_on_quick(self):
os.environ["TEST_TYPE"] = "quick"
self.assertNotIn("miopen-dbsync", self._selected_names())

def _dbsync_job(self, families, gated_gpu, gfx_target):
"""Run selection for miopen-dbsync on `families`; return its job or None."""
os.environ["PROJECTS_TO_TEST"] = "miopen-dbsync"
os.environ["AMDGPU_FAMILIES"] = families
if gated_gpu:
# configure_multi_arch_ci blanked the GPU runner (e.g. tests_on_trigger).
os.environ["TEST_RUNS_ON"] = ""
target = families.split("-")[0].lower()
fetch_test_configurations.get_all_families_for_trigger_types = lambda _: {
target: {
"linux": {
"test-runs-on": "" if gated_gpu else "some-gpu-runner",
"fetch-gfx-targets": [gfx_target],
}
}
}
fetch_test_configurations.run()
jobs = [j for j in self._get_components() if j["job_name"] == "miopen-dbsync"]
return jobs[0] if jobs else None

def test_miopen_dbsync_include_family_covers_gfx942_and_gfx950(self):
config = fetch_test_configurations.test_matrix["miopen-dbsync"]
self.assertEqual(config["include_family"]["linux"], ["gfx942", "gfx950"])

def test_miopen_dbsync_gfx950_scheduled_on_cpu_runner_when_gpu_gated(self):
job = self._dbsync_job("gfx950-dcgpu", True, "gfx950")
self.assertIsNotNone(job)
self.assertTrue(job["linux_cpu_runner"])
self.assertTrue(job["test_runner"])

def test_miopen_dbsync_gfx950_is_advisory(self):
job = self._dbsync_job("gfx950-dcgpu", True, "gfx950")
self.assertTrue(job["expect_failure"])

def test_miopen_dbsync_gfx942_stays_blocking(self):
job = self._dbsync_job("gfx94X-dcgpu", False, "gfx942")
self.assertIsNotNone(job)
self.assertNotIn("expect_failure", job)

def test_miopen_dbsync_excluded_on_other_families(self):
self.assertIsNone(self._dbsync_job("gfx120X-all", False, "gfx1200"))

def test_gpu_components_not_scheduled_on_gated_gfx950(self):
# The CPU lane must not leak GPU-requiring components onto gated gfx950.
os.environ["PROJECTS_TO_TEST"] = "miopen-dbsync,rocblas"
os.environ["AMDGPU_FAMILIES"] = "gfx950-dcgpu"
os.environ["TEST_RUNS_ON"] = ""
fetch_test_configurations.get_all_families_for_trigger_types = lambda _: {
"gfx950": {"linux": {"test-runs-on": "", "fetch-gfx-targets": ["gfx950"]}}
}
names = self._selected_names()
self.assertIn("miopen-dbsync", names)
self.assertNotIn("rocblas", names)

# -----------------------
# Multi-GPU logic (RCCL)
# -----------------------
Expand Down
Loading