Deduplicate merged GPU quantile sketch entries #17508
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: XGBoost CI | |
| on: | |
| push: | |
| branches: | |
| - master | |
| - 'release_*' | |
| pull_request: | |
| permissions: | |
| contents: read # to fetch code (actions/checkout) | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} | |
| cancel-in-progress: true | |
| env: | |
| BRANCH_NAME: >- | |
| ${{ github.event.pull_request.number && 'PR-' }}${{ github.event.pull_request.number || github.ref_name }} | |
| jobs: | |
| ci-configure: | |
| name: Configure variables for CI | |
| runs-on: | |
| - runs-on=${{ github.run_id }} | |
| - runner=linux-amd64-cpu | |
| - tag=main-ci-configure | |
| steps: | |
| - name: Login to Amazon ECR | |
| id: login-ecr | |
| uses: aws-actions/[email protected] | |
| with: | |
| mask-password: 'false' | |
| registries: '492475357299' | |
| - uses: actions/[email protected] | |
| - name: Get image tag | |
| id: get-image-tag | |
| run: | | |
| source ops/pipeline/get-image-tag.sh | |
| echo "Using image tag $IMAGE_TAG" | |
| echo "image_tag=$IMAGE_TAG" >> "$GITHUB_OUTPUT" | |
| outputs: | |
| docker_registry: ${{ steps.login-ecr.outputs.registry }} | |
| docker_username: ${{ steps.login-ecr.outputs.docker_username_492475357299_dkr_ecr_us_west_2_amazonaws_com }} | |
| docker_password: ${{ steps.login-ecr.outputs.docker_password_492475357299_dkr_ecr_us_west_2_amazonaws_com }} | |
| image_tag: ${{ steps.get-image-tag.outputs.image_tag }} | |
| build-cpu: | |
| name: Build CPU (${{ matrix.variant }}) | |
| needs: ci-configure | |
| runs-on: | |
| - runs-on=${{ github.run_id }} | |
| - runner=linux-amd64-cpu | |
| - tag=main-build-cpu-${{ matrix.variant }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - variant: default | |
| build_suite: cpu | |
| # Default build doesn't need privileged mode | |
| # Using --init as harmless default (proper signal handling) | |
| container_options: "--init" | |
| - variant: sanitizer | |
| build_suite: cpu-sanitizer | |
| # Sanitizer needs privileged for: sysctl vm.mmap_rnd_bits=28 | |
| # See https://github.com/google/sanitizers/issues/1614 | |
| container_options: "--privileged" | |
| container: | |
| image: ${{ needs.ci-configure.outputs.docker_registry }}/xgb-ci.cpu:${{ needs.ci-configure.outputs.image_tag }} | |
| credentials: | |
| username: ${{ needs.ci-configure.outputs.docker_username }} | |
| password: ${{ needs.ci-configure.outputs.docker_password }} | |
| options: ${{ matrix.container_options }} | |
| steps: | |
| - uses: actions/[email protected] | |
| with: | |
| submodules: "true" | |
| # Remove default build config to ensure CMake-configured header is used | |
| - name: Remove default build config | |
| run: rm -fv dmlc-core/include/dmlc/build_config_default.h | |
| - name: Configure the system for sanitizers | |
| if: matrix.variant == 'sanitizer' | |
| run: | | |
| echo "ASAN_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer" >> $GITHUB_ENV | |
| echo "ASAN_OPTIONS=symbolize=1" >> $GITHUB_ENV | |
| echo "UBSAN_OPTIONS=print_stacktrace=1:log_path=ubsan_error.log" >> $GITHUB_ENV | |
| # Work around https://github.com/google/sanitizers/issues/1614 | |
| sysctl vm.mmap_rnd_bits=28 | |
| - 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 }} | |
| - run: sccache --show-stats | |
| build-cuda: | |
| name: Build CUDA ${{ matrix.cuda_version }} (${{ matrix.arch }}) | |
| needs: ci-configure | |
| runs-on: | |
| - runs-on=${{ github.run_id }} | |
| - runner=${{ matrix.runner }} | |
| - tag=main-build-cuda${{ matrix.cuda_version }}-${{ matrix.arch }} | |
| - extras=s3-cache | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| # CUDA 12 | |
| - cuda_version: 12 | |
| arch: aarch64 | |
| runner: linux-arm64-cpu | |
| image_repo: xgb-ci.gpu_build_rockylinux8_aarch64 | |
| use_rmm: 0 | |
| use_federated: 1 | |
| - cuda_version: 12 | |
| arch: x86_64 | |
| runner: linux-amd64-cpu | |
| image_repo: xgb-ci.gpu_build_rockylinux8 | |
| use_rmm: 0 | |
| use_federated: 1 | |
| # CUDA 13 | |
| - cuda_version: 13 | |
| arch: aarch64 | |
| runner: linux-arm64-cpu | |
| image_repo: xgb-ci.gpu_build_cuda13_rockylinux8_aarch64 | |
| use_rmm: 0 | |
| use_federated: 0 | |
| - cuda_version: 13 | |
| arch: x86_64 | |
| runner: linux-amd64-cpu | |
| image_repo: xgb-ci.gpu_build_cuda13_rockylinux8 | |
| use_rmm: 0 | |
| use_federated: 0 | |
| container: | |
| image: ${{ needs.ci-configure.outputs.docker_registry }}/${{ matrix.image_repo }}:${{ needs.ci-configure.outputs.image_tag }} | |
| credentials: | |
| username: ${{ needs.ci-configure.outputs.docker_username }} | |
| password: ${{ needs.ci-configure.outputs.docker_password }} | |
| steps: | |
| - uses: runs-on/action@v2 | |
| - uses: actions/[email protected] | |
| with: | |
| submodules: "true" | |
| - uses: dmlc/xgboost-devops/actions/sccache@main | |
| with: | |
| cache-key-prefix: ${{ github.job }}-${{ matrix.cuda_version }} | |
| - run: >- | |
| bash ops/pipeline/build-cuda.sh | |
| --cuda-version ${{ matrix.cuda_version }} | |
| --use-rmm ${{ matrix.use_rmm }} | |
| --use-federated ${{ matrix.use_federated }} | |
| - run: sccache --show-stats | |
| - name: Stash files | |
| run: | | |
| python3 ops/pipeline/manage-artifacts.py upload \ | |
| --s3-bucket ${{ env.RUNS_ON_S3_BUCKET_CACHE }} \ | |
| --prefix cache/${{ github.run_id }}/build-cuda${{ matrix.cuda_version }}-${{ matrix.arch }} \ | |
| build/testxgboost python-package/dist/*.whl | |
| audit-cuda-wheel: | |
| name: Audit CUDA ${{ matrix.cuda_version }} wheel for manylinux_2_28_${{ matrix.arch }} | |
| needs: [ci-configure, build-cuda] | |
| runs-on: | |
| - runs-on=${{ github.run_id }} | |
| - runner=${{ matrix.runner }} | |
| - tag=main-audit-cuda${{ matrix.cuda_version }}-wheel-${{ matrix.arch }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| # CUDA 12 | |
| - cuda_version: 12 | |
| cuda_variant_flag: "" | |
| arch: aarch64 | |
| runner: linux-arm64-cpu | |
| - cuda_version: 12 | |
| cuda_variant_flag: "" | |
| arch: x86_64 | |
| runner: linux-amd64-cpu | |
| # CUDA 13 | |
| - cuda_version: 13 | |
| cuda_variant_flag: "--cuda-variant cuda13" | |
| arch: aarch64 | |
| runner: linux-arm64-cpu | |
| - cuda_version: 13 | |
| cuda_variant_flag: "--cuda-variant cuda13" | |
| arch: x86_64 | |
| runner: linux-amd64-cpu | |
| container: | |
| image: ${{ needs.ci-configure.outputs.docker_registry }}/xgb-ci.manylinux_2_28_${{ matrix.arch }}:${{ needs.ci-configure.outputs.image_tag }} | |
| credentials: | |
| username: ${{ needs.ci-configure.outputs.docker_username }} | |
| password: ${{ needs.ci-configure.outputs.docker_password }} | |
| steps: | |
| - uses: actions/[email protected] | |
| - name: Pick Python | |
| run: | | |
| export PATH=/opt/python/cp310-cp310/bin/:$PATH | |
| echo ${PATH} >> $GITHUB_PATH | |
| - name: Install dependencies | |
| run: | | |
| pip install awscli wheel auditwheel pydistcheck | |
| - name: Unstash raw wheel | |
| run: | | |
| mkdir -p python-package/dist | |
| python3 ops/pipeline/manage-artifacts.py download \ | |
| --s3-bucket ${{ env.RUNS_ON_S3_BUCKET_CACHE }} \ | |
| --prefix cache/${{ github.run_id }}/build-cuda${{ matrix.cuda_version }}-${{ matrix.arch }} \ | |
| --dest-dir python-package/dist \ | |
| *.whl | |
| - run: bash ops/pipeline/audit-cuda-wheel.sh ${{ matrix.arch }} ${{ matrix.cuda_variant_flag }} | |
| - name: Stash files | |
| run: | | |
| python3 ops/pipeline/manage-artifacts.py upload \ | |
| --s3-bucket ${{ env.RUNS_ON_S3_BUCKET_CACHE }} \ | |
| --prefix cache/${{ github.run_id }}/audit-cuda${{ matrix.cuda_version }}-wheel-${{ matrix.arch }} \ | |
| python-package/dist/*.whl | |
| build-cuda-with-rmm: | |
| name: Build CUDA with RMM | |
| needs: ci-configure | |
| runs-on: | |
| - runs-on=${{ github.run_id }} | |
| - runner=linux-amd64-cpu | |
| - tag=main-build-cuda-with-rmm | |
| - extras=s3-cache | |
| container: | |
| image: ${{ needs.ci-configure.outputs.docker_registry }}/xgb-ci.gpu_build_rockylinux8:${{ needs.ci-configure.outputs.image_tag }} | |
| credentials: | |
| username: ${{ needs.ci-configure.outputs.docker_username }} | |
| password: ${{ needs.ci-configure.outputs.docker_password }} | |
| steps: | |
| - uses: runs-on/action@v2 | |
| - uses: actions/[email protected] | |
| with: | |
| submodules: "true" | |
| - uses: dmlc/xgboost-devops/actions/sccache@main | |
| - run: >- | |
| bash ops/pipeline/build-cuda.sh | |
| --cuda-version 12 | |
| --use-rmm 1 | |
| --use-federated 1 | |
| - run: sccache --show-stats | |
| - name: Stash files | |
| run: | | |
| python3 ops/pipeline/manage-artifacts.py upload \ | |
| --s3-bucket ${{ env.RUNS_ON_S3_BUCKET_CACHE }} \ | |
| --prefix cache/${{ github.run_id }}/build-cuda-with-rmm \ | |
| build/testxgboost | |
| build-python-wheels-cpu: | |
| name: Build CPU wheel (xgboost-cpu) for ${{ matrix.manylinux_target }}_${{ matrix.arch }} | |
| runs-on: | |
| - runs-on | |
| - runner=${{ matrix.runner }} | |
| - run-id=${{ github.run_id }} | |
| - tag=main-build-python-wheels-cpu-${{ matrix.manylinux_target }}-${{ matrix.arch }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - manylinux_target: manylinux_2_28 | |
| arch: aarch64 | |
| runner: linux-arm64-cpu | |
| - manylinux_target: manylinux_2_28 | |
| arch: x86_64 | |
| runner: linux-amd64-cpu | |
| steps: | |
| - uses: actions/[email protected] | |
| with: | |
| submodules: "true" | |
| - name: Log into Docker registry (AWS ECR) | |
| run: bash ops/pipeline/login-docker-registry.sh | |
| - run: | | |
| bash ops/pipeline/build-python-wheels-cpu.sh \ | |
| ${{ matrix.manylinux_target }} ${{ matrix.arch }} | |
| build-gpu-rpkg: | |
| name: Build GPU-enabled R package | |
| needs: ci-configure | |
| runs-on: | |
| - runs-on=${{ github.run_id }} | |
| - runner=linux-amd64-cpu | |
| - tag=main-build-gpu-rpkg | |
| - extras=s3-cache | |
| container: | |
| image: ${{ needs.ci-configure.outputs.docker_registry }}/xgb-ci.gpu_build_r_rockylinux8:${{ needs.ci-configure.outputs.image_tag }} | |
| credentials: | |
| username: ${{ needs.ci-configure.outputs.docker_username }} | |
| password: ${{ needs.ci-configure.outputs.docker_password }} | |
| steps: | |
| - uses: runs-on/action@v2 | |
| - name: Trust git cloning project sources | |
| run: | | |
| git config --global --add safe.directory "${GITHUB_WORKSPACE}" | |
| - uses: actions/[email protected] | |
| with: | |
| submodules: "true" | |
| - uses: dmlc/xgboost-devops/actions/sccache@main | |
| with: | |
| cache-key-prefix: ${{ github.job }} | |
| - run: bash ops/pipeline/build-gpu-rpkg.sh | |
| - run: sccache --show-stats | |
| - name: Upload R package tarball | |
| run: | | |
| python3 ops/pipeline/manage-artifacts.py upload \ | |
| --s3-bucket xgboost-nightly-builds \ | |
| --prefix ${BRANCH_NAME}/${GITHUB_SHA} --make-public \ | |
| xgboost_r_gpu_linux.tar.gz | |
| if: github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/heads/release_') | |
| test-cpp-gpu: | |
| name: >- | |
| Google Test (C++) CUDA ${{ matrix.cuda_version }} | |
| (${{ matrix.suite }}, ${{ matrix.runner }}) | |
| needs: [ci-configure, build-cuda, build-cuda-with-rmm] | |
| runs-on: | |
| - runs-on=${{ github.run_id }} | |
| - runner=${{ matrix.runner }} | |
| - tag=main-test-cpp-gpu-cuda${{ matrix.cuda_version }}-${{ matrix.suite }}-${{ matrix.arch }} | |
| - extras=s3-cache | |
| timeout-minutes: 30 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| # CUDA 12 tests | |
| # 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 | |
| artifact_from: build-cuda12-x86_64 | |
| container_options: "--gpus all --privileged" | |
| test_args: "" | |
| - cuda_version: 12 | |
| suite: gpu | |
| arch: aarch64 | |
| runner: linux-arm64-gpu | |
| image_repo: xgb-ci.gpu_aarch64 | |
| artifact_from: build-cuda12-aarch64 | |
| container_options: "--gpus all --privileged" | |
| test_args: "" | |
| - cuda_version: 12 | |
| suite: gpu-rmm | |
| arch: x86_64 | |
| runner: linux-amd64-gpu | |
| image_repo: xgb-ci.gpu | |
| artifact_from: build-cuda-with-rmm | |
| container_options: "--gpus all --privileged" | |
| test_args: "--use-rmm-pool" | |
| - cuda_version: 12 | |
| suite: mgpu | |
| arch: x86_64 | |
| runner: linux-amd64-mgpu | |
| image_repo: xgb-ci.gpu | |
| artifact_from: build-cuda12-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 | |
| 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 | |
| container_options: "--gpus all --privileged" | |
| test_args: "" | |
| container: | |
| image: ${{ needs.ci-configure.outputs.docker_registry }}/${{ matrix.image_repo }}:${{ needs.ci-configure.outputs.image_tag }} | |
| credentials: | |
| username: ${{ needs.ci-configure.outputs.docker_username }} | |
| password: ${{ needs.ci-configure.outputs.docker_password }} | |
| options: ${{ matrix.container_options }} | |
| steps: | |
| - uses: runs-on/action@v2 | |
| - uses: actions/[email protected] | |
| - name: Unstash gtest | |
| run: | | |
| python3 ops/pipeline/manage-artifacts.py download \ | |
| --s3-bucket ${{ env.RUNS_ON_S3_BUCKET_CACHE }} \ | |
| --prefix cache/${{ github.run_id }}/${{ matrix.artifact_from }} \ | |
| --dest-dir build \ | |
| testxgboost | |
| chmod +x build/testxgboost | |
| - name: Run Google Tests (${{ matrix.suite }}) | |
| run: build/testxgboost ${{ matrix.test_args }} | |
| test-python-wheel-gpu: | |
| name: Python tests CUDA ${{ matrix.cuda_version }} (${{ matrix.description }}) | |
| needs: [ci-configure, audit-cuda-wheel] | |
| runs-on: | |
| - runs-on=${{ github.run_id }} | |
| - runner=${{ matrix.runner }} | |
| - tag=main-test-python-wheel-cuda${{ matrix.cuda_version }}-${{ matrix.description }} | |
| - extras=s3-cache | |
| timeout-minutes: 60 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| # CUDA 12 tests | |
| - cuda_version: 12 | |
| description: GPU-x86_64-CUDA-12 | |
| image_repo: xgb-ci.gpu | |
| 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 | |
| - cuda_version: 12 | |
| description: GPU-arm64-CUDA-12 | |
| image_repo: xgb-ci.gpu_aarch64 | |
| suite: gpu-arm64 | |
| runner: linux-arm64-gpu | |
| artifact_from: audit-cuda12-wheel-aarch64 | |
| container_options: "--gpus all --privileged" | |
| # CUDA 13 tests | |
| - cuda_version: 13 | |
| description: GPU-x86_64-CUDA-13 | |
| image_repo: xgb-ci.gpu_build_cuda13_rockylinux8 | |
| suite: gpu | |
| runner: linux-amd64-gpu | |
| artifact_from: audit-cuda13-wheel-x86_64 | |
| container_options: "--gpus all --privileged" | |
| - cuda_version: 13 | |
| description: GPU-arm64-CUDA-13 | |
| image_repo: xgb-ci.gpu_build_cuda13_rockylinux8_aarch64 | |
| suite: gpu-arm64 | |
| runner: linux-arm64-gpu | |
| artifact_from: audit-cuda13-wheel-aarch64 | |
| container_options: "--gpus all --privileged" | |
| container: | |
| image: ${{ needs.ci-configure.outputs.docker_registry }}/${{ matrix.image_repo }}:${{ needs.ci-configure.outputs.image_tag }} | |
| credentials: | |
| username: ${{ needs.ci-configure.outputs.docker_username }} | |
| password: ${{ needs.ci-configure.outputs.docker_password }} | |
| options: ${{ matrix.container_options }} | |
| steps: | |
| - uses: runs-on/action@v2 | |
| - uses: actions/[email protected] | |
| - name: Unstash Python wheel | |
| run: | | |
| python3 ops/pipeline/manage-artifacts.py download \ | |
| --s3-bucket ${{ env.RUNS_ON_S3_BUCKET_CACHE }} \ | |
| --prefix cache/${{ github.run_id }}/${{ matrix.artifact_from }} \ | |
| --dest-dir wheelhouse \ | |
| *.whl | |
| - name: Run Python tests (${{ matrix.description }}) | |
| run: >- | |
| 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) | |
| - name: Train cross-platform test model | |
| if: matrix.cuda_version == 12 && 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' | |
| uses: actions/[email protected] | |
| with: | |
| name: cross-platform-model | |
| path: | | |
| cross_platform_model.ubj | |
| cross_platform_model.pkl | |
| retention-days: 1 | |
| test-python-wheel-cpu: | |
| name: Python tests CPU (${{ matrix.description }}) | |
| needs: [ci-configure, audit-cuda-wheel] | |
| runs-on: | |
| - runs-on=${{ github.run_id }} | |
| - runner=${{ matrix.runner }} | |
| - tag=main-test-python-wheel-cpu-${{ matrix.description }} | |
| - extras=s3-cache | |
| timeout-minutes: 60 | |
| strategy: | |
| fail-fast: false | |
| # Uses the wheel from cuda12 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 | |
| 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 | |
| container_options: "--init" | |
| container: | |
| image: ${{ needs.ci-configure.outputs.docker_registry }}/${{ matrix.image_repo }}:${{ needs.ci-configure.outputs.image_tag }} | |
| credentials: | |
| username: ${{ needs.ci-configure.outputs.docker_username }} | |
| password: ${{ needs.ci-configure.outputs.docker_password }} | |
| options: ${{ matrix.container_options }} | |
| steps: | |
| - uses: runs-on/action@v2 | |
| - uses: actions/[email protected] | |
| - name: Unstash Python wheel | |
| run: | | |
| python3 ops/pipeline/manage-artifacts.py download \ | |
| --s3-bucket ${{ env.RUNS_ON_S3_BUCKET_CACHE }} \ | |
| --prefix cache/${{ github.run_id }}/${{ matrix.artifact_from }} \ | |
| --dest-dir wheelhouse \ | |
| *.whl | |
| - name: Run Python tests (${{ matrix.description }}) | |
| run: bash ops/pipeline/test-python-wheel.sh --suite ${{ matrix.suite }} | |
| python-wheels-macos: | |
| name: Build macOS wheel (${{ matrix.platform_id }}) | |
| runs-on: ${{ matrix.os }} | |
| defaults: | |
| run: | |
| shell: bash -l {0} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - os: macos-15-intel | |
| platform_id: macosx_x86_64 | |
| - os: macos-14 | |
| platform_id: macosx_arm64 | |
| steps: | |
| - uses: actions/[email protected] | |
| with: | |
| submodules: 'true' | |
| - name: Set up homebrew | |
| uses: Homebrew/actions/setup-homebrew@13341b4d5e459a98bbe0b122b12c11bf90518cc8 | |
| - name: Install libomp | |
| run: brew install libomp | |
| - uses: dmlc/xgboost-devops/actions/miniforge-setup@main | |
| with: | |
| environment-name: minimal | |
| environment-file: ops/conda_env/minimal.yml | |
| - name: Build wheels | |
| run: bash ops/pipeline/build-python-wheels-macos.sh ${{ matrix.platform_id }} ${{ github.sha }} | |
| - name: Verify wheel can be installed | |
| run: | | |
| python -m pip install -vvv wheelhouse/*.whl | |
| - name: Upload wheel artifact | |
| uses: actions/[email protected] | |
| with: | |
| name: python-wheel-${{ matrix.platform_id }} | |
| path: wheelhouse/*.whl | |
| retention-days: 1 | |
| - name: Upload Python wheel to S3 | |
| if: github.ref == 'refs/heads/master' || contains(github.ref, 'refs/heads/release_') | |
| run: | | |
| python ops/pipeline/manage-artifacts.py upload \ | |
| --s3-bucket xgboost-nightly-builds \ | |
| --prefix ${{ env.BRANCH_NAME }}/${{ github.sha }} --make-public \ | |
| wheelhouse/*.whl | |
| 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-cross-platform-inference: | |
| name: Cross-platform inference test (macOS Apple Silicon) | |
| needs: [test-python-wheel-gpu, python-wheels-macos] | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - os: macos-15-intel | |
| platform_id: macosx_x86_64 | |
| - os: macos-14 | |
| platform_id: macosx_arm64 | |
| defaults: | |
| run: | |
| shell: bash -l {0} | |
| steps: | |
| - uses: actions/[email protected] | |
| - uses: dmlc/xgboost-devops/actions/miniforge-setup@main | |
| with: | |
| environment-name: macos_test | |
| environment-file: ops/conda_env/minimal.yml | |
| - run: conda install scikit-learn numpy -y | |
| - name: Download macOS wheel artifact | |
| uses: actions/[email protected] | |
| with: | |
| name: python-wheel-${{ matrix.platform_id }} | |
| path: wheelhouse | |
| - name: Install XGBoost wheel | |
| run: | | |
| python -m pip install -v wheelhouse/*.whl | |
| - name: Download cross-platform model artifact | |
| uses: actions/[email protected] | |
| with: | |
| name: cross-platform-model | |
| path: . | |
| - name: Run cross-platform inference test | |
| run: | | |
| python tests/cross-platform/test_cross_platform_model.py \ | |
| --inference --model-path cross_platform_model.ubj |