[ROCm][CI] Restore ROCm GPU CI: switch to the MI350 runner label - #168
Open
aryaman-gupta wants to merge 15 commits into
Open
[ROCm][CI] Restore ROCm GPU CI: switch to the MI350 runner label#168aryaman-gupta wants to merge 15 commits into
aryaman-gupta wants to merge 15 commits into
Conversation
…i350 The linux.rocm.gpu.gfx942.1 label is no longer served: the GPU test jobs are created, queue indefinitely and are cancelled without running a single step, so ROCm has had no GPU test coverage for some time. The build jobs are unaffected and keep passing, which is why this went unnoticed. Point the three ROCm GPU jobs at linux.rocm.gpu.ecosystem.mi350.1, which is served. ROCm versions are left alone. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
__configure_fbgemm_gpu_build_rocm gates gfx950 on
`[[ ${rocm_version_arr[0]} -ge 7 ]]`, but rocm_version_arr is never populated:
its only setter, __fetch_rocm_version_array in utils_base.bash, has no callers.
The expansion is always empty, so the test is false and gfx950 is silently
dropped from every OSS ROCm build.
Without this the MI350 runner is useless: the wheel carries no gfx950 code
object, so the first kernel launch segfaults inside hipLaunchKernel before any
test can run. Derive the version parts from BUILD_ROCM_VERSION, which both
ROCm CI workflows already set from the build matrix.
Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
Two tests fail on ROCm but still pass on CUDA, so they are skipped conditionally rather than disabled outright: - nbit_forward_test test_nbit_forward_nan_zero_fill: the two INT4 D=160 subcases leave NaNs in the output. Skipped per-subcase, so the three larger shapes keep running. - batched_unary_embeddings_test test_gpu: the permute sub-test faults with a GPU memory access violation. Both are tracked and have fixes in review; the skips are meant to be lifted as those land. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
The test fails on the MI350 runner: the forward output of the ROCm fallback kernel does not match the reference for fp32 weights with a bf16 output. It is also intermittent - the inputs come from unseeded torch.randn, so it reproduces in roughly half of runs. The test is already @skipIfNotRocm, so an unconditional unittest.skip is the narrowest way to disable it. Kept in its own commit, and as a decorator rather than a deletion, so re-enabling it with the kernel fix is a one-line revert. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
The test fails on the MI350 runner: the device decodes NFP8 weights with the arch-native OCP encoding while Python labels the tensor fnuz, so the two disagree by one exponent bias and the comparison is off by a factor of two. Like the Adagrad fallback test, it is already @skipIfNotRocm, so an unconditional unittest.skip is the narrowest way to disable it. Own commit, decorator rather than deletion, so restoring it with the dtype fix is a one-line revert. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
aryaman-gupta
force-pushed
the
aryaman/rocm-ci-mi350-firefight
branch
from
August 19, 2026 16:35
61f4a3a to
b842f18
Compare
quantize_fp8_per_tensor with stochastic_rounding=True aborts the test process on gfx950: Cannot find Symbol with name: _ZN10fbgemm_gpu12scaleMatrix2ILb1E19__hip_fp8_e4m3_fnuzf12hip_bfloat16 quantize.hip aliases __nv_fp8_e4m3 to the FNUZ or the OCP type based on HIP_FP8_TYPE_OCP, which is set per device compile pass. The host pass requests the FNUZ instantiation while the gfx950 device pass emits the OCP one, so the kernel is missing at launch. The abort takes down the whole pytest process, so it is the only genai test failing on the MI350 runner: with this skip the file is 1 passed, 39 skipped. Gated on FNUZ support rather than on ROCm so gfx942 keeps the coverage. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
The test hangs on the MI350 runner: cudaMemAdviseSetAccessedBy never returns, and since this is the first test in the file it takes out the whole job on the 90 minute timeout, along with the six remaining tests here and every test file queued behind it. It is not reproducible on bare metal, where the same derandomized hypothesis examples pass in 10 seconds, so the failing shape is unknown and the test is skipped outright rather than reparametrized. Skipped on ROCm only, so CUDA keeps the coverage. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
test_cudaMemAdvise was skipped in the previous commit, but the file then hangs again on test_uvm_slice and takes out the 90 minute job timeout the same way, so five of the seven tests here still never report and the 44 test files queued behind this one still never run. Rather than add a skip per test across successive CI rounds, exclude the file. The hangs look environmental - they do not reproduce on bare metal MI350X, only on the VF (SR-IOV) runner - so the remaining two tests are equally suspect. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
…nner Managed memory allocation and free are substantially slower on this runner than on gfx942. The affected test files do not fail, but they run long enough to exhaust the 90 minute job timeout, which prevents every later test file from running at all. tbe/cache/uvm_test.py does not complete tbe/cache/copy_test.py 598s, vs 9s on gfx942 tbe/training/store_prefetched_tensors_test.py not reached before the timeout sparse/index_select_test.py 816s, vs 16s on gfx942 Other test files that use UVM run in about 10 seconds and remain enabled. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
test_cudaMemAdvise was described as hanging on cudaMemAdviseSetAccessedBy. It does not hang, and that call is not the cause: managed memory allocation and free are substantially slower on this runner, and the test allocates enough of it to exceed the job timeout. The nan_zero_fill skip additionally described which other subcases still run, which restates the surrounding code rather than the failure. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
This hits the same intermittent forward-tolerance failure already skipped for
test_backward_adagrad_rocm_fallback_kernel:
AssertionError: Forward output mismatch: VBE=False pooling_mode=0,
weight_precision=fp32 output_dtype=bf16
Both go through execute_backward_adagrad, which derives rtol from
weights_precision alone (backward_adagrad_common.py:395), so fp32 weights impose
an fp32 tolerance on a bf16 output. It reproduces in roughly half of runs, which
is why one compiler passed it and the other did not.
#165 fixes the tolerance itself; this skip is a stopgap and should be
reverted with it.
Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
All 32 tests in this class fail in an open-source build, on three missing
attributes:
masked_index_select registered in ssd_split_table_batched_embeddings.cpp,
but those sources are not referenced by any CMake
file, so they are never compiled here
_res_hbm_dims_equal no definition anywhere in the source tree
_res_compacted_rows no definition anywhere in the source tree
None of this is platform specific, so it fails the same way on CUDA. It is not
visible there yet only because that job currently stops at the first test file.
Guarded on open_source rather than skipped for ROCm, matching the existing
convention (gather_scatter_test.py:54, quantize_test.py:237), so the tests keep
running where the implementation exists.
Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
The decorator was innermost, below @settings, which raises SkipTest inside Hypothesis's per-example execution rather than before the test starts. The same helper is applied above @given on test_cudaMemAdvise, and that arrangement is confirmed to report SKIPPED on this runner, so use it here too. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
Upstream landed the same skip in 4ad9458 (pytorch#6232), using the running_in_oss helper, alongside the packaging fix that makes fbgemm_gpu.bench.bench_utils importable from the wheel. Two decorators on the same class conflict, which blocks the merge ref and therefore CI entirely. Drop ours in favour of upstream's. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
fp32_pmMEAN and fp32_pmNONE are exposed to the same forward-tolerance failure as fp32_pmSUM. All three take weights_precision=SparseType.FP32 and draw output_dtype from the shared strategy, which includes BF16 on GPU (backward_adagrad_common.py:84), and all three reach the same assertion at backward_adagrad_common.py:395 where rtol is derived from weights_precision alone. Only fp32_pmSUM had actually failed, but the failure is intermittent, so the other two are equally exposed and simply have not drawn a losing combination yet. The CPU variants are unaffected: test_st_cpu restricts output_dtype to FP32 and FP16. #165 fixes the tolerance; all three skips should be reverted with it. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
The
linux.rocm.gpu.gfx942.1runner label is no longer served: the ROCm GPU test jobs queue and are cancelled without running a single step, so there is currently no ROCm GPU test coverage. The build jobs still pass, which is why this went unnoticed.What
linux.rocm.gpu.ecosystem.mi350.1.This is a firefighting change to restore the signal. It deliberately does not try to fix the underlying test failures — it disables them so the pipeline can go green, and each is tracked separately with a fix in progress.