diff --git a/.github/workflows/python_wheels_winarm64.yml b/.github/workflows/python_wheels_winarm64.yml index d3a92f8e9eb8..c1f8f28cfe89 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: @@ -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,34 @@ 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 + + - name: Setup Python + uses: actions/setup-python@v7.0.0 + with: + python-version: '3.12' + + - name: Install test dependencies + run: python -m pip install hypothesis pytest scikit-learn pandas + + - 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/doc/install.rst b/doc/install.rst index acf524f7d506..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). 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, aarch64) 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| | +---------------------+---------+----------------------+ @@ -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: 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",