Skip to content

Migrate to CTK13 as the default for Linux. - #12384

Merged
trivialfis merged 28 commits into
dmlc:masterfrom
trivialfis:ctk-13
Jul 31, 2026
Merged

Migrate to CTK13 as the default for Linux.#12384
trivialfis merged 28 commits into
dmlc:masterfrom
trivialfis:ctk-13

Conversation

@trivialfis

@trivialfis trivialfis commented Jul 30, 2026

Copy link
Copy Markdown
Member

devops: dmlc/xgboost-devops#97

  • Revert tag.

Notes

All GPU death tests are dropped. With CTK 13.3, they throw a device assert exception instead of aborting the process. However, even after calling get device error, later tests still fail due to prior assertion errors. The death tests are not worth the trouble.

We will need another update when newer clang is ready.

close #12348
close #12372

Changes

  • Remove federated learning tests.
  • Remove federated learning dependencies.
  • Fix clang tidy errors.
  • Update miniforge.
  • Update NCCL.
  • Cleanup unused container image definitions and scripts.
  • Remove span death test.
  • Fix float128 strided array (slice).
  • Update rapids plugin for JVM packages.
  • Disable modin tests due to numpy constraint.

@trivialfis
trivialfis requested a review from Copilot July 30, 2026 04:46
@trivialfis
trivialfis marked this pull request as draft July 30, 2026 04:46

Copilot AI left a comment

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.

Pull request overview

This PR updates XGBoost’s Linux packaging and CI to make CUDA Toolkit 13.x the default for the main xgboost Linux wheels, while treating CUDA 12 as a separate compatibility package (xgboost-cu12). It also updates related release tooling, CI matrices, and documentation to reflect the new default.

Changes:

  • Switch the default Linux wheel NCCL dependency to nvidia-nccl-cu13 and adjust variant tooling/scripts accordingly.
  • Reshape CI to build/audit/test CUDA 12 as xgboost-cu12 and CUDA 13 as the default xgboost artifact, including updating container image repos used by jobs.
  • Update installation + CI documentation to describe CUDA 13 as default and document the CUDA 12 fallback package.

Reviewed changes

