ci: Add nixl ep to new dl ci pipeline - #1802
Merged
itayalroy merged 8 commits intoJun 29, 2026
Merged
Conversation
|
👋 Hi lishapira! Thank you for contributing to ai-dynamo/nixl. Your PR reviewers will review your contribution then trigger the CI to test your changes. 🚀 |
…cluster Integrates nixl_ep elastic tests into CI by adding elastic coverage to a new nixl-ci-dl-gpu-ep Jenkins pipeline. Changes: CI: Create new test-dl-ep-matrix.yaml. Build: Enable nixl_ep builds from CI, install/copy DOCA GPUNetIO headers, skip nixl_ep when UCX GPU Device API is unavailable, and use an EP-local buildtype=custom override to avoid CUDA -G/nvlink register-count failures. test_ep.sh: EP CI script that runs elastic.py on 4 GPUs with no_expansion.json and expansion_fault_contraction.json to exercise nixl_ep elastic scale-up/scale-down. Test nvlink and rdma flows. elastic.py: Add phase-local failure validation behind --validate-phase-failures and change failure log wording. Declare nixl_ep.topk_idx_t in the meta-dispatcher TYPE_CHECKING block so mypy can see the runtime-exported attribute.
Give the EP CI job its own dedicated base + build_helper images, separate from the nixl-ci-dl-gpu job. Renamed in test-dl-ep-matrix.yaml: - nixl-ci-dl-gpu-base-... -> nixl-ci-dl-gpu-ep-base-... - build_helper_dl -> build_helper_dl_ep This isolates EP-only base-image changes (e.g. the DOCA GPUNetIO header staging added in this commit) from the existing DL pipeline; the two artifactory images are byte-identical today but can diverge later without affecting nixl-ci-dl-gpu. Remove EP-specific DOCA block in build.sh: 1. Delete duplicated DOCA install (exists in the base-image bootstrap). 2. Move DOCA header-copy into the base-image bootstrap, adjacent to the DOCA install, so PR builds inherit the staged headers for free. Bump CI_IMAGE_TAG to 20260622-2 in all five matrices so the base image rebuilds with the new bootstrap.
lishapira
force-pushed
the
add_nixl_ep_to_new_dl_ci_pipeline
branch
from
June 22, 2026 13:50
e23cc3b to
aa664a1
Compare
The new nixl-ci-dl-gpu-ep job runs test_ep.sh standalone, without the
test_python.sh step that the old in-tree EP flow relied on. As a result
`import nixl_ep` failed with ModuleNotFoundError because neither the
dispatcher (nixl_ep/__init__.py) nor the compiled backend (nixl_ep_cu13)
was reachable from the slurm container's Python:
1. The PR image's meson build installs nixl_ep_cu13 under
${INSTALL_DIR}/lib/python3/dist-packages, which is not on Python's
default sys.path. Add that directory to PYTHONPATH so the dispatcher
can importlib.import_module("nixl_ep_cu13") at runtime.
2. The PR image stages the nixl meta wheel in dist/ but never pip
installs it, so the nixl_ep dispatcher package is not on sys.path.
pip install dist/nixl-*none-any.whl mirrors test_python.sh and makes
`import nixl_ep` resolve via the dispatcher.
Other test_python.sh pre-test steps (tomlutil + pip install ., pytest /
zmq deps, start_etcd_server) are intentionally skipped: the PR image
already built nixl_ep_cu13, and elastic.py uses a local TCP rank_server
plus torch TCPStore rather than pytest or etcd.
* test_ep.sh: change elastic test arguments; drop UCX_RNDV_THRESH=inf * examples/device/ep/meson.build: Replace ['buildtype=custom', 'optimization=3'] with ['buildtype=release'] so the debug override matches the release build flag bundle; Drop the ucx_gpu_device_api_available skip.
Contributor
Author
|
/ok to test 92cccb7 |
Contributor
Author
|
/build |
Contributor
|
/ok to test 92cccb7 |
NirWolfer
previously approved these changes
Jun 24, 2026
Contributor
|
/ok to test 92cccb7 |
Contributor
|
Looks good to me, i also see that the latest run of this pipeline passed: https://nbuprod.blsm.nvidia.com/nbu-swx-nixl-main/job/nixl-ci-dl-gpu-ep/3/ I will update the dispatcher pipeline once this is merged |
…t-debug * test_ep.sh: drop the stale `kill -9 $ETCD_PID`; start_etcd_server is intentionally not invoked here. * build.sh: replace silent `|| true` on the DOCA GPUNetIO cp with an if/else that prints a failure message to stderr, and drop `2>/dev/null` so any cp/xargs error message reaches the log. * examples/device/ep/meson.build: gate `enable_fast_debug` on the EP-effective buildtype. CI (--buildtype=debug forces EP to release) now drops ENABLE_FAST_DEBUG, using NUM_CPU_TIMEOUT_SECS=100. * .ci/jenkins/lib/*-matrix.yaml: bump CI_IMAGE_TAG to 20260624-1.
lishapira
force-pushed
the
add_nixl_ep_to_new_dl_ci_pipeline
branch
from
June 24, 2026 13:15
a6b8819 to
d8f44f3
Compare
Contributor
Author
|
/build |
Contributor
|
/ok to test d8f44f3 |
NirWolfer
previously approved these changes
Jun 24, 2026
Contributor
|
All looks good, note that under the partition so far, we encountered an error on Currently there are 2 more attempts running to see if there are any other issues on that partition |
… fast-debug override
* test_ep.sh: only run the --disable-ll-nvlink (RDMA) elastic tests when
all four CX-7 NICs (mlx5_0..mlx5_3) report PORT_ACTIVE.
* test_ep.sh: use --timeout-ms 10000 for fault tolerance tests to make
detection time shorter.
* examples/device/ep/meson.build: revert the ep_effective_buildtype derivation introduced in the previous commit and restore the original enable_fast_debug = get_option('buildtype') != 'release'.
Contributor
Author
|
/ok to test ba54abf |
Contributor
Author
|
/build |
lishapira
marked this pull request as ready for review
June 25, 2026 09:00
itayalroy
enabled auto-merge (squash)
June 28, 2026 10:15
dpressle
approved these changes
Jun 28, 2026
ofirfarjun7
reviewed
Jun 28, 2026
ofirfarjun7
approved these changes
Jun 28, 2026
roiedanino
approved these changes
Jun 29, 2026
Alexey-Rivkin
added a commit
to Alexey-Rivkin/nixl
that referenced
this pull request
Jun 30, 2026
The nixl-ci-build-container nightly (nixl target, --build-type debug) fails at the EP device link: under -rdc=true, nixlPut compiles to ~215 registers and exceeds the EP kernels' __launch_bounds__ budget, so nvlink errors. ai-dynamo#1802 tried to dodge this by overriding the EP target to buildtype=release in a global debug build, but a per-target override of the composite `buildtype` is a silent no-op in meson - the target kept the global debug settings (optimization 0, -G), which disables --register-usage-level and inflates nixlPut's register count. Override the primitive options (optimization=3, debug=false) instead, which meson does apply per-target. This drops -G and optimizes the EP code so it links, while keeping -g for host-side debug symbols - the release-equivalent build ai-dynamo#1802 intended. Also pass --torch-versions in the EP wheel step of contrib/Dockerfile. ai-dynamo#1775 made --torch-versions mandatory with --build-nixl-ep and updated Dockerfile.manylinux, but left contrib/Dockerfile calling --build-nixl-ep alone - so every EP container build has errored out at the wheel step since. Mirror the manylinux default (WHL_TORCH_VERSIONS=2.11,2.12,2.13) so the build can complete.
Alexey-Rivkin
added a commit
to Alexey-Rivkin/nixl
that referenced
this pull request
Jun 30, 2026
The nixl-ci-build-container nightly (nixl target, --build-type debug) fails at the EP device link: under -rdc=true, nixlPut compiles to ~215 registers and exceeds the EP kernels' __launch_bounds__ budget, so nvlink errors. ai-dynamo#1802 tried to dodge this by overriding the EP target to buildtype=release in a global debug build, but a per-target override of the composite `buildtype` is a silent no-op in meson - the target kept the global debug settings (optimization 0, -G), which disables --register-usage-level and inflates nixlPut's register count. Override the primitive options (optimization=3, debug=false) instead, which meson does apply per-target. This drops -G and optimizes the EP code so it links, while keeping -g for host-side debug symbols - the release-equivalent build ai-dynamo#1802 intended.
Alexey-Rivkin
added a commit
to Alexey-Rivkin/nixl
that referenced
this pull request
Jun 30, 2026
The nixl-ci-build-container nightly (nixl target, --build-type debug) fails at the EP device link: under -rdc=true, nixlPut compiles to ~215 registers and exceeds the EP kernels' __launch_bounds__ budget, so nvlink errors. ai-dynamo#1802 tried to dodge this by overriding the EP target to buildtype=release in a global debug build, but a per-target override of the composite `buildtype` is a silent no-op in meson - the target kept the global debug settings (optimization 0, -G), which disables --register-usage-level and inflates nixlPut's register count. Override the primitive options (optimization=3, debug=false) instead, which meson does apply per-target. This drops -G and optimizes the EP code so it links, while keeping -g for host-side debug symbols - the release-equivalent build ai-dynamo#1802 intended.
ovidiusm
pushed a commit
that referenced
this pull request
Jul 1, 2026
…and set explicit EP meson overrides) (#1866) Fixes for nixl-ci-build-container flow ## What? 1. contrib/Dockerfile: add a new WHL_TORCH_VERSIONS build arg (default 2.11,2.12,2.13, mirroring Dockerfile.manylinux) and forward it to contrib/build-wheel.sh via --torch-versions when BUILD_NIXL_EP=true. 2. examples/device/ep/meson.build: extend the EP target's override_options from ['buildtype=release'] to ['buildtype=release', 'optimization=3', 'debug=false']. ## Why? After #1802 + #1775 landed, nixl-ci-build-container (debug, BUILD_NIXL_EP=true) has been failing in two distinct places: 1. Wheel step failure: #1775 added --torch-versions support to contrib/build-wheel.sh and updated Dockerfile.manylinux, but contrib/Dockerfile was still calling --build-nixl-ep alone. Every EP container build errored at the wheel step with --build-nixl-ep requires --torch-versions. 2. EP nvcc compile failure: #1802 sets nixl_ep target with override_options = ['buildtype=release'] so a global --buildtype=debug doesn't drop -G onto the EP nvcc line. In practice --device-debug still reached the EP .cu compiles on nixl-ci-build-containe compilation path. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added support for configuring which Torch versions are included when building the wheel, with a sensible default set. * **Bug Fixes** * Improved EP builds in debug environments by forcing release-style compilation settings, helping avoid debug flags affecting CUDA compilation. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
nv-nmailhot
pushed a commit
that referenced
this pull request
Jul 1, 2026
…and set explicit EP meson overrides) (#1866) (#1872) Cherry pick of #1866 Fixes for nixl-ci-build-container flow 1. contrib/Dockerfile: add a new WHL_TORCH_VERSIONS build arg (default 2.11,2.12,2.13, mirroring Dockerfile.manylinux) and forward it to contrib/build-wheel.sh via --torch-versions when BUILD_NIXL_EP=true. 2. examples/device/ep/meson.build: extend the EP target's override_options from ['buildtype=release'] to ['buildtype=release', 'optimization=3', 'debug=false']. After #1802 + #1775 landed, nixl-ci-build-container (debug, BUILD_NIXL_EP=true) has been failing in two distinct places: 1. Wheel step failure: #1775 added --torch-versions support to contrib/build-wheel.sh and updated Dockerfile.manylinux, but contrib/Dockerfile was still calling --build-nixl-ep alone. Every EP container build errored at the wheel step with --build-nixl-ep requires --torch-versions. 2. EP nvcc compile failure: #1802 sets nixl_ep target with override_options = ['buildtype=release'] so a global --buildtype=debug doesn't drop -G onto the EP nvcc line. In practice --device-debug still reached the EP .cu compiles on nixl-ci-build-containe compilation path. Co-authored-by: lishapira <lishapira@nvidia.com>
This was referenced Jul 1, 2026
This was referenced Jul 9, 2026
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.
Add nixl-ci-dl-gpu-ep job for nixl_ep elastic tests on dlcluster.
Integrates nixl_ep elastic tests into CI by adding elastic coverage to a
new nixl-ci-dl-gpu-ep Jenkins pipeline.
Changes:
and expansion_fault_contraction.json to exercise nixl_ep elastic
scale-up/scale-down. Test nvlink and rdma flows. The rdma flow only runs
when all four CX-7 NICs (mlx5_0..mlx5_3) report PORT_ACTIVE.
and change failure log wording.
can see the runtime-exported attribute.
Summary by CodeRabbit
--validate-phase-failuresfor strict per-phase rank-failure validation.