From 71a30f0f4d0a430c9dcdb2cbd7c30bfc56aa1589 Mon Sep 17 00:00:00 2001 From: Jiaming Yuan Date: Sat, 1 Aug 2026 09:23:48 +0800 Subject: [PATCH 1/7] Fix win arm64 release. --- .github/workflows/python_wheels_winarm64.yml | 35 ++++++++++++++++++++ .github/workflows/windows.yml | 2 +- doc/install.rst | 4 +-- ops/conda_env/macos_cpu_test.yml | 3 +- ops/conda_env/win64_cpu_test.yml | 19 +++++++++++ ops/conda_env/win64_test.yml | 6 ++-- ops/script/release_artifacts.py | 1 + 7 files changed, 64 insertions(+), 6 deletions(-) create mode 100644 ops/conda_env/win64_cpu_test.yml diff --git a/.github/workflows/python_wheels_winarm64.yml b/.github/workflows/python_wheels_winarm64.yml index d3a92f8e9eb8..c587ecfa768c 100644 --- a/.github/workflows/python_wheels_winarm64.yml +++ b/.github/workflows/python_wheels_winarm64.yml @@ -61,6 +61,13 @@ jobs: $wheelFile = Get-ChildItem wheelhouse/*.whl | Select-Object -First 1 -ExpandProperty FullName python -m wheel tags --python-tag py3 --abi-tag none --platform win_arm64 --remove $wheelFile + - name: Upload Python wheel xgboost as workflow artifact + uses: actions/upload-artifact@v7.0.1 + with: + name: python-wheel-win-arm64-xgboost + path: python-package/wheelhouse/xgboost-*.whl + retention-days: 1 + - name: Upload Python wheel xgboost if: github.ref == 'refs/heads/master' || contains(github.ref, 'refs/heads/release_') run: | @@ -98,3 +105,31 @@ jobs: env: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID_IAM_S3_UPLOADER }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY_IAM_S3_UPLOADER }} + + test-python-wheel-Win-ARM64: + name: Test xgboost wheel for Windows ARM64 + needs: python-wheels-Win-ARM64 + runs-on: windows-11-arm + steps: + - uses: actions/checkout@v7.0.1 + + - uses: dmlc/xgboost-devops/actions/miniforge-setup@main + with: + environment-name: win64_test + environment-file: ops/conda_env/win64_cpu_test.yml + + - name: Download Python wheel + uses: actions/download-artifact@v8.0.1 + with: + name: python-wheel-win-arm64-xgboost + path: wheelhouse + + - name: Install Python wheel + run: | + $wheelFile = Get-ChildItem wheelhouse/*.whl | Select-Object -First 1 -ExpandProperty FullName + python -m pip install -v $wheelFile + python -c "import xgboost; print(xgboost.build_info())" + + - name: Run Python tests + run: | + python -m pytest -v -s -rxXs --durations=0 tests/python/test_basic.py diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index f5a36d417893..c2b6bf536386 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -62,7 +62,7 @@ jobs: - run: ops/pipeline/build-win64.ps1 -variant cpu - run: sccache --show-stats - test-win64-gpu: + test-win64-cuda: name: Test XGBoost on Windows needs: build-win64-gpu runs-on: diff --git a/doc/install.rst b/doc/install.rst index acf524f7d506..f27df1cd6978 100644 --- a/doc/install.rst +++ b/doc/install.rst @@ -16,7 +16,7 @@ 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). In addition the ``xgboost-cpu`` windows package supports aarch64. +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). .. code-block:: bash @@ -44,7 +44,7 @@ Capabilities of binary wheels for each platform: +=====================+=========+======================+ | Linux x86_64 | |tick| | |tick| | +---------------------+---------+----------------------+ -| Linux aarch64 | |tick| | |cross| | +| Linux aarch64 | |tick| | |tick| | +---------------------+---------+----------------------+ | MacOS x86_64 | |cross| | |cross| | +---------------------+---------+----------------------+ diff --git a/ops/conda_env/macos_cpu_test.yml b/ops/conda_env/macos_cpu_test.yml index 57a11cb01d8d..b32cc7cdb399 100644 --- a/ops/conda_env/macos_cpu_test.yml +++ b/ops/conda_env/macos_cpu_test.yml @@ -22,10 +22,11 @@ dependencies: - pytest - pytest-cov - pytest-timeout -- python-kubernetes - urllib3 - boto3 - awscli - loky>=3.5.1 - pyarrow - cloudpickle +- pip: + - py-ubjson diff --git a/ops/conda_env/win64_cpu_test.yml b/ops/conda_env/win64_cpu_test.yml new file mode 100644 index 000000000000..e6b812a3fee3 --- /dev/null +++ b/ops/conda_env/win64_cpu_test.yml @@ -0,0 +1,19 @@ +name: win64_env +channels: +- conda-forge +dependencies: +- python=3.12 +- numpy +- scipy +- matplotlib +- scikit-learn +- pandas +- pytest +- boto3 +- hypothesis +- python-graphviz +- pip +- loky>=3.5.1 +- pyarrow +- pip: + - py-ubjson diff --git a/ops/conda_env/win64_test.yml b/ops/conda_env/win64_test.yml index 0ea5ee7a91b4..431f9748ea39 100644 --- a/ops/conda_env/win64_test.yml +++ b/ops/conda_env/win64_test.yml @@ -11,9 +11,11 @@ dependencies: - pytest - boto3 - hypothesis -- cupy>=13.2,<14 - python-graphviz - pip -- py-ubjson - loky>=3.5.1 - pyarrow +# CUDA +- cupy +- pip: + - py-ubjson diff --git a/ops/script/release_artifacts.py b/ops/script/release_artifacts.py index 0e0b8d1a20d7..05ce38d01701 100644 --- a/ops/script/release_artifacts.py +++ b/ops/script/release_artifacts.py @@ -151,6 +151,7 @@ def download_python_wheels(branch: str, commit_hash: str, outdir: Path) -> None: """Download all Python binary wheels for the specified branch.""" full_platforms = [ "win_amd64", + "win_arm64", "manylinux_2_28_x86_64", "manylinux_2_28_aarch64", "macosx_10_15_x86_64", From c06fa46f36b7aa046f7524253044f53c496fa939 Mon Sep 17 00:00:00 2001 From: Jiaming Yuan Date: Sat, 1 Aug 2026 10:09:55 +0800 Subject: [PATCH 2/7] name. --- .github/workflows/python_wheels_winarm64.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/python_wheels_winarm64.yml b/.github/workflows/python_wheels_winarm64.yml index c587ecfa768c..61d154681bab 100644 --- a/.github/workflows/python_wheels_winarm64.yml +++ b/.github/workflows/python_wheels_winarm64.yml @@ -1,4 +1,4 @@ -name: Build Python wheels targeting Windows ARM64 +name: Windows aarch64 on: push: From 7a01b4f1b32f6a9a8ab4e8d7ff8cd5b609900287 Mon Sep 17 00:00:00 2001 From: Jiaming Yuan Date: Sat, 1 Aug 2026 10:36:47 +0800 Subject: [PATCH 3/7] update doc. --- doc/install.rst | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/doc/install.rst b/doc/install.rst index f27df1cd6978..4100add0167f 100644 --- a/doc/install.rst +++ b/doc/install.rst @@ -16,7 +16,7 @@ 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, aarch64) and MacOS (x86_64, Apple Silicon). .. code-block:: bash @@ -55,10 +55,9 @@ Capabilities of binary wheels for each platform: | 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. +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. .. _wheel-cuda: From f989c26a88597b6b4f9afbb350d58c58d59c0e1a Mon Sep 17 00:00:00 2001 From: Jiaming Yuan Date: Sat, 1 Aug 2026 10:37:38 +0800 Subject: [PATCH 4/7] no miniforge. --- .github/workflows/python_wheels_winarm64.yml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/python_wheels_winarm64.yml b/.github/workflows/python_wheels_winarm64.yml index 61d154681bab..ced19dfce34a 100644 --- a/.github/workflows/python_wheels_winarm64.yml +++ b/.github/workflows/python_wheels_winarm64.yml @@ -113,10 +113,13 @@ jobs: steps: - uses: actions/checkout@v7.0.1 - - uses: dmlc/xgboost-devops/actions/miniforge-setup@main + - name: Setup Python + uses: actions/setup-python@v7.0.0 with: - environment-name: win64_test - environment-file: ops/conda_env/win64_cpu_test.yml + python-version: '3.12' + + - name: Install test dependencies + run: python -m pip install hypothesis pytest - name: Download Python wheel uses: actions/download-artifact@v8.0.1 From 0f09a7a86f3c63b2144cc59d5fd2382395464c7e Mon Sep 17 00:00:00 2001 From: Jiaming Yuan Date: Sat, 1 Aug 2026 10:43:49 +0800 Subject: [PATCH 5/7] joblib. --- .github/workflows/python_wheels_winarm64.yml | 2 +- .github/workflows/windows.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/python_wheels_winarm64.yml b/.github/workflows/python_wheels_winarm64.yml index ced19dfce34a..e5286d04e9af 100644 --- a/.github/workflows/python_wheels_winarm64.yml +++ b/.github/workflows/python_wheels_winarm64.yml @@ -119,7 +119,7 @@ jobs: python-version: '3.12' - name: Install test dependencies - run: python -m pip install hypothesis pytest + run: python -m pip install hypothesis pytest joblib - name: Download Python wheel uses: actions/download-artifact@v8.0.1 diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index c2b6bf536386..f5a36d417893 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -62,7 +62,7 @@ jobs: - run: ops/pipeline/build-win64.ps1 -variant cpu - run: sccache --show-stats - test-win64-cuda: + test-win64-gpu: name: Test XGBoost on Windows needs: build-win64-gpu runs-on: From 8be63bdf21e25ebc2fa691ba3df1b55825520f68 Mon Sep 17 00:00:00 2001 From: Jiaming Yuan Date: Sat, 1 Aug 2026 10:53:53 +0800 Subject: [PATCH 6/7] sklearn, pandas --- .github/workflows/python_wheels_winarm64.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/python_wheels_winarm64.yml b/.github/workflows/python_wheels_winarm64.yml index e5286d04e9af..90d110604845 100644 --- a/.github/workflows/python_wheels_winarm64.yml +++ b/.github/workflows/python_wheels_winarm64.yml @@ -119,7 +119,7 @@ jobs: python-version: '3.12' - name: Install test dependencies - run: python -m pip install hypothesis pytest joblib + run: python -m pip install hypothesis pytest sklearn pandas - name: Download Python wheel uses: actions/download-artifact@v8.0.1 From 718a118668657ffcd090419cc9d6f03b18cb4fa5 Mon Sep 17 00:00:00 2001 From: Jiaming Yuan Date: Sat, 1 Aug 2026 11:06:31 +0800 Subject: [PATCH 7/7] name. --- .github/workflows/python_wheels_winarm64.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/python_wheels_winarm64.yml b/.github/workflows/python_wheels_winarm64.yml index 90d110604845..c1f8f28cfe89 100644 --- a/.github/workflows/python_wheels_winarm64.yml +++ b/.github/workflows/python_wheels_winarm64.yml @@ -119,7 +119,7 @@ jobs: python-version: '3.12' - name: Install test dependencies - run: python -m pip install hypothesis pytest sklearn pandas + run: python -m pip install hypothesis pytest scikit-learn pandas - name: Download Python wheel uses: actions/download-artifact@v8.0.1