[CI] Build a CPU-only wheel under name xgboost-cpu (#10603)
This commit is contained in:
parent
7ab93f3ce3
commit
326921dbe4
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
tqdm, sh are required to run this script.
|
tqdm, sh are required to run this script.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
import os
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
@ -106,6 +107,15 @@ def make_pysrc_wheel(
|
|||||||
if not os.path.exists(dist):
|
if not os.path.exists(dist):
|
||||||
os.mkdir(dist)
|
os.mkdir(dist)
|
||||||
|
|
||||||
|
# Apply patch to remove NCCL dependency
|
||||||
|
# Save the original content of pyproject.toml so that we can restore it later
|
||||||
|
with DirectoryExcursion(ROOT):
|
||||||
|
with open("python-package/pyproject.toml", "r") as f:
|
||||||
|
orig_pyproj_lines = f.read()
|
||||||
|
with open("tests/buildkite/remove_nccl_dep.patch", "r") as f:
|
||||||
|
patch_lines = f.read()
|
||||||
|
subprocess.run(["patch", "-p0"], input=patch_lines, text=True)
|
||||||
|
|
||||||
with DirectoryExcursion(os.path.join(ROOT, "python-package")):
|
with DirectoryExcursion(os.path.join(ROOT, "python-package")):
|
||||||
subprocess.check_call(["python", "-m", "build", "--sdist"])
|
subprocess.check_call(["python", "-m", "build", "--sdist"])
|
||||||
if rc is not None:
|
if rc is not None:
|
||||||
@ -117,6 +127,10 @@ def make_pysrc_wheel(
|
|||||||
target = os.path.join(dist, name)
|
target = os.path.join(dist, name)
|
||||||
shutil.move(src, target)
|
shutil.move(src, target)
|
||||||
|
|
||||||
|
with DirectoryExcursion(ROOT):
|
||||||
|
with open("python-package/pyproject.toml", "w") as f:
|
||||||
|
print(orig_pyproj_lines, file=f, end="")
|
||||||
|
|
||||||
|
|
||||||
def download_py_packages(
|
def download_py_packages(
|
||||||
branch: str, major: int, minor: int, commit_hash: str, outdir: str
|
branch: str, major: int, minor: int, commit_hash: str, outdir: str
|
||||||
|
|||||||
@ -76,6 +76,19 @@ Capabilities of binary wheels for each platform:
|
|||||||
| Windows | |tick| | |cross| |
|
| Windows | |tick| | |cross| |
|
||||||
+---------------------+---------+----------------------+
|
+---------------------+---------+----------------------+
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
You may choose to reduce the size of the installed package and save the disk space, by opting to install ``xgboost-cpu`` instead:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
Conda
|
Conda
|
||||||
*****
|
*****
|
||||||
|
|
||||||
|
|||||||
@ -7,13 +7,13 @@ build-backend = "packager.pep517"
|
|||||||
|
|
||||||
[project]
|
[project]
|
||||||
name = "xgboost"
|
name = "xgboost"
|
||||||
version = "2.2.0-dev"
|
description = "XGBoost Python Package"
|
||||||
|
readme = { file = "README.rst", content-type = "text/x-rst" }
|
||||||
authors = [
|
authors = [
|
||||||
{ name = "Hyunsu Cho", email = "chohyu01@cs.washington.edu" },
|
{ name = "Hyunsu Cho", email = "chohyu01@cs.washington.edu" },
|
||||||
{ name = "Jiaming Yuan", email = "jm.yuan@outlook.com" }
|
{ name = "Jiaming Yuan", email = "jm.yuan@outlook.com" }
|
||||||
]
|
]
|
||||||
description = "XGBoost Python Package"
|
version = "2.2.0-dev"
|
||||||
readme = { file = "README.rst", content-type = "text/x-rst" }
|
|
||||||
requires-python = ">=3.8"
|
requires-python = ">=3.8"
|
||||||
license = { text = "Apache-2.0" }
|
license = { text = "Apache-2.0" }
|
||||||
classifiers = [
|
classifiers = [
|
||||||
|
|||||||
@ -1,33 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
set -euo pipefail
|
|
||||||
|
|
||||||
source tests/buildkite/conftest.sh
|
|
||||||
|
|
||||||
WHEEL_TAG=manylinux2014_aarch64
|
|
||||||
command_wrapper="tests/ci_build/ci_build.sh manylinux2014_aarch64"
|
|
||||||
python_bin="/opt/python/cp310-cp310/bin/python"
|
|
||||||
|
|
||||||
echo "--- Build binary wheel for ${WHEEL_TAG}"
|
|
||||||
# Patch to add warning about manylinux2014 variant
|
|
||||||
patch -p0 < tests/buildkite/manylinux2014_warning.patch
|
|
||||||
$command_wrapper bash -c \
|
|
||||||
"cd python-package && ${python_bin} -m pip wheel --no-deps -vvv . --wheel-dir dist/"
|
|
||||||
git checkout python-package/xgboost/core.py # discard the patch
|
|
||||||
|
|
||||||
$command_wrapper auditwheel repair --plat ${WHEEL_TAG} python-package/dist/*.whl
|
|
||||||
$command_wrapper ${python_bin} tests/ci_build/rename_whl.py \
|
|
||||||
--wheel-path wheelhouse/*.whl \
|
|
||||||
--commit-hash ${BUILDKITE_COMMIT} \
|
|
||||||
--platform-tag ${WHEEL_TAG}
|
|
||||||
rm -rf python-package/dist/
|
|
||||||
mkdir python-package/dist/
|
|
||||||
mv -v wheelhouse/*.whl python-package/dist/
|
|
||||||
|
|
||||||
echo "--- Upload Python wheel"
|
|
||||||
buildkite-agent artifact upload python-package/dist/*.whl
|
|
||||||
if [[ ($is_pull_request == 0) && ($is_release_branch == 1) ]]
|
|
||||||
then
|
|
||||||
aws s3 cp python-package/dist/*.whl s3://xgboost-nightly-builds/${BRANCH_NAME}/ \
|
|
||||||
--acl public-read --no-progress
|
|
||||||
fi
|
|
||||||
@ -1,33 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
set -euo pipefail
|
|
||||||
|
|
||||||
source tests/buildkite/conftest.sh
|
|
||||||
|
|
||||||
WHEEL_TAG=manylinux2014_x86_64
|
|
||||||
command_wrapper="tests/ci_build/ci_build.sh manylinux2014_x86_64"
|
|
||||||
python_bin="/opt/python/cp310-cp310/bin/python"
|
|
||||||
|
|
||||||
echo "--- Build binary wheel for ${WHEEL_TAG}"
|
|
||||||
# Patch to add warning about manylinux2014 variant
|
|
||||||
patch -p0 < tests/buildkite/manylinux2014_warning.patch
|
|
||||||
$command_wrapper bash -c \
|
|
||||||
"cd python-package && ${python_bin} -m pip wheel --no-deps -vvv . --wheel-dir dist/"
|
|
||||||
git checkout python-package/xgboost/core.py # discard the patch
|
|
||||||
|
|
||||||
$command_wrapper auditwheel repair --plat ${WHEEL_TAG} python-package/dist/*.whl
|
|
||||||
$command_wrapper ${python_bin} tests/ci_build/rename_whl.py \
|
|
||||||
--wheel-path wheelhouse/*.whl \
|
|
||||||
--commit-hash ${BUILDKITE_COMMIT} \
|
|
||||||
--platform-tag ${WHEEL_TAG}
|
|
||||||
rm -rf python-package/dist/
|
|
||||||
mkdir python-package/dist/
|
|
||||||
mv -v wheelhouse/*.whl python-package/dist/
|
|
||||||
|
|
||||||
echo "--- Upload Python wheel"
|
|
||||||
buildkite-agent artifact upload python-package/dist/*.whl
|
|
||||||
if [[ ($is_pull_request == 0) && ($is_release_branch == 1) ]]
|
|
||||||
then
|
|
||||||
aws s3 cp python-package/dist/*.whl s3://xgboost-nightly-builds/${BRANCH_NAME}/ \
|
|
||||||
--acl public-read --no-progress
|
|
||||||
fi
|
|
||||||
63
tests/buildkite/build-manylinux2014.sh
Executable file
63
tests/buildkite/build-manylinux2014.sh
Executable file
@ -0,0 +1,63 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
if [ $# -ne 1 ]; then
|
||||||
|
echo "Usage: $0 {x86_64,aarch64}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
arch=$1
|
||||||
|
|
||||||
|
source tests/buildkite/conftest.sh
|
||||||
|
|
||||||
|
WHEEL_TAG="manylinux2014_${arch}"
|
||||||
|
command_wrapper="tests/ci_build/ci_build.sh ${WHEEL_TAG}"
|
||||||
|
python_bin="/opt/python/cp310-cp310/bin/python"
|
||||||
|
|
||||||
|
echo "--- Build binary wheel for ${WHEEL_TAG}"
|
||||||
|
# Patch to add warning about manylinux2014 variant
|
||||||
|
patch -p0 < tests/buildkite/remove_nccl_dep.patch
|
||||||
|
patch -p0 < tests/buildkite/manylinux2014_warning.patch
|
||||||
|
$command_wrapper bash -c \
|
||||||
|
"cd python-package && ${python_bin} -m pip wheel --no-deps -v . --wheel-dir dist/"
|
||||||
|
git checkout python-package/pyproject.toml python-package/xgboost/core.py # discard the patch
|
||||||
|
|
||||||
|
$command_wrapper auditwheel repair --plat ${WHEEL_TAG} python-package/dist/*.whl
|
||||||
|
$command_wrapper ${python_bin} tests/ci_build/rename_whl.py \
|
||||||
|
--wheel-path wheelhouse/*.whl \
|
||||||
|
--commit-hash ${BUILDKITE_COMMIT} \
|
||||||
|
--platform-tag ${WHEEL_TAG}
|
||||||
|
rm -rf python-package/dist/
|
||||||
|
mkdir python-package/dist/
|
||||||
|
mv -v wheelhouse/*.whl python-package/dist/
|
||||||
|
|
||||||
|
echo "--- Build binary wheel for ${WHEEL_TAG} (CPU only)"
|
||||||
|
# Patch to rename pkg to xgboost-cpu
|
||||||
|
patch -p0 < tests/buildkite/remove_nccl_dep.patch
|
||||||
|
patch -p0 < tests/buildkite/cpu_only_pypkg.patch
|
||||||
|
$command_wrapper bash -c \
|
||||||
|
"cd python-package && ${python_bin} -m pip wheel --no-deps -v . --wheel-dir dist/"
|
||||||
|
git checkout python-package/pyproject.toml # discard the patch
|
||||||
|
|
||||||
|
$command_wrapper auditwheel repair --plat ${WHEEL_TAG} python-package/dist/xgboost_cpu-*.whl
|
||||||
|
$command_wrapper ${python_bin} tests/ci_build/rename_whl.py \
|
||||||
|
--wheel-path wheelhouse/xgboost_cpu-*.whl \
|
||||||
|
--commit-hash ${BUILDKITE_COMMIT} \
|
||||||
|
--platform-tag ${WHEEL_TAG}
|
||||||
|
rm -v python-package/dist/xgboost_cpu-*.whl
|
||||||
|
mv -v wheelhouse/xgboost_cpu-*.whl python-package/dist/
|
||||||
|
|
||||||
|
echo "--- Upload Python wheel"
|
||||||
|
for wheel in python-package/dist/*.whl
|
||||||
|
do
|
||||||
|
buildkite-agent artifact upload "${wheel}"
|
||||||
|
done
|
||||||
|
if [[ ($is_pull_request == 0) && ($is_release_branch == 1) ]]
|
||||||
|
then
|
||||||
|
for wheel in python-package/dist/*.whl
|
||||||
|
do
|
||||||
|
aws s3 cp "${wheel}" s3://xgboost-nightly-builds/${BRANCH_NAME}/ \
|
||||||
|
--acl public-read --no-progress
|
||||||
|
done
|
||||||
|
fi
|
||||||
55
tests/buildkite/cpu_only_pypkg.patch
Normal file
55
tests/buildkite/cpu_only_pypkg.patch
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
diff --git python-package/README.rst python-package/README.rst
|
||||||
|
index 1fc0bb5a0..f1c68470b 100644
|
||||||
|
--- python-package/README.rst
|
||||||
|
+++ python-package/README.rst
|
||||||
|
@@ -1,20 +1,15 @@
|
||||||
|
-======================
|
||||||
|
-XGBoost Python Package
|
||||||
|
-======================
|
||||||
|
+=================================
|
||||||
|
+XGBoost Python Package (CPU only)
|
||||||
|
+=================================
|
||||||
|
|
||||||
|
|PyPI version|
|
||||||
|
|
||||||
|
-Installation
|
||||||
|
-============
|
||||||
|
+The ``xgboost-cpu`` package provides for a minimal installation, with no support for the GPU algorithms
|
||||||
|
+or federated learning. It is provided to allow XGBoost to be installed in a space-constrained
|
||||||
|
+environments.
|
||||||
|
|
||||||
|
-From `PyPI <https://pypi.python.org/pypi/xgboost>`_
|
||||||
|
----------------------------------------------------
|
||||||
|
+Note. ``xgboost-cpu`` package is only provided for x86_64 (amd64) Linux and Windows platforms.
|
||||||
|
+For other platforms, please install ``xgboost`` from https://pypi.org/project/xgboost/.
|
||||||
|
|
||||||
|
-For a stable version, install using ``pip``::
|
||||||
|
-
|
||||||
|
- pip install xgboost
|
||||||
|
-
|
||||||
|
-.. |PyPI version| image:: https://badge.fury.io/py/xgboost.svg
|
||||||
|
- :target: http://badge.fury.io/py/xgboost
|
||||||
|
-
|
||||||
|
-For building from source, see `build <https://xgboost.readthedocs.io/en/latest/build.html>`_.
|
||||||
|
+Note. ``xgboost-cpu`` does not provide an sdist (source distribution). You may install sdist
|
||||||
|
+from https://pypi.org/project/xgboost/.
|
||||||
|
diff --git python-package/pyproject.toml python-package/pyproject.toml
|
||||||
|
index 46c1451c2..c5dc908d9 100644
|
||||||
|
--- python-package/pyproject.toml
|
||||||
|
+++ python-package/pyproject.toml
|
||||||
|
@@ -6,7 +6,7 @@ backend-path = ["."]
|
||||||
|
build-backend = "packager.pep517"
|
||||||
|
|
||||||
|
[project]
|
||||||
|
-name = "xgboost"
|
||||||
|
+name = "xgboost-cpu"
|
||||||
|
description = "XGBoost Python Package"
|
||||||
|
readme = { file = "README.rst", content-type = "text/x-rst" }
|
||||||
|
authors = [
|
||||||
|
@@ -82,3 +82,6 @@ class-attribute-naming-style = "snake_case"
|
||||||
|
|
||||||
|
# Allow single-letter variables
|
||||||
|
variable-rgx = "[a-zA-Z_][a-z0-9_]{0,30}$"
|
||||||
|
+
|
||||||
|
+[tool.hatch.build.targets.wheel]
|
||||||
|
+packages = ["xgboost/"]
|
||||||
@ -1,17 +1,3 @@
|
|||||||
diff --git python-package/pyproject.toml python-package/pyproject.toml
|
|
||||||
index a273d8c13..dee49686a 100644
|
|
||||||
--- python-package/pyproject.toml
|
|
||||||
+++ python-package/pyproject.toml
|
|
||||||
@@ -30,8 +30,7 @@ classifiers = [
|
|
||||||
]
|
|
||||||
dependencies = [
|
|
||||||
"numpy",
|
|
||||||
- "scipy",
|
|
||||||
- "nvidia-nccl-cu12 ; platform_system == 'Linux' and platform_machine != 'aarch64'"
|
|
||||||
+ "scipy"
|
|
||||||
]
|
|
||||||
|
|
||||||
[project.urls]
|
|
||||||
diff --git python-package/xgboost/core.py python-package/xgboost/core.py
|
diff --git python-package/xgboost/core.py python-package/xgboost/core.py
|
||||||
index e8bc735e6..030972ef2 100644
|
index e8bc735e6..030972ef2 100644
|
||||||
--- python-package/xgboost/core.py
|
--- python-package/xgboost/core.py
|
||||||
|
|||||||
@ -72,12 +72,12 @@ steps:
|
|||||||
agents:
|
agents:
|
||||||
queue: linux-amd64-cpu
|
queue: linux-amd64-cpu
|
||||||
- label: ":console: Build manylinux2014_x86_64 wheel"
|
- label: ":console: Build manylinux2014_x86_64 wheel"
|
||||||
command: "tests/buildkite/build-manylinux2014-x86_64.sh"
|
command: "tests/buildkite/build-manylinux2014.sh x86_64"
|
||||||
key: build-manylinux2014-x86_64
|
key: build-manylinux2014-x86_64
|
||||||
agents:
|
agents:
|
||||||
queue: linux-amd64-cpu
|
queue: linux-amd64-cpu
|
||||||
- label: ":console: Build manylinux2014_aarch64 wheel"
|
- label: ":console: Build manylinux2014_aarch64 wheel"
|
||||||
command: "tests/buildkite/build-manylinux2014-aarch64.sh"
|
command: "tests/buildkite/build-manylinux2014.sh aarch64"
|
||||||
key: build-manylinux2014-aarch64
|
key: build-manylinux2014-aarch64
|
||||||
agents:
|
agents:
|
||||||
queue: linux-arm64-cpu
|
queue: linux-arm64-cpu
|
||||||
|
|||||||
14
tests/buildkite/remove_nccl_dep.patch
Normal file
14
tests/buildkite/remove_nccl_dep.patch
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
diff --git python-package/pyproject.toml python-package/pyproject.toml
|
||||||
|
index 8835def25..46c1451c2 100644
|
||||||
|
--- python-package/pyproject.toml
|
||||||
|
+++ python-package/pyproject.toml
|
||||||
|
@@ -30,8 +30,7 @@ classifiers = [
|
||||||
|
]
|
||||||
|
dependencies = [
|
||||||
|
"numpy",
|
||||||
|
- "scipy",
|
||||||
|
- "nvidia-nccl-cu12 ; platform_system == 'Linux' and platform_machine != 'aarch64'"
|
||||||
|
+ "scipy"
|
||||||
|
]
|
||||||
|
|
||||||
|
[project.urls]
|
||||||
Loading…
x
Reference in New Issue
Block a user