Copilot reviewed 18 out of 18 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
python-package/pyproject.toml Default Linux dependency updated to nvidia-nccl-cu13.
ops/script/release_artifacts.py Adjusts sdist stub naming and wheel download list to include xgboost_cu12.
ops/script/change_version.py Sets generated default PyPI variant to require NCCL cu13.
ops/pipeline/test-python-wheel.sh Simplifies env setup to use pre-built conda envs for wheel testing.
ops/pipeline/nightly-test-rmm.sh Switches nightly build image repo to the non-cuda-suffixed default.
ops/pipeline/nightly-test-cccl.sh Switches nightly build image repo to the non-cuda-suffixed default.
ops/pipeline/get-image-tag.sh Updates CI image tag selection (currently pinned to a PR tag).
ops/pipeline/build-variant-wheels.sh Builds variant wheels using CUDA 13 build settings.
ops/pipeline/build-variant-wheels-impl.sh Updates CUDA version bounds for WheelNext variant metadata.
ops/pipeline/build-python-wheels-arm64-impl.sh Removes ARM64 wheel build/test helper script.
ops/pipeline/build-cuda.sh Treats CUDA 13 as default xgboost, and CUDA 12 as xgboost-cu12 variant.
ops/pipeline/build-cpu.sh Removes explicit gRPC prefix path from CPU build configuration.
ops/pipeline/audit-cuda-wheel.sh Renames/validates CUDA variant flag to `cuda
ops/conda_env/linux_cpu_test.yml Removes conda env definition file.
ops/conda_env/aarch64_test.yml Removes conda env definition file.
doc/install.rst Documents CUDA 13 default wheel and CUDA 12 fallback package; removes federated claims for wheels.
doc/contrib/ci.rst Updates documented container build args (but leaves later examples inconsistent).
.github/workflows/main.yml Updates CI matrices and job steps for CUDA 12 vs default CUDA 13, plus RMM-on-CUDA13 path.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread ops/pipeline/get-image-tag.sh Outdated
Comment thread doc/contrib/ci.rst
@trivialfis trivialfis changed the title [WIP] Migrate to CTK13 as the default for Linux. Migrate to CTK13 as the default for Linux. Jul 31, 2026

@RAMitchell RAMitchell left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Our docs still say we support CC 5.0.

We have raised the driver requirement from R525 to theoretically R580 but I think the CI driver is later than that, so we are assuming R580 works.

Codex finding:

[P1] pip install xgboost-cu12 can corrupt an existing xgboost installation
The documented fallback command in [doc/install.rst (line 95)](/home/rorym/xgboost-worktrees/pr-12384/doc/install.rst:95) installs a different distribution that owns the same xgboost/ Python package.
This is especially problematic because today’s xgboost-cu12==3.3.0 is a placeholder depending on xgboost==3.3.0. Upgrading it to the proposed real xgboost-cu12==3.4.0 leaves the old xgboost distribution installed:
xgboost          3.3.0  # stale metadata, owns xgboost/
xgboost-cu12     3.4.0  # also owns xgboost/
nvidia-nccl-cu12
nvidia-nccl-cu13        # may remain through old xgboost
Consequences include overwritten files, uninstalling either distribution deleting the other’s files, and potentially loading the wrong NCCL library. Fresh-install CI does not exercise this.
At minimum, documentation and release notes need an explicit clean switch:
pip uninstall -y xgboost xgboost-cu12
pip install xgboost-cu12
I would also add a CI migration test beginning with xgboost-cu12==3.3.0.
[P1/P2] A normal xgboost upgrade silently raises the GPU-driver floor
The ordinary Linux xgboost wheel changes from CUDA 12 to CUDA 13.3 through [pyproject.toml (line 28)](/home/rorym/xgboost-worktrees/pr-12384/python-package/pyproject.toml:28) and [build-cuda.sh (line 95)](/home/rorym/xgboost-worktrees/pr-12384/ops/pipeline/build-cuda.sh:95). Pip cannot detect the installed NVIDIA driver, so an otherwise successful pip install --upgrade xgboost may leave GPU users unable to run.
NVIDIA’s compatibility table gives:
CUDA 12.x: minimum R525 for minor-version compatibility.
CUDA 13.x: minimum R580.
CUDA 13.3’s corresponding toolkit driver is R610.43.02; operation on R580–R609 relies on minor-version compatibility and should be validated. [NVIDIA CUDA 13.3 release notes](https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/)
The CI matrix tests CUDA 12 and 13 in their native containers, but it does not test the important fallback case: a CUDA 12 wheel on an R525–R579 host, or the CUDA 13.3 wheel on the minimum claimed R580 driver.

@trivialfis

Copy link
Copy Markdown
Member Author

That's a problem with pip, I don't have a good solution. Maybe @chyunsu3 has better insight. As for the CUDA driver, it will raise an incompatible driver error, maybe we can try to catch that and advertise xgboost-cu12. But this is quite fragile since we have two surfaces: DMatrix and booster.

@trivialfis

Copy link
Copy Markdown
Member Author

That's a problem with pip, I don't have a good solution

let me do a test to see what actually happens.

@trivialfis

trivialfis commented Jul 31, 2026

Copy link
Copy Markdown
Member Author

xgboost-cu12 3.4.0 # also owns xgboost/

Installing a new xgboost-cu12 should override the existing xgboost.

nvidia-nccl-cu13 # may remain through old xgboost

Old xgboost package doesn't have nccl-cu13.

pip uninstall -y xgboost xgboost-cu12
pip install xgboost-cu12

I will add it to document, just to be complete.

@trivialfis
trivialfis marked this pull request as ready for review July 31, 2026 14:42
@trivialfis trivialfis closed this Jul 31, 2026
@trivialfis trivialfis reopened this Jul 31, 2026
@trivialfis
trivialfis merged commit e44223b into dmlc:master Jul 31, 2026
171 of 182 checks passed
@trivialfis
trivialfis deleted the ctk-13 branch July 31, 2026 17:38
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.

Bump default CUDA version to 13. [RFC] Disable the federated plugin in the default Python wheel.

4 participants