Skip to content

[CI] Resolve MI350 parity from canonical trunk - #3652

Draft
ethanwee1 wants to merge 2 commits into
ethanwee1-fix-baseline-distributed-fallbackfrom
ethanwee1-refactor-mi350-parity-trunk
Draft

ethanwee1 wants to merge 2 commits into
ethanwee1-fix-baseline-distributed-fallbackfrom
ethanwee1-refactor-mi350-parity-trunk

Conversation

@ethanwee1

@ethanwee1 ethanwee1 commented Sep 16, 2026

Copy link
Copy Markdown

Problem

MI350 default, distributed, and Inductor now run together in trunk.yml; the standalone rocm-mi350 and periodic-rocm-mi350 workflows are manual-only metrics workflows with automatic triggers disabled. Parity still models them as primary/fallback sources and hardcodes job prefixes and shard totals, so historical comparisons and upstream environment renames can select the wrong run or miss valid jobs.

Tracked in AIPYTORCH-1223. Stacked on #3651; #3650 remains unchanged.

Changes

  • Make canonical trunk the sole MI350 parity source for default, distributed, and Inductor.
  • Resolve a separate canonical trunk run for the baseline commit and reuse it across all baseline configurations.
  • Discover each run's actual CUDA/ROCm job prefix, test kind, and shard total from its jobs.
  • Restrict canonical fallback checks to candidate trunk runs, prefer push runs, and reject incomplete shard families.
  • Preserve configured baseline fallbacks for other architectures and propagate test/test-osdc into log and artifact names.
  • Prefer complete normal test families over debug, slow-gradcheck, smoke, build-only, and no-ops variants.
  • Add focused unit coverage for renamed and historical families, incomplete/debug-family rejection, test-kind preservation, and platform separation.

Validation

All four hardened-head workflows passed with source logs enabled. The current runs selected trunk 35098139093; the historical comparisons independently selected current trunk 34612152506 and baseline trunk 34610386489, detected the older Jammy ROCm Python 3.10 family, and downloaded all baseline distributed shards. The personal-fork historical report contains 5,172 distributed and 369,710 total tests on each commit.

Use trunk as the sole MI350 source and derive each run's actual CUDA and ROCm job families so current and baseline commits survive job-name and shard-count changes.
Scope fallback checks to trunk push runs, require complete shard families, preserve discovered test kinds, and retain configured baseline fallbacks for other architectures.
_TEST_JOB = re.compile(
r"^(?P<prefix>.+) / (?P<kind>test(?:-osdc)?) "
r"\((?P<config>[^,]+), (?P<shard>\d+), (?P<total>\d+)"
)

@jithunnair-amd jithunnair-amd Sep 17, 2026

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some examples in a comment would be helpful to parse these regexes

r"^(?P<prefix>.+) / (?P<kind>test(?:-osdc)?) "
r"\((?P<config>[^,]+), (?P<shard>\d+), (?P<total>\d+)"
)
_SPECIAL_FAMILIES = ("build-only", "debug", "no-ops", "slow-gradcheck", "smoke")

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hardcoded much? does it pick up junk if we don't have this?

f"(last HTTP {response.status_code}) for {jobs_url}"
)

def get_workflow_jobs(wf, all_attempts=False):

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should the default value for all_attempts be True instead? Why not?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants