Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Migrate build data to pyproject.toml #1078

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
4454fc0
Migrate from setup.py to pyproject.toml for PEP 660 editable install
matthewdouglas Feb 23, 2024
7bdc6e5
Update workflow to use pyproject.toml for build requirements
matthewdouglas Feb 23, 2024
11142a3
Fix setup for doc build
matthewdouglas Feb 23, 2024
636c62d
cleanup workflow
matthewdouglas Feb 26, 2024
f9c2cc5
Merge branch 'TimDettmers:main' into setup-pep660
matthewdouglas Feb 28, 2024
699f505
Add dependency constraints
matthewdouglas Feb 28, 2024
00497ab
Update pyproject.toml
matthewdouglas Mar 4, 2024
d23be94
Update pyproject.toml
matthewdouglas Mar 4, 2024
48ede4a
Revert "Update pyproject.toml"
matthewdouglas Mar 4, 2024
9fae8ee
Merge conflict
matthewdouglas Mar 18, 2024
9a6794b
Update dependencies in pyproject.toml
matthewdouglas Mar 18, 2024
399a494
Rebase on main
matthewdouglas Apr 8, 2024
0101f2f
Resolve conflict
matthewdouglas Apr 8, 2024
72342b5
Resolve conflict
matthewdouglas Apr 8, 2024
11165f8
Add dependency constraints
matthewdouglas Feb 28, 2024
646a86a
Update pyproject.toml
matthewdouglas Mar 4, 2024
5d6ce68
Update pyproject.toml
matthewdouglas Mar 4, 2024
c5fcfb8
Revert "Update pyproject.toml"
matthewdouglas Mar 4, 2024
19dcbd7
Update dependencies in pyproject.toml
matthewdouglas Mar 18, 2024
fd725cb
fix conflict
matthewdouglas Apr 8, 2024
98f73d5
Merge branch 'TimDettmers:main' into setup-pep660
matthewdouglas Apr 9, 2024
a04cd4d
Make wheel artifact name agnostic to python version
matthewdouglas Apr 10, 2024
da2dc69
Remove requirements-*.txt
matthewdouglas Apr 10, 2024
a0ae460
Merge branch 'main' into setup-pep660
matthewdouglas Apr 16, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 38 additions & 31 deletions .github/workflows/python-package.yml
Original file line number Diff line number Diff line change
Expand Up @@ -122,37 +122,44 @@ jobs:
arch: aarch64
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- name: Download build artifact
uses: actions/download-artifact@v4
with:
merge-multiple: true
pattern: "shared_library*_${{ matrix.os }}_${{ matrix.arch }}*"
path: output/
- name: Copy correct platform shared library
shell: bash
run: |
ls -lR output/
cp output/${{ matrix.os }}/${{ matrix.arch }}/* bitsandbytes/
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
cache: pip
- run: pip install build wheel
- run: python -m build .
- name: Determine and Set Platform Tag, then Tag Wheel
shell: bash
run: |
PLATFORM_TAG=$(python .github/scripts/set_platform_tag.py "${{ matrix.arch }}")
echo "PLATFORM_TAG=$PLATFORM_TAG"
wheel tags --remove --abi-tag=none --python-tag=py3 --platform-tag=$PLATFORM_TAG dist/bitsandbytes-*.whl
- name: Upload build artifact
uses: actions/upload-artifact@v4
with:
name: bdist_wheel_${{ matrix.os }}_${{ matrix.arch }}
path: dist/bitsandbytes-*.whl
retention-days: 7
# Check out code
- uses: actions/checkout@v4
# Download shared libraries
- name: Download build artifact
uses: actions/download-artifact@v4
with:
merge-multiple: true
pattern: "shared_library*_${{ matrix.os }}_${{ matrix.arch }}*"
path: output/
- name: Copy correct platform shared library
shell: bash
run: |
ls -lR output/
cp output/${{ matrix.os }}/${{ matrix.arch }}/* bitsandbytes/
# Set up the Python version needed
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
cache: pip
- name: Install build package
shell: bash
run: pip install build wheel
- name: Build wheel
shell: bash
run: python -m build .
- name: Determine and Set Platform Tag, then Tag Wheel
shell: bash
run: |
PLATFORM_TAG=$(python .github/scripts/set_platform_tag.py "${{ matrix.arch }}")
echo "PLATFORM_TAG=$PLATFORM_TAG"
wheel tags --remove --abi-tag=none --python-tag=py3 --platform-tag=$PLATFORM_TAG dist/bitsandbytes-*.whl
- name: Upload build artifact
uses: actions/upload-artifact@v4
with:
name: bdist_wheel_${{ matrix.os }}_${{ matrix.arch }}
path: dist/bitsandbytes-*.whl
retention-days: 7

audit-wheels:
needs: build-wheels
Expand Down
4 changes: 4 additions & 0 deletions docs/source/contributing.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,10 @@

## Setup

### Editable install
- Create an editable installation for development with `pip install -e ".[dev]"`
- Optional extras: `benchmark`, `docs`

### Setup pre-commit hooks
- Install pre-commit hooks with `pip install pre-commit`.
- Run `pre-commit autoupdate` once to configure the hooks.
Expand Down
3 changes: 1 addition & 2 deletions docs/source/installation.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -80,10 +80,9 @@ Refer to the following table if you're using another CUDA Toolkit version.

```bash
git clone https://github.com/TimDettmers/bitsandbytes.git && cd bitsandbytes/
pip install -r requirements-dev.txt
cmake -DCOMPUTE_BACKEND=cuda -S .
cmake --build . --config Release
python -m build --wheel
pip install .
matthewdouglas marked this conversation as resolved.
Show resolved Hide resolved
```

Big thanks to [wkpark](https://github.com/wkpark), [Jamezo97](https://github.com/Jamezo97), [rickardp](https://github.com/rickardp), [akx](https://github.com/akx) for their amazing contributions to make bitsandbytes compatible with Windows.
Expand Down
74 changes: 73 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,79 @@
[build-system]
requires = [ "setuptools", "wheel" ]
requires = ["setuptools >= 63.0.0"]
matthewdouglas marked this conversation as resolved.
Show resolved Hide resolved
build-backend = "setuptools.build_meta"

[project]
name = "bitsandbytes"
dynamic = ["version"]
description = "k-bit optimizers and matrix multiplication routines."
authors = [{name="Tim Dettmers", email="[email protected]"}]
requires-python = ">=3.8"
matthewdouglas marked this conversation as resolved.
Show resolved Hide resolved
readme = "README.md"
license = {file="LICENSE"}
matthewdouglas marked this conversation as resolved.
Show resolved Hide resolved
keywords = [
"gpu",
"optimizers",
"optimization",
"8-bit",
"quantization",
"compression"
]
classifiers = [
"Development Status :: 4 - Beta",
"License :: OSI Approved :: MIT License",
"Environment :: GPU :: NVIDIA CUDA :: 11",
"Environment :: GPU :: NVIDIA CUDA :: 12",
"Intended Audience :: Developers",
"Intended Audience :: Science/Research",
"Operating System :: POSIX :: Linux",
"Operating System :: MacOS",
"Operating System :: Microsoft :: Windows",
"Programming Language :: C++",
"Programming Language :: Python :: Implementation :: CPython",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Topic :: Scientific/Engineering :: Artificial Intelligence"
]
dependencies = [
"torch>=1.11,!=1.12.0",
"numpy>=1.17"
]

[project.optional-dependencies]
benchmark = ["pandas", "matplotlib"]
docs = ["hf-doc-builder==0.5.0"]
dev = [
"bitsandbytes[test]",
"build>=1.0.0,<2",
"ruff==0.3.2",
"pre-commit>=3.5.0,<4",
"wheel>=0.42,<1"
]
test = [
"einops~=0.6.0",
"lion-pytorch==0.0.6",
"pytest~=7.4",
"scipy>=1.10.1,<2; python_version < '3.9'",
"scipy>=1.11.4,<2; python_version >= '3.9'",
"transformers>=4.30.1,<5"
]
triton = ["triton~=2.0.0; sys_platform=='linux' and platform_machine=='x86_64'"]

[project.urls]
homepage = "https://github.com/TimDettmers/bitsandbytes"
changelog = "https://github.com/TimDettmers/bitsandbytes/blob/main/CHANGELOG.md"
docs = "https://huggingface.co/docs/bitsandbytes/main"
issues = "https://github.com/TimDettmers/bitsandbytes/issues"

[tool.setuptools]
package-data = { "*" = ["libbitsandbytes*.*"] }

[tool.setuptools.dynamic]
version = {attr = "bitsandbytes.__version__"}

[tool.ruff]
src = [
"bitsandbytes",
Expand Down
6 changes: 0 additions & 6 deletions requirements-ci.txt

This file was deleted.

9 changes: 0 additions & 9 deletions requirements-dev.txt

This file was deleted.

36 changes: 1 addition & 35 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,48 +2,14 @@
#
# This source code is licensed under the MIT license found in the
# LICENSE file in the root directory of this source tree.
import glob
import os

from setuptools import find_packages, setup
from setuptools.dist import Distribution

libs = list(glob.glob("./bitsandbytes/libbitsandbytes*.*"))
libs = [os.path.basename(p) for p in libs]
print("libs:", libs)


def read(fname):
return open(os.path.join(os.path.dirname(__file__), fname)).read()


# Tested with wheel v0.29.0
class BinaryDistribution(Distribution):
def has_ext_modules(self):
return True


setup(
name="bitsandbytes",
version="0.43.2.dev",
author="Tim Dettmers",
author_email="[email protected]",
description="k-bit optimizers and matrix multiplication routines.",
license="MIT",
keywords="gpu optimizers optimization 8-bit quantization compression",
url="https://github.com/TimDettmers/bitsandbytes",
packages=find_packages(),
package_data={"": libs},
install_requires=["torch", "numpy"],
extras_require={
"benchmark": ["pandas", "matplotlib"],
"test": ["scipy"],
},
long_description=read("README.md"),
long_description_content_type="text/markdown",
classifiers=[
"Development Status :: 4 - Beta",
"Topic :: Scientific/Engineering :: Artificial Intelligence",
],
distclass=BinaryDistribution,
)
setup(version="0.43.2.dev0", packages=find_packages(), distclass=BinaryDistribution)
Loading