AZP: UCXX integration - tests + builds - #11473
Conversation
05531f8 to
1def0bd
Compare
1a79d8a to
dec2673
Compare
3b30b46 to
e78b89e
Compare
0a45412 to
24623e9
Compare
| # Azure wrapper around rapidsai/ci-conda: chmod /opt/conda so the non-root UID Azure runs | ||
| # steps as can use conda/python (rapidsai owns it as root); + adds gdb for stack capture. | ||
|
|
||
| ARG BASE_IMAGE=rapidsai/ci-conda:26.06-latest |
There was a problem hiding this comment.
Since you've started, RAPIDS 26.06 was released and all ToT development is now happening for 26.08, including the images we depend on. I suggest targeting 26.08 throughout this PR as well.
| # Upstream ucxx header uses usleep() but omits <unistd.h>; undeclared on | ||
| # newer gcc. Affects all C++ phases. |
There was a problem hiding this comment.
The fix rapidsai/ucxx#674 has been merged on main. If you switch to building main this should not be necessary anymore.
There was a problem hiding this comment.
Will there be a new tag soon?
There was a problem hiding this comment.
Not too soon, this is why I'd prefer to target main, but Yossi has a preference for stability at this time (understandable) so we may have to wait. The next tag should occur around July 16. Maybe instead of relying on specific tags we can test and target specific commits instead, such that we can do controlled upgrades? I fear keeping an older tag may diverge from RAPIDS CI updates, as you have seen there are several aspects that need to work in tandem (CI images, CI scripts in the project such as ucxx/ci, etc.).
There was a problem hiding this comment.
Thanks for the tip! I went ahead and pinned it to the latest main SHA for now. That lets me drop both patches. Going forward, we can update the SHA or switch to a tag in a controlled manner as RAPIDS advances.
ac9f7b1
| # Upstream ucxx examples header uses usleep() but omits <unistd.h>; | ||
| # undeclared on newer gcc. Same patch as build_ucxx.sh. |
ac9f7b1 to
3cb3bed
Compare
| type: github | ||
| name: rapidsai/ucxx | ||
| endpoint: Mellanox-lab | ||
| ref: 33deb0b581b78027730e8ef86ed32efbb22d0dd8 |
There was a problem hiding this comment.
This seems to pin to a specific commit, is this intended?
| - { name: x86_64_cuda12_py311, container: ucxx_rapidsai_ci_wheel_cuda12_gpu, libucxx_slice: x86_64_cuda12_py311, ucxx_slice: x86_64_cuda12_py311, | ||
| demands: ucx_gpu, rapids_cuda_version: '12.9.1', rapids_py_version: '3.11' } | ||
| - { name: x86_64_cuda13_py311, container: ucxx_rapidsai_ci_wheel_cuda13_gpu, libucxx_slice: x86_64_cuda13_py311, ucxx_slice: x86_64_cuda13_py311, | ||
| demands: ucx_gpu, rapids_cuda_version: '13.2.0', rapids_py_version: '3.11' } |
There was a problem hiding this comment.
RAPIDS has since bumped to CUDA 13.3 rapidsai/ucxx#679. I'm not sure what's the better way to keep this in sync. I suppose we'll need to have our ops team track UCXX CI when make such changes, at least while everything moves to the ucx org (i.e., when the release process is fully managed here).
@gforsyth thoughts?
There was a problem hiding this comment.
yeah, we'll have to keep this updated during the transtion. We can track this in rapids build-engineering
There was a problem hiding this comment.
Bumped the UCXX ref to current main and build images to CUDA 13.3
6e77ce4 to
c8138b2
Compare
| - checkout: ucxx | ||
| path: ucxx | ||
| retryCountOnTaskFailure: 5 | ||
| - bash: bash $(UCX_DIR)/buildlib/tools/test_ucxx.sh build |
There was a problem hiding this comment.
[P1] Tests do not consume the UCX PR
This invokes UCXX's standard build scripts, but neither this job nor test_ucxx.sh builds or exports the checked-out UCX tree. The pinned UCXX recipes instead install UCX 1.18/1.19 packages, while this PR targets UCX 1.22. As a result, these jobs can pass without exercising any code from the UCX PR.
There was a problem hiding this comment.
Crucial point!
Restructured the UCXX CI to build UCX from the PR checkout once per arch/CUDA pair in a dedicated stage. The UCXX build and test stages then reuse the generated artifacts. Verified that logs now show the correct UCX ver at every stage.
| UCXX_DIR: $(Agent.BuildDirectory)/ucxx | ||
| jobs: | ||
| - ${{ each slice in parameters.slices }}: | ||
| - job: ucxx_tests_${{ slice.name }} |
There was a problem hiding this comment.
[P1] UCXX failures are not advisory
These are ordinary jobs with continueOnError defaulting to false, so a UCXX failure contributes a failed result to the main UCX PR pipeline. This contradicts the agreed requirement that UCXX failures never block UCX PRs.
There was a problem hiding this comment.
Now all UCXX jobs run with continueOnError: true, so failures surface as warnings and never block the PR.
| # Guard catches upstream rewording (else the skip silently disappears). | ||
| sed -i "s#--runslow#--runslow -k 'not test_client_shutdown'#" ci/run_python.sh | ||
| grep -q "not test_client_shutdown" ci/run_python.sh \ | ||
| || { echo "ERROR: test_client_shutdown skip did not apply to ci/run_python.sh" >&2; exit 1; } |
There was a problem hiding this comment.
[P2] Shutdown coverage is silently disabled
This rewrites the pinned UCXX test runner to exclude every test_client_shutdown variant from both conda and wheel testing. That can hide regressions this integration is intended to detect.
There was a problem hiding this comment.
Those tests were very unstable, so I preffered not to introduce noise.
Now that all UCXX jobs run with continueOnError, we can safely run any tests - failures will be reported as warnings without blocking the PR.
| printf '#!/bin/bash\necho "%s"\n' "$RAPIDS_BLD_OUTPUT_DIR" > "$HOME/.local/bin/$tool" | ||
| chmod +x "$HOME/.local/bin/$tool" | ||
| done | ||
| # Docs phase: override shims to point at the staged conda channels. |
There was a problem hiding this comment.
[P2] C++ docs channel shim is unused
The pinned UCXX build_docs.sh calls rapids-download-from-github for both its C++ and Python artifacts, so this rapids-download-conda-from-github shim is never used and both lookups resolve to PYTHON_CHANNEL_DIR.
There was a problem hiding this comment.
Good catch, fixed.
The shim now overrides rapids-download-from-github and picks the channel by artifact name.
Also dropped the rapids-download-conda-from-github and rapids-download-wheels-from-github shims as unused.
55b0c99 to
edc2ad3
Compare
|
@Alexey-Rivkin ready for re-review? |
Not yet, sorry. We're currently hitting an infra limitation: several nodes are running out of disk space due to the RAPIDS images. I need to sort that out first. |
f226d1d to
a714b3b
Compare
The upstream rapidsai images are not writable by the non-root UID Azure runs steps as, and carry no gdb for crash stacks.
Run rapidsai/ucxx CI against the PR's UCX rather than released ucx packages, so the suites exercise the submitted UCP/UCS code. UCXX jobs are advisory and never block the UCX PR.
Every UCXX job rebuilt the same UCX, costing ~4 minutes each. Build it once per arch/CUDA pair and share it as an artifact.
The wheel test env downloads ~2 GB of cuda/rapids wheels per run.
UCXX needs nothing from Static_check, so its ~26 min just idled the UCXX jobs.
The pipeline runs these as `bash <path>`, which ignores the shebang, so the fail-loud guards were silently discarded.
The env is solved fresh each run; conda-forge moved to gcc 15/16, which rejects ucx_perftest's OpenMP 'master' under -Werror.
What?
Add
UCXX_build+UCXX_testsstages to the UCX PR pipeline. Each UCX PR builds UCXX conda packages,libucxx/ucxxwheels, and docs fromrapidsai/ucxx, and runs the C++ (CPU+GPU), Python (GPU), and wheel tests.Why?
Move UCXX CI from RAPIDS GitHub Actions onto UCX's Azure pipeline (mirrors upstream
pr.yaml).How?
Two runner scripts in
buildlib/tools/(build_ucxx.sh,test_ucxx.sh) + container images wrappingrapidsai/ci-condaandrapidsai/ci-wheel. Matrix: CUDA 12 + 13 × x86_64 + aarch64.