diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
index 2a1f37b74b15..ce3927fa9497 100644
--- a/.github/workflows/lint.yml
+++ b/.github/workflows/lint.yml
@@ -26,14 +26,14 @@ jobs:
tag-prefix: lint
clang-tidy:
- name: Run clang-tidy
+ name: Run clang-tidy with CUDA 12.9
needs: ci-configure
runs-on:
- runs-on=${{ github.run_id }}
- runner=linux-amd64-cpu
- tag=lint-clang-tidy-clang-cuda
container:
- image: ${{ needs.ci-configure.outputs.docker_registry }}/xgb-ci.gpu_build_rockylinux8:${{ needs.ci-configure.outputs.image_tag }}
+ image: ${{ needs.ci-configure.outputs.docker_registry }}/xgb-ci.gpu_build_cuda12_rockylinux8:${{ needs.ci-configure.outputs.image_tag }}
credentials:
username: ${{ needs.ci-configure.outputs.docker_username }}
password: ${{ needs.ci-configure.outputs.docker_password }}
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 36fe88dddf91..570164038067 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -70,17 +70,16 @@ jobs:
- uses: dmlc/xgboost-devops/actions/sccache@main
with:
cache-key-prefix: ${{ github.job }}-${{ matrix.build_suite }}
- - name: Build and test
- run: bash ops/pipeline/build-cpu.sh ${{ matrix.build_suite }}
- - name: Test federated learning on CPU
+ - name: Build run C++ tests on CPU
if: matrix.variant == 'default'
shell: bash -l {0}
run: |
source activate linux_cpu_test
- conda install scikit-build-core -y
- cd python-package && pip install -e . --no-deps --no-build-isolation && cd -
- timeout 600s pytest -v -s -rxXs --durations=0 tests/test_distributed/test_federated
+ bash ops/pipeline/build-cpu.sh ${{ matrix.build_suite }}
- run: sccache --show-stats
+ - name: Build and test with sanitizer
+ if: matrix.variant == 'sanitizer'
+ run: bash ops/pipeline/build-cpu.sh ${{ matrix.build_suite }}
build-cuda:
name: Build CUDA ${{ matrix.cuda_version }} (${{ matrix.arch }})
@@ -94,27 +93,27 @@ jobs:
fail-fast: false
matrix:
include:
- # CUDA 12
+ # xgboost-cu12
- cuda_version: 12
arch: aarch64
runner: linux-arm64-cpu
- image_repo: xgb-ci.gpu_build_rockylinux8_aarch64
+ image_repo: xgb-ci.gpu_build_cuda12_rockylinux8_aarch64
use_rmm: 0
- cuda_version: 12
arch: x86_64
runner: linux-amd64-cpu
- image_repo: xgb-ci.gpu_build_rockylinux8
+ image_repo: xgb-ci.gpu_build_cuda12_rockylinux8
use_rmm: 0
- # CUDA 13
+ # Default xgboost package (CUDA 13)
- cuda_version: 13
arch: aarch64
runner: linux-arm64-cpu
- image_repo: xgb-ci.gpu_build_cuda13_rockylinux8_aarch64
+ image_repo: xgb-ci.gpu_build_rockylinux8_aarch64
use_rmm: 0
- cuda_version: 13
arch: x86_64
runner: linux-amd64-cpu
- image_repo: xgb-ci.gpu_build_cuda13_rockylinux8
+ image_repo: xgb-ci.gpu_build_rockylinux8
use_rmm: 0
container:
image: ${{ needs.ci-configure.outputs.docker_registry }}/${{ matrix.image_repo }}:${{ needs.ci-configure.outputs.image_tag }}
@@ -142,7 +141,7 @@ jobs:
build/testxgboost python-package/dist/*.whl
build-cuda-clang:
- name: Build CUDA with clang 21.1.8 (x86_64)
+ name: Build CUDA 12.9 with clang 22.1.8 (x86_64)
needs: ci-configure
runs-on:
- runs-on=${{ github.run_id }}
@@ -150,7 +149,7 @@ jobs:
- tag=main-build-cuda-clang
- extras=s3-cache
container:
- image: ${{ needs.ci-configure.outputs.docker_registry }}/xgb-ci.gpu_build_rockylinux8:${{ needs.ci-configure.outputs.image_tag }}
+ image: ${{ needs.ci-configure.outputs.docker_registry }}/xgb-ci.gpu_build_cuda12_rockylinux8:${{ needs.ci-configure.outputs.image_tag }}
credentials:
username: ${{ needs.ci-configure.outputs.docker_username }}
password: ${{ needs.ci-configure.outputs.docker_password }}
@@ -161,8 +160,8 @@ jobs:
submodules: "true"
- uses: dmlc/xgboost-devops/actions/sccache@main
with:
- cache-key-prefix: ${{ github.job }}-clang21-cuda12
- - run: bash ops/pipeline/build-cuda-clang.sh --clang-version 21.1.8
+ cache-key-prefix: ${{ github.job }}-clang22-1-8-cuda12
+ - run: bash ops/pipeline/build-cuda-clang.sh --clang-version 22.1.8
- run: sccache --show-stats
audit-cuda-wheel:
@@ -176,22 +175,22 @@ jobs:
fail-fast: false
matrix:
include:
- # CUDA 12
+ # xgboost-cu12
- cuda_version: 12
- cuda_variant_flag: ""
+ cuda_variant_flag: "--cuda-variant cuda12"
arch: aarch64
runner: linux-arm64-cpu
- cuda_version: 12
- cuda_variant_flag: ""
+ cuda_variant_flag: "--cuda-variant cuda12"
arch: x86_64
runner: linux-amd64-cpu
- # CUDA 13
+ # Default xgboost package (CUDA 13)
- cuda_version: 13
- cuda_variant_flag: "--cuda-variant cuda13"
+ cuda_variant_flag: ""
arch: aarch64
runner: linux-arm64-cpu
- cuda_version: 13
- cuda_variant_flag: "--cuda-variant cuda13"
+ cuda_variant_flag: ""
arch: x86_64
runner: linux-amd64-cpu
container:
@@ -225,7 +224,7 @@ jobs:
python-package/dist/*.whl
build-cuda-with-rmm:
- name: Build CUDA with RMM
+ name: Build CUDA 13 with RMM
needs: ci-configure
runs-on:
- runs-on=${{ github.run_id }}
@@ -243,9 +242,11 @@ jobs:
with:
submodules: "true"
- uses: dmlc/xgboost-devops/actions/sccache@main
+ with:
+ cache-key-prefix: ${{ github.job }}-cuda13
- run: >-
bash ops/pipeline/build-cuda.sh
- --cuda-version 12
+ --cuda-version 13
--use-rmm 1
- run: sccache --show-stats
- name: Stash files
@@ -331,13 +332,13 @@ jobs:
fail-fast: false
matrix:
include:
- # CUDA 12 tests
+ # CUDA 12 artifact tests using the native CUDA 12.9 runtime
# Note: --gpus all provides GPU access; --privileged is not needed for basic GPU tests
- cuda_version: 12
suite: gpu
arch: x86_64
runner: linux-amd64-gpu
- image_repo: xgb-ci.gpu
+ image_repo: xgb-ci.gpu_cuda12
artifact_from: build-cuda12-x86_64
container_options: "--gpus all --privileged"
test_args: ""
@@ -345,44 +346,44 @@ jobs:
suite: gpu
arch: aarch64
runner: linux-arm64-gpu
- image_repo: xgb-ci.gpu_aarch64
+ image_repo: xgb-ci.gpu_cuda12_aarch64
artifact_from: build-cuda12-aarch64
container_options: "--gpus all --privileged"
test_args: ""
- - cuda_version: 12
- suite: gpu-rmm
+ # Default CUDA 13 artifact tests
+ - cuda_version: 13
+ suite: gpu
arch: x86_64
runner: linux-amd64-gpu
image_repo: xgb-ci.gpu
- artifact_from: build-cuda-with-rmm
+ artifact_from: build-cuda13-x86_64
container_options: "--gpus all --privileged"
- test_args: "--use-rmm-pool --gtest_filter=-*DeathTest*"
- - cuda_version: 12
+ test_args: ""
+ - cuda_version: 13
+ suite: gpu
+ arch: aarch64
+ runner: linux-arm64-gpu
+ image_repo: xgb-ci.gpu_aarch64
+ artifact_from: build-cuda13-aarch64
+ container_options: "--gpus all --privileged"
+ test_args: ""
+ - cuda_version: 13
suite: mgpu
arch: x86_64
runner: linux-amd64-mgpu
image_repo: xgb-ci.gpu
- artifact_from: build-cuda12-x86_64
+ artifact_from: build-cuda13-x86_64
# mgpu needs --shm-size for NCCL shared memory communication
container_options: "--gpus all --shm-size=4g --privileged"
test_args: "--gtest_filter=*MGPU*"
- # CUDA 13 tests
- cuda_version: 13
- suite: gpu
+ suite: gpu-rmm
arch: x86_64
runner: linux-amd64-gpu
- image_repo: xgb-ci.gpu_build_cuda13_rockylinux8
- artifact_from: build-cuda13-x86_64
- container_options: "--gpus all --privileged"
- test_args: ""
- - cuda_version: 13
- suite: gpu
- arch: aarch64
- runner: linux-arm64-gpu
- image_repo: xgb-ci.gpu_build_cuda13_rockylinux8_aarch64
- artifact_from: build-cuda13-aarch64
+ image_repo: xgb-ci.gpu
+ artifact_from: build-cuda-with-rmm
container_options: "--gpus all --privileged"
- test_args: ""
+ test_args: "--use-rmm-pool --gtest_filter=-*DeathTest*"
container:
image: ${{ needs.ci-configure.outputs.docker_registry }}/${{ matrix.image_repo }}:${{ needs.ci-configure.outputs.image_tag }}
credentials:
@@ -416,41 +417,41 @@ jobs:
fail-fast: false
matrix:
include:
- # CUDA 12 tests
+ # xgboost-cu12 tests using the native CUDA 12.9 runtime
- cuda_version: 12
description: GPU-x86_64-CUDA-12
- image_repo: xgb-ci.gpu
+ image_repo: xgb-ci.gpu_cuda12
suite: gpu
runner: linux-amd64-gpu
artifact_from: audit-cuda12-wheel-x86_64
container_options: "--gpus all --privileged"
- - cuda_version: 12
- description: Multi-GPU-x86_64-CUDA-12
- image_repo: xgb-ci.gpu
- suite: mgpu
- runner: linux-amd64-mgpu
- artifact_from: audit-cuda12-wheel-x86_64
- # mgpu needs --shm-size for NCCL shared memory communication
- container_options: "--gpus all --shm-size=4g --privileged"
- # CUDA 12 aarch64 tests
+ # xgboost-cu12 aarch64 test using the native CUDA 12.9 runtime
- cuda_version: 12
description: GPU-arm64-CUDA-12
- image_repo: xgb-ci.gpu_aarch64
+ image_repo: xgb-ci.gpu_cuda12_aarch64
suite: gpu-arm64
runner: linux-arm64-gpu
artifact_from: audit-cuda12-wheel-aarch64
container_options: "--gpus all --privileged"
- # CUDA 13 tests
+ # Default xgboost package tests (CUDA 13)
- cuda_version: 13
description: GPU-x86_64-CUDA-13
- image_repo: xgb-ci.gpu_build_cuda13_rockylinux8
+ image_repo: xgb-ci.gpu
suite: gpu
runner: linux-amd64-gpu
artifact_from: audit-cuda13-wheel-x86_64
container_options: "--gpus all --privileged"
+ - cuda_version: 13
+ description: Multi-GPU-x86_64-CUDA-13
+ image_repo: xgb-ci.gpu
+ suite: mgpu
+ runner: linux-amd64-mgpu
+ artifact_from: audit-cuda13-wheel-x86_64
+ # mgpu needs --shm-size for NCCL shared memory communication
+ container_options: "--gpus all --shm-size=4g --privileged"
- cuda_version: 13
description: GPU-arm64-CUDA-13
- image_repo: xgb-ci.gpu_build_cuda13_rockylinux8_aarch64
+ image_repo: xgb-ci.gpu_aarch64
suite: gpu-arm64
runner: linux-arm64-gpu
artifact_from: audit-cuda13-wheel-aarch64
@@ -476,16 +477,16 @@ jobs:
bash ops/pipeline/test-python-wheel.sh
--suite ${{ matrix.suite }}
--cuda-version ${{ matrix.cuda_version }}
- # Train a model for cross-platform testing (only for CUDA 12 x86_64)
+ # Train a model for cross-platform testing (only for default CUDA 13 x86_64)
- name: Train cross-platform test model
- if: matrix.cuda_version == 12 && matrix.suite == 'gpu'
+ if: matrix.cuda_version == 13 && matrix.suite == 'gpu'
shell: bash -l {0}
run: |
source activate gpu_test
python tests/cross-platform/test_cross_platform_model.py \
--train --model-path cross_platform_model.ubj
- name: Upload cross-platform model artifact
- if: matrix.cuda_version == 12 && matrix.suite == 'gpu'
+ if: matrix.cuda_version == 13 && matrix.suite == 'gpu'
uses: actions/upload-artifact@v7.0.1
with:
name: cross-platform-model
@@ -505,20 +506,20 @@ jobs:
timeout-minutes: 60
strategy:
fail-fast: false
- # Uses the wheel from cuda12 for tests.
+ # Uses the default CUDA 13 wheel for tests.
matrix:
include:
- description: CPU-amd64
image_repo: xgb-ci.cpu
suite: cpu
runner: linux-amd64-cpu
- artifact_from: audit-cuda12-wheel-x86_64
+ artifact_from: audit-cuda13-wheel-x86_64
container_options: "--init"
- description: CPU-arm64
image_repo: xgb-ci.cpu_aarch64
suite: cpu-arm64
runner: linux-arm64-cpu
- artifact_from: audit-cuda12-wheel-aarch64
+ artifact_from: audit-cuda13-wheel-aarch64
container_options: "--init"
container:
image: ${{ needs.ci-configure.outputs.docker_registry }}/${{ matrix.image_repo }}:${{ needs.ci-configure.outputs.image_tag }}
diff --git a/doc/build.rst b/doc/build.rst
index 5ec1269c003c..20d6f21c059e 100644
--- a/doc/build.rst
+++ b/doc/build.rst
@@ -139,23 +139,6 @@ architectures can be found `in this page `_. Alternatively, one can use the
-``libgrpc`` and the ``protobuf`` package from conda forge if conda is available. After
-obtaining the required dependencies, enable the flag: ``-DPLUGIN_FEDERATED=ON`` when
-running CMake. Please note that only Linux is supported for the federated plugin.
-
-
-.. code-block:: bash
-
- cmake -B build -S . -DPLUGIN_FEDERATED=ON -GNinja
- cd build && ninja
-
-
.. _build_python:
***********************************
@@ -206,8 +189,7 @@ There are several ways to build and install the package from source:
--config-settings cmake.define.USE_CUDA=ON \
--config-settings cmake.define.USE_NCCL=ON
- Common CMake options
- (see :ref:`building-the-shared-library` for the full list):
+ Common CMake options (see :ref:`build_shared_lib` for the full list):
- ``USE_CUDA`` — build with CUDA / GPU acceleration
- ``USE_NCCL`` — build with NCCL for distributed GPU training
diff --git a/doc/contrib/ci.rst b/doc/contrib/ci.rst
index 1d96ea49adc7..6c18ad07ab9a 100644
--- a/doc/contrib/ci.rst
+++ b/doc/contrib/ci.rst
@@ -117,9 +117,10 @@ YAML file ``containers/ci_container.yml``. For example, when ``IMAGE_REPO`` is s
xgb-ci.gpu:
container_def: gpu
build_args:
- CUDA_VERSION_ARG: "12.4.1"
- NCCL_VERSION_ARG: "2.23.4-1"
- RAPIDS_VERSION_ARG: "24.10"
+ CUDA_VERSION: "13.3.0"
+ NCCL_VERSION: "2.30.7-1"
+ RAPIDS_VERSION: "26.04"
+ ARCH: x86_64
The ``container_def`` entry indicates where the Dockerfile is located. The container
definition will be fetched from ``containers/dockerfile/Dockerfile.CONTAINER_DEF`` where
@@ -131,8 +132,8 @@ the build arguments are:
.. code-block::
- --build-arg CUDA_VERSION_ARG=12.4.1 --build-arg NCCL_VERSION_ARG=2.23.4-1 \
- --build-arg RAPIDS_VERSION_ARG=24.10
+ --build-arg CUDA_VERSION=13.3.0 --build-arg NCCL_VERSION=2.30.7-1 \
+ --build-arg RAPIDS_VERSION=26.04 --build-arg ARCH=x86_64
The build arguments provide inputs to the ``ARG`` instructions in the Dockerfile.
@@ -152,7 +153,7 @@ Invoke ``ops/docker_run.py`` from the main ``dmlc/xgboost`` repo as follows:
python3 ops/docker_run.py \
--image-uri 492475357299.dkr.ecr.us-west-2.amazonaws.com/[image_repo]:[image_tag] \
[--use-gpus] \
- -- "command to run inside the container"
+ -- command [arguments...]
where ``--use-gpus`` should be specified to expose NVIDIA GPUs to the Docker container.
@@ -163,13 +164,13 @@ For example:
# Run without GPU
python3 ops/docker_run.py \
--image-uri 492475357299.dkr.ecr.us-west-2.amazonaws.com/xgb-ci.cpu:main \
- -- bash ops/pipeline/build-cpu-impl.sh cpu
+ -- bash ops/pipeline/test-python-wheel.sh --suite cpu
# Run with NVIDIA GPU
python3 ops/docker_run.py \
--image-uri 492475357299.dkr.ecr.us-west-2.amazonaws.com/xgb-ci.gpu:main \
--use-gpus \
- -- bash ops/pipeline/test-python-wheel.sh gpu
+ -- bash ops/pipeline/test-python-wheel.sh --suite gpu --cuda-version 13
Optionally, you can specify ``--run-args`` to pass extra arguments to ``docker run``:
@@ -181,7 +182,7 @@ Optionally, you can specify ``--run-args`` to pass extra arguments to ``docker r
--image-uri 492475357299.dkr.ecr.us-west-2.amazonaws.com/xgb-ci.gpu:main \
--use-gpus \
--run-args='--shm-size=4g --privileged' \
- -- bash ops/pipeline/test-python-wheel.sh gpu
+ -- bash ops/pipeline/test-python-wheel.sh --suite mgpu --cuda-version 13
See :ref:`ci_container_infra` to read about how containers are built and managed in the CI pipelines.
@@ -214,7 +215,7 @@ Examples: useful tasks for local development
export DOCKER_REGISTRY=492475357299.dkr.ecr.us-west-2.amazonaws.com
python3 ops/docker_run.py \
--image-uri ${DOCKER_REGISTRY}/xgb-ci.cpu:main \
- -- ops/pipeline/test-python-wheel.sh cpu
+ -- ops/pipeline/test-python-wheel.sh --suite cpu
* Run Python tests with GPU algorithm
@@ -224,7 +225,7 @@ Examples: useful tasks for local development
python3 ops/docker_run.py \
--image-uri ${DOCKER_REGISTRY}/xgb-ci.gpu:main \
--use-gpus \
- -- ops/pipeline/test-python-wheel.sh gpu
+ -- ops/pipeline/test-python-wheel.sh --suite gpu --cuda-version 13
* Run Python tests with GPU algorithm on Linux ARM64
@@ -234,7 +235,7 @@ Examples: useful tasks for local development
python3 ops/docker_run.py \
--image-uri ${DOCKER_REGISTRY}/xgb-ci.gpu_aarch64:main \
--use-gpus \
- -- ops/pipeline/test-python-wheel.sh gpu-arm64
+ -- ops/pipeline/test-python-wheel.sh --suite gpu-arm64 --cuda-version 13
* Run Python tests with GPU algorithm, with multiple GPUs
@@ -245,7 +246,7 @@ Examples: useful tasks for local development
--image-uri ${DOCKER_REGISTRY}/xgb-ci.gpu:main \
--use-gpus \
--run-args='--shm-size=4g' \
- -- ops/pipeline/test-python-wheel.sh mgpu
+ -- ops/pipeline/test-python-wheel.sh --suite mgpu --cuda-version 13
# --shm-size=4g is needed for multi-GPU algorithms to function
* Build and test JVM packages
@@ -502,15 +503,16 @@ For example, when you run ``bash containers/docker_build.sh xgb-ci.gpu``, the lo
# docker_build.sh calls docker_build.py...
python3 containers/docker_build.py --container-def gpu \
--image-uri 492475357299.dkr.ecr.us-west-2.amazonaws.com/xgb-ci.gpu:main \
- --build-arg CUDA_VERSION_ARG=12.4.1 --build-arg NCCL_VERSION_ARG=2.23.4-1 \
- --build-arg RAPIDS_VERSION_ARG=24.10
+ --build-arg CUDA_VERSION=13.3.0 --build-arg NCCL_VERSION=2.30.7-1 \
+ --build-arg RAPIDS_VERSION=26.04 --build-arg ARCH=x86_64
...
# .. and docker_build.py in turn calls "docker build"...
- docker build --build-arg CUDA_VERSION_ARG=12.4.1 \
- --build-arg NCCL_VERSION_ARG=2.23.4-1 \
- --build-arg RAPIDS_VERSION_ARG=24.10 \
+ docker build --build-arg CUDA_VERSION=13.3.0 \
+ --build-arg NCCL_VERSION=2.30.7-1 \
+ --build-arg RAPIDS_VERSION=26.04 \
+ --build-arg ARCH=x86_64 \
--load --progress=plain \
--ulimit nofile=1024000:1024000 \
-t 492475357299.dkr.ecr.us-west-2.amazonaws.com/xgb-ci.gpu:main \
@@ -526,7 +528,7 @@ Here is an example with ``docker_run.py``:
# Run without GPU
python3 ops/docker_run.py \
--image-uri 492475357299.dkr.ecr.us-west-2.amazonaws.com/xgb-ci.cpu:main \
- -- bash ops/pipeline/build-cpu-impl.sh cpu
+ -- bash ops/pipeline/test-python-wheel.sh --suite cpu
# Run with NVIDIA GPU
# Allocate extra space in /dev/shm to enable NCCL
@@ -535,26 +537,26 @@ Here is an example with ``docker_run.py``:
--image-uri 492475357299.dkr.ecr.us-west-2.amazonaws.com/xgb-ci.gpu:main \
--use-gpus \
--run-args='--shm-size=4g --privileged' \
- -- bash ops/pipeline/test-python-wheel.sh gpu
+ -- bash ops/pipeline/test-python-wheel.sh --suite mgpu --cuda-version 13
which are translated to the following ``docker run`` invocations:
.. code-block:: bash
docker run --rm --pid=host \
- -w /workspace -v /path/to/xgboost:/workspace \
+ -v /path/to/xgboost:/workspace -w /workspace \
-e CI_BUILD_UID= -e CI_BUILD_USER= \
-e CI_BUILD_GID= -e CI_BUILD_GROUP= \
492475357299.dkr.ecr.us-west-2.amazonaws.com/xgb-ci.cpu:main \
- bash ops/pipeline/build-cpu-impl.sh cpu
+ bash ops/pipeline/test-python-wheel.sh --suite cpu
docker run --rm --pid=host --gpus all \
- -w /workspace -v /path/to/xgboost:/workspace \
+ -v /path/to/xgboost:/workspace -w /workspace \
-e CI_BUILD_UID= -e CI_BUILD_USER= \
-e CI_BUILD_GID= -e CI_BUILD_GROUP= \
--shm-size=4g --privileged \
492475357299.dkr.ecr.us-west-2.amazonaws.com/xgb-ci.gpu:main \
- bash ops/pipeline/test-python-wheel.sh gpu
+ bash ops/pipeline/test-python-wheel.sh --suite mgpu --cuda-version 13
.. _vm_images:
diff --git a/doc/contrib/coding_guide.rst b/doc/contrib/coding_guide.rst
index e3464d9e322c..8b0bec2b4a2a 100644
--- a/doc/contrib/coding_guide.rst
+++ b/doc/contrib/coding_guide.rst
@@ -146,7 +146,7 @@ Linter
======
We use a combination of linters to enforce style convention and find potential errors. Linting is especially useful for scripting languages like Python, as we can catch many errors that would have otherwise occurred at run-time.
-For Python scripts, `pylint `_, `black `__ and `isort `__ are used for providing guidance on coding style, and `mypy `__ is required for type checking. The Python formatting and pylint checks are provided via the corresponding pre-commit hooks, which operate on changed files. For C++, `cpplint `_ is used along with ``clang-tidy``. For R, ``lintr`` is used.
+For Python scripts, `pylint `_, `ruff `__ are used for providing guidance on coding style, and `mypy `__ is required for type checking. The Python formatting and pylint checks are provided via the corresponding pre-commit hooks, which operate on changed files. For C++, `cpplint `_ is used along with ``clang-tidy``. For R, ``lintr`` is used.
To run Python checks locally, install the checkers mentioned previously and run the pre-commit hooks for the files you changed:
@@ -186,35 +186,20 @@ To run this check locally, use the clang-CUDA helper from the top level source t
bash ops/pipeline/run-clang-tidy-clang-cuda.sh
This helper configures a clang-generated CUDA compilation database and then runs
-``run-clang-tidy -p`` against it. The same path is used by CI.
+``run-clang-tidy -p`` against files under ``src/`` using the repository's
+``.clang-tidy`` configuration. The same path is used by CI.
-By default it lints files under ``src/``. Use environment variables to narrow the
-scope or adjust the checks:
+Use ``--jobs`` to override the number of parallel clang-tidy processes:
.. code-block:: bash
cd /path/to/xgboost/
- XGBOOST_TIDY_FILES='src/common/timer.cc,src/predictor/interpretability/shap.cu' \
- XGBOOST_TIDY_CHECKS='-*,google-runtime-int' \
- bash ops/pipeline/run-clang-tidy-clang-cuda.sh
-
-The helper accepts command-line overrides for the build directory, job count, source
-filter, checks, extra arguments, and ``warnings-as-errors`` filter. For example:
-
-.. code-block:: bash
-
- cd /path/to/xgboost/
- bash ops/pipeline/run-clang-tidy-clang-cuda.sh \
- --build-dir build-clang-tidy-cuda \
- --jobs 16 \
- --source-filter '.*/(src|include)/.*' \
- --checks '-*,google-runtime-int'
+ bash ops/pipeline/run-clang-tidy-clang-cuda.sh --jobs 16
The helper expects a clang toolchain with ``clang++``, ``clang-linker-wrapper``, and
``run-clang-tidy`` available either from the active conda base environment or from
-``XGBOOST_CLANG_PREFIX``. When using conda, install both ``clangxx`` and
-``clang-tools`` so the compiler resource directory and ``run-clang-tidy`` are both
-present.
+``XGBOOST_CLANG_PREFIX``. By default, it installs ``clang``, ``clangxx``, and
+``clang-tools`` from the ``conda-forge`` channel.
**********************************
Guide for handling user input data
diff --git a/doc/gpu/index.rst b/doc/gpu/index.rst
index d6c4fcde4a63..71d3ad36cf24 100644
--- a/doc/gpu/index.rst
+++ b/doc/gpu/index.rst
@@ -4,7 +4,7 @@ XGBoost GPU Support
This page contains information about GPU algorithms supported in XGBoost.
-.. note:: CUDA 12.0, Compute Capability 5.0 required (See `this list `_ to look up compute capability of your GPU card.)
+.. note:: CUDA >= 12.9 is required. See :ref:`wheel-cuda`.
*********************************************
CUDA Accelerated Tree Construction Algorithms
diff --git a/doc/install.rst b/doc/install.rst
index 1239e7c2e59c..acf524f7d506 100644
--- a/doc/install.rst
+++ b/doc/install.rst
@@ -16,36 +16,14 @@ Stable Release
Python
------
-Pre-built binary wheels are uploaded to PyPI (Python Package Index) for each release. Supported platforms are Linux (x86_64, aarch64), Windows (x86_64) and MacOS (x86_64, Apple Silicon).
+Pre-built binary wheels are uploaded to PyPI (Python Package Index) for each release. Supported platforms are Linux (x86_64, aarch64), Windows (x86_64) and MacOS (x86_64, Apple Silicon). In addition the ``xgboost-cpu`` windows package supports aarch64.
.. code-block:: bash
- # Pip 21.3+ is required
pip install xgboost
-You might need to run the command with ``--user`` flag or use ``virtualenv`` if you run
-into permission errors.
-
-.. note:: Parts of the Python package now require glibc 2.28+
-
- Starting from 2.1.0, XGBoost Python package will be distributed in two variants:
-
- * ``manylinux_2_28``: for recent Linux distros with glibc 2.28 or newer. This variant comes with all features enabled.
- * ``manylinux2014``: for old Linux distros with glibc older than 2.28. This variant does not support GPU algorithms or federated learning.
-
- The ``pip`` package manager will automatically choose the correct variant depending on your system.
-
- Starting from **May 31, 2025**, we will stop distributing the ``manylinux2014`` variant and exclusively
- distribute the ``manylinux_2_28`` variant. We made this decision so that our CI/CD pipeline won't have
- depend on software components that reached end-of-life (such as CentOS 7). We strongly encourage
- everyone to migrate to recent Linux distros in order to use future versions of XGBoost.
-
- Note. If you want to use GPU algorithms or federated learning on an older Linux distro, you have
- two alternatives:
-
- 1. Upgrade to a recent Linux distro with glibc 2.28+. OR
- 2. Build XGBoost from the source.
+You might need to run the command with ``--user`` flag or use ``virtualenv`` if you run into permission errors.
.. note:: Windows users need to install Visual C++ Redistributable
@@ -56,7 +34,6 @@ into permission errors.
necessary libraries and thus don't need to install Visual C++
Redistributable.
-
Capabilities of binary wheels for each platform:
.. |tick| unicode:: U+2714
@@ -75,15 +52,37 @@ Capabilities of binary wheels for each platform:
+---------------------+---------+----------------------+
| Windows | |tick| | |cross| |
+---------------------+---------+----------------------+
+| Windows aarch64 | |cross| | |cross| |
++---------------------+---------+----------------------+
Linux aarch64 wheels now ship with CUDA support, so ``pip install xgboost`` on
modern Jetson or Graviton machines provides the same GPU functionality as the
Linux x86_64 wheel. Multi-node and multi-GPU training remain experimental on
ARM64 at this time.
+.. _wheel-cuda:
+
+CUDA toolkit variants (Linux)
+*****************************
+The default ``xgboost`` wheel for Linux x86_64 and aarch64 is built with CUDA Toolkit 13.x:
+
+.. code-block:: bash
+
+ pip install xgboost
+
+Users with GPU whose NVIDIA driver supports CUDA 12 but not CUDA 13 can instead install the CUDA 12 package:
+
+.. code-block:: bash
+
+ pip uninstall xgboost xgboost-cu12
+ pip install xgboost-cu12
+
+The CUDA 12 package is a driver-compatibility option.
+
+
Minimal installation (CPU-only)
*******************************
-The default installation with ``pip`` will install the full XGBoost package, including the support for the GPU algorithms and federated learning.
+The default installation with ``pip`` will install the full XGBoost package, including support for GPU algorithms.
You may choose to reduce the size of the installed package and save the disk space, by opting to install ``xgboost-cpu`` instead:
@@ -91,8 +90,7 @@ You may choose to reduce the size of the installed package and save the disk spa
pip install xgboost-cpu
-The ``xgboost-cpu`` variant will have drastically smaller disk footprint, but does not provide some features, such as the GPU algorithms and
-federated learning.
+The ``xgboost-cpu`` variant has a drastically smaller disk footprint, but does not provide GPU algorithms.
Conda
*****
diff --git a/include/xgboost/json.h b/include/xgboost/json.h
index 4abab6cf4f2a..bda358deae21 100644
--- a/include/xgboost/json.h
+++ b/include/xgboost/json.h
@@ -12,6 +12,7 @@
#include
#include