Skip to content

BUILD: add RAPIDS wrapper-image build tooling - #11633

Draft
Alexey-Rivkin wants to merge 1 commit into
openucx:masterfrom
Alexey-Rivkin:ucxx-rapidsai-image-tooling
Draft

BUILD: add RAPIDS wrapper-image build tooling#11633
Alexey-Rivkin wants to merge 1 commit into
openucx:masterfrom
Alexey-Rivkin:ucxx-rapidsai-image-tooling

Conversation

@Alexey-Rivkin

Copy link
Copy Markdown
Contributor

What?

Adds build tooling + a doc for the UCXX RAPIDS wrapper CI images (buildlib/dockers/): a multi-arch docker buildx bake compose, a one-command build script, and a procedure doc for the RAPIDS version bump.

Why?

Makes rebuilding the wrapper images on a RAPIDS version bump reproducible and documented - one command builds both arches natively and pushes the manifest, instead of a manual per-arch loop.

Notes

  • Builds on AZP: UCXX integration - tests + builds #11473, which adds the wrapped rapidsai-ci-*.Dockerfiles the compose references.
  • Builder-node endpoints + harbor credentials come from the environment - nothing environment-specific is committed.

@Alexey-Rivkin
Alexey-Rivkin force-pushed the ucxx-rapidsai-image-tooling branch 2 times, most recently from 520b5eb to 9be8851 Compare July 26, 2026 15:41
@Alexey-Rivkin Alexey-Rivkin reopened this Jul 27, 2026
@NirWolfer

Copy link
Copy Markdown
Contributor

@pr-test

@svc-nvidia-pr-review

Copy link
Copy Markdown

🤖 Starting review — findings will be posted here when done.

@@ -0,0 +1,44 @@
# Multi-arch (amd64 + arm64) build of the UCXX rapidsai CI wrapper images.
#
# Driven by build-rapidsai-images.sh (sets up a 2-node buildx builder, then

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

build-rapidsai-images.sh doesn't exist — the script added here is rapidsai-images-build.sh. Same on line 6.

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.

Fixed, thanks.

@@ -0,0 +1,94 @@
#!/bin/bash -eE

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Suggested change
#!/bin/bash -eE
#!/bin/bash -eEo pipefail

Missing pipefail: otherwise the docker manifest inspect ... | grep -o at the end (L90-91) can't fail, and the verify step won't catch a missing push.

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.

Fixed, though as set -eE -o pipefail in the body rather than on the shebang: shebang flags are dropped when a script is run as bash <path>.

rapidsai-ci-wheel:${RAPIDS_VER}-cuda12-azp-1 \
rapidsai-ci-wheel:${RAPIDS_VER}-cuda13-azp-1; do
printf '%-42s ' "$img"
docker manifest inspect "$REGISTRY/ucx/$img" 2>/dev/null \

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Verify step doesn't assert multi-arch — the loop just prints the architectures it finds. A manifest pushed with only one arch (the very failure mode the script is designed to prevent, called out in the docs troubleshooting section) won't fail the script. Given the whole point is multi-arch, can we check that both amd64 and arm64 are present and exit non-zero otherwise?

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. It now fails if either amd64 or arm64 is missing.

: "${HARBOR_UCX_USER:?set HARBOR_UCX_USER}" "${HARBOR_UCX_PASSWORD:?set HARBOR_UCX_PASSWORD}"
BUILDER=${BUILDER:-ucx-rapidsai}
REMOTE_CTX=${REMOTE_CTX:-ucx-remote-buildnode}
REGISTRY=${REGISTRY:-harbor.mellanox.com}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

REGISTRY is misleading: it only affects docker login and the final docker manifest inspect; the actual push target is hardcoded in the compose image: fields as harbor.mellanox.com/ucx/.... Setting REGISTRY=other.example.com would log in to the wrong host and then verify a manifest that was pushed to harbor. Either drop the knob or thread it through the compose too.

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.

Fixed - the compose image: fields use ${REGISTRY:-harbor.mellanox.com} and the script exports it, so login, push and verify all follow the same value.

build:
context: .
dockerfile: rapidsai-ci-conda.Dockerfile
platforms:

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Inert platforms: key here (and at L29-31, L40-42) — the script's own comment at L76-77 says bake doesn't honor build.platforms and forces platforms via --set. Leaving platforms: in the compose invites confusion (readers assume it's the source of truth). Maybe drop it, or add a one-line comment marking it as documentation-only.

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.

Right, removed. The header now says the platforms come from the script's --set.


Bump the old `<VER>` to the new one in the only places that reference it:

- `buildlib/dockers/rapidsai-ci-conda.Dockerfile` (`BASE_IMAGE`)

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

This references rapidsai-ci-conda.Dockerfile and rapidsai-ci-wheel.Dockerfile (L82-83), which don't exist in this diff or in the tree. Is this the first of a series, or should those files land here too? If merged alone, the compose + build script won't actually build anything.

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.

Correct - they come with the UCXX CI integration PR. Noted that in the README; this PR is the tooling only.

Add a declarative compose + one-command buildx-bake script to rebuild the
UCXX rapidsai CI wrapper images multi-arch (amd64+arm64) natively, plus a doc
for the RAPIDS version-bump procedure. The compose is the single source for
the RAPIDS base tags - the script derives its preflight from it. Node
endpoints and harbor credentials are supplied via the environment; nothing
environment-specific is committed.
@Alexey-Rivkin
Alexey-Rivkin force-pushed the ucxx-rapidsai-image-tooling branch from 9be8851 to cb1b7a5 Compare August 9, 2026 09:58
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.

3 participants