[AMD] Verify the nightly ROCm 7.2.4 images trace HIP-graph kernels - #35398
michaelzhang-ai wants to merge 1 commit into
Conversation
6951171 to
6dd0d38
Compare
Hardware results on MI355XBuilt and qualified the Succeeded in about 46 minutes. Every claim in the description checks out in the resulting image:
The metadata patch is doing real work here: without it the image would record The flavor delivers what it exists forReal decode trace rather than the microbenchmark — gpt-oss-20b-bf16, triton attention backend,
The rocm720 image loses 87% of decode kernels; the rocm724 candidate recovers them with CUDA graphs left on. One blocker for the nightly gateThe promote job is gated on Details and the fix are in #35390. With the probe capturing 64 kernels and comparing traced against launched, the separation is exact and repeatable — 448/512 on 7.2.0 and 512/512 on 7.2.4, ten runs out of ten on each — and the candidate here passes 5 of 5. Worth landing that before this nightly starts gating on it. gfx942 is untested; this host is MI355X only. |
0ab4df1 to
7a3fdf7
Compare
7a3fdf7 to
a6fe915
Compare
The rocm724 flavors added in #30984 exist because ROCm 7.2.0 drops kernel-dispatch events for work submitted through hipGraphLaunch, so profiler traces of SGLang decoding under-report the decode steps. Nothing in CI notices if that regresses: the loss is partial, so the trace still looks plausible, and the profiling suite now runs without CUDA graphs on ROCm (#34452), so it never exercises the replay path at all. Probe each published rocm724 image on the GPU it targets, gfx942 on MI300X and gfx950 on MI355X, since the behaviour lives in the HIP runtime rather than in SGLang. Twice per image, because shipping the fixed ROCm is not the same as loading it: the torch wheel vendors its own 7.2.0 HIP and roctracer under torch/lib, so the default run records what users actually get, while the run with the ROCm install preloaded is what the image can do and is the one that gates. Gating is per leg, like the mirror job: a rocm720 leg failing in publish must not stop the rocm724 images from being checked, and a rocm724 leg that never published has no artifact and fails at the download. Verification happens after publish rather than gating it, so the daily images do not wait on a GPU runner queue. job_select=verify_profiling with probe_image qualifies an already-published tag without a rebuild. Co-authored-by: quitenode <quitenode@users.noreply.github.com>
a6fe915 to
7eac950
Compare
Motivation
#30984 landed the
rocm724flavors and the nightly now publishes them torocm/sgl-devandlmsysorg/sglang-rocm. Those flavors exist because ROCm 7.2.0 drops kernel-dispatch events for work submitted throughhipGraphLaunch(ROCm/ROCm#6102, fixed in 7.2.2), which is what AMD/Silo hit when profiling SGLang decoding on every*-rocm720-*image.Nothing verifies that the published images actually restore it. A trace with no GPU kernels in it still looks like a successful profile,
test/registered/profiling/test_start_profile.pyonly asserts the trace directory is non-empty, and since #34452 the profiling suite runs without CUDA graphs on ROCm, so CI never exercises the replay path at all. A future base bump could quietly take the fix away again.Modifications
One job in
release-docker-amd-rocm720-nightly.yml. After publish, eachrocm724flavor is probed on the GPU it targets — gfx942 on MI300X, gfx950 on MI355X — because the behaviour lives in the HIP runtime rather than in SGLang, so it is worth confirming per device generation. The job pulls the tag the publish job recorded in its artifact, starts the standard CI container against it, and runsscripts/ci/amd/check_hip_graph_profiling.pyinside the image. No dependency install: the point is to exercise the image's own torch and HIP runtime, which is what was just published.Gating details:
rocm720leg failing in publish must not stop therocm724images from being checked, so the job does not require all of publish to succeed. Arocm724leg that never published has no artifact and fails at the download — the same behaviour the mirror job below documents.rocm720legs are excluded, since they are expected to fail; a dispatch selecting a singlerocm720arch skips the job.job_selectis respected, so apublish-only dispatch does not run it.job_select=verify_profiling+probe_imagequalifies an already-published tag without a rebuild; pair it withgpu_archto choose the GPU. That is the quickest way to answer the question for one image, and it is how this should be run first.This verifies after publish rather than gating it, so the daily images are not held behind a GPU runner queue. A red leg means the day's
rocm724image traces nothing under graph replay and should not be recommended for profiling. Turning it into a real gate means splitting the publish job'srocm/sgl-devandlmsysorgpushes, which is worth doing separately if you want that.Accuracy Tests
No model or kernel code changes; this adds a verification job to a release workflow.
Speed Tests and Profiling
Not applicable. The job measures whether profiling works on the published image.
Test plan
actionlintreports nothing on the new job; the only findings in the file are the pre-existing self-hosted runner labels anddocker/login-action@v2in the publish and mirror jobs.scripts/lint/check_workflow_job_names.py.all/all,publish-only, arocm720arch, a singlerocm724arch,verify_profilingwith a skipped publish, and publishfailurevscancelled— confirming it runs exactly the intended legs in each.workflow_dispatchonly offers a workflow that exists on the default branch, so this cannot be exercised until it merges. Once it has, the fastest check is one already-published image on one GPU:Expected
VERDICT: PASS, against the same probe failing on a*-rocm720-*tag. A fullgh workflow run ... --ref mainthen covers build plus both GPUs.Notes for reviewers
rocm724stages, nightly workflow, release-matrix entry, and torch Triton-pin patch. [AMD] [Docker] Upgrade Python 3.12 + torch 2.11 + triton 3.7 in ROCm 7.2.4 #30984 landed all four, so only the verification remains.Measured on hardware
Dispatched against a branch carrying this job plus #35390's probe, targeting today's published image (run, 4.5 minutes end to end on
linux-mi35x-gpu-1):publishandpush_local_registryskipped, oneverify_profiling (gfx950-rocm724)leg, artifact download skipped becauseprobe_imagewas set — the gating behaved as intended.graph replay: 448/512→ step outcomefailure, job still green (continue-on-error), and the summary records it as**Image default** (failure).graph replay: 512/512→ PASS.--print-ld-preloadinside the image produced/opt/rocm/lib/libamdhip64.so.7.2.70204:/opt/rocm/lib/libroctracer64.so.4.1.70204.workflow_dispatchruns the definition from the selected ref, so this is exactly what the job will do once merged.Checklist
Review and Merge Process
CI States
Latest PR Test (Base): ✅ Run #32331314126
Latest PR Test (Extra): ❌ Run #32422817619
Latest PR Test (AMD ROCm 7.2): ➖ No AMD PR run found for this commit.