Skip to content

AZP: UCXX integration - tests + builds - #11473

Draft
Alexey-Rivkin wants to merge 7 commits into
openucx:masterfrom
Alexey-Rivkin:ucxx-azure-tests
Draft

AZP: UCXX integration - tests + builds#11473
Alexey-Rivkin wants to merge 7 commits into
openucx:masterfrom
Alexey-Rivkin:ucxx-azure-tests

Conversation

@Alexey-Rivkin

@Alexey-Rivkin Alexey-Rivkin commented May 20, 2026

Copy link
Copy Markdown
Contributor

What?

Add UCXX_build + UCXX_tests stages to the UCX PR pipeline. Each UCX PR builds UCXX conda packages, libucxx/ucxx wheels, and docs from rapidsai/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 wrapping rapidsai/ci-conda and rapidsai/ci-wheel. Matrix: CUDA 12 + 13 × x86_64 + aarch64.

@Alexey-Rivkin Alexey-Rivkin changed the title AZP: add UCXX_tests stage to PR pipeline (Phase 1 plumbing) AZP: add UCXX_tests stage to PR pipeline (Phase #1) May 20, 2026
@Alexey-Rivkin
Alexey-Rivkin force-pushed the ucxx-azure-tests branch 17 times, most recently from 05531f8 to 1def0bd Compare May 24, 2026 15:24
@Alexey-Rivkin
Alexey-Rivkin force-pushed the ucxx-azure-tests branch 3 times, most recently from 1a79d8a to dec2673 Compare May 24, 2026 19:25
@Alexey-Rivkin Alexey-Rivkin changed the title AZP: add UCXX_tests stage to PR pipeline (Phase #1) AZP: UCXX integration - tests + builds May 24, 2026
@Alexey-Rivkin
Alexey-Rivkin force-pushed the ucxx-azure-tests branch 7 times, most recently from 3b30b46 to e78b89e Compare May 25, 2026 03:24
@Alexey-Rivkin
Alexey-Rivkin marked this pull request as ready for review June 2, 2026 16:30
@Alexey-Rivkin
Alexey-Rivkin force-pushed the ucxx-azure-tests branch 4 times, most recently from 0a45412 to 24623e9 Compare June 2, 2026 21:00
# 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

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

c668a97
Thanks!

Comment thread buildlib/tools/build_ucxx.sh Outdated
Comment on lines +82 to +83
# Upstream ucxx header uses usleep() but omits <unistd.h>; undeclared on
# newer gcc. Affects all C++ phases.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

The fix rapidsai/ucxx#674 has been merged on main. If you switch to building main this should not be necessary anymore.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Will there be a new tag soon?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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.).

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

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

Comment thread buildlib/tools/test_ucxx.sh Outdated
Comment on lines +52 to +53
# Upstream ucxx examples header uses usleep() but omits <unistd.h>;
# undeclared on newer gcc. Same patch as build_ucxx.sh.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Ditto.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Ditto

Comment thread buildlib/azure-pipelines-pr.yml Outdated
type: github
name: rapidsai/ucxx
endpoint: Mellanox-lab
ref: 33deb0b581b78027730e8ef86ed32efbb22d0dd8

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

This seems to pin to a specific commit, is this intended?

Comment thread buildlib/pr/main.yml Outdated
- { 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' }

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

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?

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

yeah, we'll have to keep this updated during the transtion. We can track this in rapids build-engineering

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Bumped the UCXX ref to current main and build images to CUDA 13.3

dpressle
dpressle previously approved these changes Jul 5, 2026
- checkout: ucxx
path: ucxx
retryCountOnTaskFailure: 5
- bash: bash $(UCX_DIR)/buildlib/tools/test_ucxx.sh build

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

[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.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

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 }}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

[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.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Now all UCXX jobs run with continueOnError: true, so failures surface as warnings and never block the PR.

Comment thread buildlib/tools/test_ucxx.sh Outdated
# 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; }

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

[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.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

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.

Comment thread buildlib/tools/build_ucxx.sh Outdated
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.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

[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.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

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.

@Alexey-Rivkin
Alexey-Rivkin force-pushed the ucxx-azure-tests branch 2 times, most recently from 55b0c99 to edc2ad3 Compare July 22, 2026 17:38
@gleon99

gleon99 commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

@Alexey-Rivkin ready for re-review?

@Alexey-Rivkin

Copy link
Copy Markdown
Contributor Author

@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.

@Alexey-Rivkin
Alexey-Rivkin marked this pull request as draft July 23, 2026 08:50
@Alexey-Rivkin
Alexey-Rivkin force-pushed the ucxx-azure-tests branch 3 times, most recently from f226d1d to a714b3b Compare July 23, 2026 16:01
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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

WIP-DNM Work in progress / Do not review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants