Migrate to CTK13 as the default for Linux. - #12384
Conversation
There was a problem hiding this comment.
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-cu13and adjust variant tooling/scripts accordingly. - Reshape CI to build/audit/test CUDA 12 as
xgboost-cu12and CUDA 13 as the defaultxgboostartifact, 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.
RAMitchell
left a comment
There was a problem hiding this comment.
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.
|
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 |
let me do a test to see what actually happens. |
Installing a new
Old
I will add it to document, just to be complete. |
devops: dmlc/xgboost-devops#97
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