* pip: add the amd and huggingfacenotorch extras, and guard against unpublishable metadata * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * pip: restore the rich, audio and flash-attn dependencies main declares * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Parse the guard tests' requirements instead of pattern matching them The direct-URL check matched the substring " @ https://", but PEP 508 allows any whitespace around the @ and the scheme is case insensitive, so flash-attn@https://... and flash-attn @ HTTPS://... are both direct references the check waved through - the exact upload failure it exists to catch. Ask packaging: Requirement.url is set for every spelling. The extras cross-reference used a lowercase regex, but project names and extra names are both case and separator insensitive (PEP 503, PEP 685), so pip honours Unsloth[Rocm72_Torch2100] while the regex never looked at it. Parse and canonicalize both sides instead. * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * pip: gate the torchcodec extras to platforms with a wheel torchcodec publishes no sdist and only manylinux_2_28_x86_64, macosx_*_arm64 and win_amd64 wheels, so on Linux aarch64, Windows ARM64 and Intel Mac there is nothing for pip to resolve and the whole install fails before the user gets an environment. Wiring audio-torch210 into the cu*-torch2100 extras made that reachable from those extras too. Gate on the platforms that have a wheel, matching PLATFORM_LACKS_TORCHCODEC_WHEEL in studio/install_python_stack.py. Also record why the amd and huggingfacenotorch extras cannot be torch-free on this branch: extras are additive to the base dependencies, which deliberately carry the full runtime here so a bare pip install works. --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: unslothai <unslothai@gmail.com>
897 lines
29 KiB
TOML
897 lines
29 KiB
TOML
[build-system]
|
|
requires = ["setuptools==80.9.0", "setuptools-scm==9.2.0"]
|
|
build-backend = "setuptools.build_meta"
|
|
|
|
[project]
|
|
name = "unsloth"
|
|
dynamic = ["version"]
|
|
description = "2-5X faster training, reinforcement learning & finetuning"
|
|
readme = "README.md"
|
|
requires-python = ">=3.9,<3.15"
|
|
license = "Apache-2.0"
|
|
keywords = ["ai", "llm", "reinforcement learning", "machine learning", "artificial intelligence", "pytorch"]
|
|
authors = [
|
|
{email = "info@unsloth.ai"},
|
|
{name = "Unsloth AI team"},
|
|
]
|
|
maintainers = [
|
|
{name = "Daniel Han", email = "daniel@unsloth.ai"},
|
|
{name = "Michael Han", email = "info@unsloth.ai"},
|
|
]
|
|
classifiers = [
|
|
"Programming Language :: Python",
|
|
"Environment :: GPU",
|
|
"Environment :: GPU :: NVIDIA CUDA",
|
|
"Topic :: Scientific/Engineering :: Artificial Intelligence",
|
|
]
|
|
dependencies = [
|
|
"unsloth_zoo>=2026.7.6",
|
|
"wheel>=0.42.0",
|
|
"packaging",
|
|
"torch>=2.4.0,<2.12.0",
|
|
"torchvision",
|
|
"numpy",
|
|
"tqdm",
|
|
"psutil",
|
|
"tyro",
|
|
"protobuf",
|
|
"xformers>=0.0.27.post2 ; ('linux' in sys_platform or sys_platform == 'win32') and (platform_machine == 'AMD64' or platform_machine == 'x86_64')",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"triton>=3.0.0 ; ('linux' in sys_platform)",
|
|
"triton-windows ; (sys_platform == 'win32') and (platform_machine == 'AMD64' or platform_machine == 'x86_64')",
|
|
"sentencepiece>=0.2.0",
|
|
"datasets>=3.4.1,!=4.0.*,!=4.1.0,<4.4.0",
|
|
"accelerate>=0.34.1",
|
|
"peft>=0.18.0,!=0.11.0",
|
|
"huggingface_hub>=0.34.0",
|
|
"hf_transfer",
|
|
"diffusers",
|
|
"transformers>=4.51.3,!=4.52.0,!=4.52.1,!=4.52.2,!=4.52.3,!=4.53.0,!=4.54.0,!=4.55.0,!=4.55.1,!=4.57.0,!=4.57.4,!=4.57.5,!=5.0.0,!=5.1.0,<=5.5.0",
|
|
"trl>=0.18.2,!=0.19.0,<=0.24.0",
|
|
"typer>=0.12.0",
|
|
"pydantic",
|
|
"pyyaml",
|
|
"nest-asyncio",
|
|
# Every CLI command imports studio.backend.*, which reaches structlog at
|
|
# module level. The rest of the server stack lives in the studio extra.
|
|
"structlog>=24.1.0",
|
|
# unsloth_cli/commands/start.py imports click, and unsloth_cli/__init__.py
|
|
# imports that, so every command needs it. typer supplied it until 0.27
|
|
# dropped the dependency, which left this satisfied only by chance.
|
|
"click>=8.0",
|
|
# unsloth_cli/__init__.py imports commands/chat.py, which imports rich at
|
|
# module level, so every command needs it. typer still pulls rich, but it
|
|
# pulled click too until 0.26.0 dropped it: same shape, so declare it.
|
|
"rich",
|
|
]
|
|
|
|
[project.scripts]
|
|
unsloth = "unsloth_cli:app"
|
|
|
|
[tool.setuptools.dynamic]
|
|
version = {attr = "unsloth.models._utils.__version__"}
|
|
|
|
[tool.setuptools]
|
|
include-package-data = true
|
|
|
|
[tool.setuptools.package-data]
|
|
unsloth_cli = ["codex_fallback_prompt.md", "pi_subagent.ts"]
|
|
studio = [
|
|
"*.sh",
|
|
"*.ps1",
|
|
"*.bat",
|
|
"node_prebuilt_pins.json",
|
|
"frontend/dist/**/*",
|
|
"frontend/*.json",
|
|
"frontend/*.ts",
|
|
"frontend/*.js",
|
|
"frontend/*.html",
|
|
"frontend/*.yaml",
|
|
"frontend/.git*",
|
|
"backend/requirements/**/*",
|
|
"backend/plugins/**/*",
|
|
"backend/assets/**/*.jinja",
|
|
"backend/assets/**/*.html",
|
|
"backend/core/data_recipe/oxc-validator/*.json",
|
|
"backend/core/data_recipe/oxc-validator/*.mjs",
|
|
]
|
|
|
|
[tool.setuptools.packages.find]
|
|
include = ["unsloth*", "unsloth_cli*", "studio", "studio.backend*"]
|
|
exclude = ["images*", "tests*", "*.node_modules", "*.node_modules.*"]
|
|
|
|
[project.optional-dependencies]
|
|
# Studio's server stack. Mirrors studio/backend/requirements/studio.txt;
|
|
# test_studio_extra_matches_requirements.py catches drift.
|
|
studio = [
|
|
"typer",
|
|
"fastapi",
|
|
"uvicorn",
|
|
"pydantic",
|
|
"packaging",
|
|
"matplotlib==3.10.9",
|
|
"pandas",
|
|
"nest_asyncio",
|
|
"datasets==4.3.0",
|
|
"pyjwt",
|
|
"huggingface-hub==0.36.2",
|
|
"structlog>=24.1.0",
|
|
"diceware",
|
|
"ddgs",
|
|
"cryptography>=42.0.0",
|
|
"boto3>=1.34.0",
|
|
"httpx>=0.27.0",
|
|
"fastmcp>=3.0.2",
|
|
"sqlite-vec==0.1.9",
|
|
"pymupdf==1.27.2.3",
|
|
"pymupdf4llm==0.3.4",
|
|
"python-docx==1.2.0",
|
|
]
|
|
|
|
triton = [
|
|
"triton>=3.0.0 ; ('linux' in sys_platform)",
|
|
"triton-windows ; (sys_platform == 'win32') and (platform_machine == 'AMD64' or platform_machine == 'x86_64')",
|
|
]
|
|
huggingface = [
|
|
"unsloth_zoo>=2026.7.6",
|
|
"wheel>=0.42.0",
|
|
"packaging",
|
|
"torchvision",
|
|
"numpy",
|
|
"tqdm",
|
|
"psutil",
|
|
"tyro",
|
|
"protobuf",
|
|
"sentencepiece>=0.2.0",
|
|
"datasets>=3.4.1,!=4.0.*,!=4.1.0,<4.4.0",
|
|
"accelerate>=0.34.1",
|
|
"peft>=0.18.0,!=0.11.0",
|
|
"huggingface_hub>=0.34.0",
|
|
"hf_transfer",
|
|
"diffusers",
|
|
"transformers>=4.51.3,!=4.52.0,!=4.52.1,!=4.52.2,!=4.52.3,!=4.53.0,!=4.54.0,!=4.55.0,!=4.55.1,!=4.57.0,!=4.57.4,!=4.57.5,!=5.0.0,!=5.1.0,<=5.5.0",
|
|
"trl>=0.18.2,!=0.19.0,<=0.24.0",
|
|
"sentence-transformers",
|
|
"typer>=0.12.0",
|
|
"pydantic",
|
|
"pyyaml",
|
|
"nest-asyncio",
|
|
]
|
|
# "notorch" means this list declares no torch of its own, not that installing it
|
|
# leaves you torch-free: extras are additive to [project].dependencies, which on
|
|
# this branch deliberately carry the full runtime so a bare `pip install unsloth`
|
|
# works, and accelerate/peft/sentence-transformers each require torch anyway. The
|
|
# genuinely torch-free path is the installer's --no-deps pass over
|
|
# studio/backend/requirements/no-torch-runtime.txt, not plain pip resolution.
|
|
# Kept byte-identical to main so the two branches can be diffed for drift.
|
|
huggingfacenotorch = [
|
|
"unsloth_zoo>=2026.7.6",
|
|
"wheel>=0.42.0",
|
|
"packaging",
|
|
"numpy",
|
|
"tqdm",
|
|
"psutil",
|
|
"tyro",
|
|
"protobuf",
|
|
"sentencepiece>=0.2.0",
|
|
"datasets>=3.4.1,!=4.0.*,!=4.1.0,<4.4.0",
|
|
"accelerate>=0.34.1",
|
|
"peft>=0.18.0,!=0.11.0",
|
|
"huggingface_hub>=0.34.0",
|
|
"hf_transfer",
|
|
"diffusers",
|
|
"transformers>=4.51.3,!=4.52.0,!=4.52.1,!=4.52.2,!=4.52.3,!=4.53.0,!=4.54.0,!=4.55.0,!=4.55.1,!=4.57.0,!=4.57.4,!=4.57.5,!=5.0.0,!=5.1.0,<=5.5.0",
|
|
"trl>=0.18.2,!=0.19.0,<=0.24.0",
|
|
"sentence-transformers",
|
|
]
|
|
# What this extra does on this branch is raise the bitsandbytes floor; it does not
|
|
# hand you a ROCm stack. The base dependencies still apply, so ROCm torch has to
|
|
# come from the AMD index or already be installed (pip leaves an installed
|
|
# +rocm torch alone, since it satisfies the base specifier). Use install.sh or
|
|
# `unsloth studio install` for a torch-free AMD install.
|
|
amd = [
|
|
"unsloth[huggingfacenotorch]",
|
|
# 4-bit decode is unreliable on ROCm before 0.50.0, the first PyPI release
|
|
# carrying the full path: blocksize/warp decoupling (bnb #1887), fused SIMT
|
|
# GEMM on RDNA (#1979), RDNA3/4 workgroup fix (#2012). Keep in step with
|
|
# install.sh and studio/install_python_stack.py.
|
|
"bitsandbytes>=0.50.0 ; ('linux' in sys_platform) and (platform_machine == 'AMD64' or platform_machine == 'x86_64' or platform_machine == 'aarch64')",
|
|
"bitsandbytes>=0.50.0 ; (sys_platform == 'win32') and (platform_machine == 'AMD64' or platform_machine == 'x86_64')",
|
|
]
|
|
windows = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0 ; (sys_platform == 'win32')",
|
|
"xformers>=0.0.22.post7 ; (sys_platform == 'win32')",
|
|
]
|
|
base = [
|
|
"unsloth[huggingface]",
|
|
]
|
|
cu118only = [
|
|
"xformers==0.0.22.post7 ; ('linux' in sys_platform or sys_platform == 'win32') and (platform_machine == 'AMD64' or platform_machine == 'x86_64')",
|
|
]
|
|
cu121only = [
|
|
"xformers==0.0.22.post7 ; ('linux' in sys_platform or sys_platform == 'win32') and (platform_machine == 'AMD64' or platform_machine == 'x86_64')",
|
|
]
|
|
cu118onlytorch211 = [
|
|
"xformers==0.0.23 ; ('linux' in sys_platform or sys_platform == 'win32') and (platform_machine == 'AMD64' or platform_machine == 'x86_64')",
|
|
]
|
|
cu121onlytorch211 = [
|
|
"xformers==0.0.23 ; ('linux' in sys_platform or sys_platform == 'win32') and (platform_machine == 'AMD64' or platform_machine == 'x86_64')",
|
|
]
|
|
cu118onlytorch212 = [
|
|
"xformers==0.0.23.post1 ; ('linux' in sys_platform or sys_platform == 'win32') and (platform_machine == 'AMD64' or platform_machine == 'x86_64')",
|
|
]
|
|
cu121onlytorch212 = [
|
|
"xformers==0.0.23.post1 ; ('linux' in sys_platform or sys_platform == 'win32') and (platform_machine == 'AMD64' or platform_machine == 'x86_64')",
|
|
]
|
|
cu118onlytorch220 = [
|
|
"xformers==0.0.24 ; ('linux' in sys_platform or sys_platform == 'win32') and (platform_machine == 'AMD64' or platform_machine == 'x86_64')",
|
|
]
|
|
cu121onlytorch220 = [
|
|
"xformers==0.0.24 ; ('linux' in sys_platform or sys_platform == 'win32') and (platform_machine == 'AMD64' or platform_machine == 'x86_64')",
|
|
]
|
|
cu118onlytorch230 = [
|
|
"xformers==0.0.27 ; ('linux' in sys_platform or sys_platform == 'win32') and (platform_machine == 'AMD64' or platform_machine == 'x86_64')",
|
|
]
|
|
cu121onlytorch230 = [
|
|
"xformers==0.0.27 ; ('linux' in sys_platform or sys_platform == 'win32') and (platform_machine == 'AMD64' or platform_machine == 'x86_64')",
|
|
]
|
|
cu118onlytorch240 = [
|
|
"xformers==0.0.27.post2 ; ('linux' in sys_platform or sys_platform == 'win32') and (platform_machine == 'AMD64' or platform_machine == 'x86_64')",
|
|
]
|
|
cu121onlytorch240 = [
|
|
"xformers==0.0.27.post2 ; ('linux' in sys_platform or sys_platform == 'win32') and (platform_machine == 'AMD64' or platform_machine == 'x86_64')",
|
|
]
|
|
cu124onlytorch240 = [
|
|
"xformers==0.0.28.post1 ; ('linux' in sys_platform or sys_platform == 'win32') and (platform_machine == 'AMD64' or platform_machine == 'x86_64')",
|
|
]
|
|
cu118onlytorch250 = [
|
|
"xformers==0.0.28.post2 ; ('linux' in sys_platform or sys_platform == 'win32') and (platform_machine == 'AMD64' or platform_machine == 'x86_64')",
|
|
]
|
|
cu121onlytorch250 = [
|
|
"xformers==0.0.28.post2 ; ('linux' in sys_platform or sys_platform == 'win32') and (platform_machine == 'AMD64' or platform_machine == 'x86_64')",
|
|
]
|
|
cu124onlytorch250 = [
|
|
"xformers==0.0.28.post2 ; ('linux' in sys_platform or sys_platform == 'win32') and (platform_machine == 'AMD64' or platform_machine == 'x86_64')",
|
|
]
|
|
cu118onlytorch251 = [
|
|
"xformers==0.0.29.post1 ; ('linux' in sys_platform or sys_platform == 'win32') and (platform_machine == 'AMD64' or platform_machine == 'x86_64')",
|
|
]
|
|
cu121onlytorch251 = [
|
|
"xformers==0.0.29.post1 ; ('linux' in sys_platform or sys_platform == 'win32') and (platform_machine == 'AMD64' or platform_machine == 'x86_64')",
|
|
]
|
|
cu124onlytorch251 = [
|
|
"xformers==0.0.29.post1 ; ('linux' in sys_platform or sys_platform == 'win32') and (platform_machine == 'AMD64' or platform_machine == 'x86_64')",
|
|
]
|
|
cu118onlytorch260 = [
|
|
"xformers==0.0.29.post3 ; ('linux' in sys_platform or sys_platform == 'win32') and (platform_machine == 'AMD64' or platform_machine == 'x86_64')",
|
|
]
|
|
cu124onlytorch260 = [
|
|
"xformers==0.0.29.post3 ; ('linux' in sys_platform or sys_platform == 'win32') and (platform_machine == 'AMD64' or platform_machine == 'x86_64')",
|
|
]
|
|
cu126onlytorch260 = [
|
|
"xformers==0.0.29.post3 ; ('linux' in sys_platform or sys_platform == 'win32') and (platform_machine == 'AMD64' or platform_machine == 'x86_64')",
|
|
]
|
|
cu118onlytorch270 = [
|
|
"xformers==0.0.30 ; ('linux' in sys_platform or sys_platform == 'win32') and (platform_machine == 'AMD64' or platform_machine == 'x86_64')",
|
|
]
|
|
cu126onlytorch270 = [
|
|
"xformers==0.0.30 ; ('linux' in sys_platform or sys_platform == 'win32') and (platform_machine == 'AMD64' or platform_machine == 'x86_64')",
|
|
]
|
|
cu128onlytorch270 = [
|
|
"xformers==0.0.30 ; ('linux' in sys_platform or sys_platform == 'win32') and (platform_machine == 'AMD64' or platform_machine == 'x86_64')",
|
|
]
|
|
cu118onlytorch271 = [
|
|
"xformers==0.0.31.post1 ; ('linux' in sys_platform or sys_platform == 'win32') and (platform_machine == 'AMD64' or platform_machine == 'x86_64')",
|
|
]
|
|
cu126onlytorch271 = [
|
|
"xformers==0.0.31.post1 ; ('linux' in sys_platform or sys_platform == 'win32') and (platform_machine == 'AMD64' or platform_machine == 'x86_64')",
|
|
]
|
|
cu128onlytorch271 = [
|
|
"xformers==0.0.31.post1 ; ('linux' in sys_platform or sys_platform == 'win32') and (platform_machine == 'AMD64' or platform_machine == 'x86_64')",
|
|
]
|
|
cu118onlytorch280 = [
|
|
"xformers==0.0.32.post2 ; ('linux' in sys_platform or sys_platform == 'win32') and (platform_machine == 'AMD64' or platform_machine == 'x86_64')",
|
|
]
|
|
cu126onlytorch280 = [
|
|
"xformers==0.0.32.post2 ; ('linux' in sys_platform or sys_platform == 'win32') and (platform_machine == 'AMD64' or platform_machine == 'x86_64')",
|
|
]
|
|
cu128onlytorch280 = [
|
|
"xformers==0.0.32.post2 ; ('linux' in sys_platform or sys_platform == 'win32') and (platform_machine == 'AMD64' or platform_machine == 'x86_64')",
|
|
]
|
|
cu130onlytorch280 = [
|
|
]
|
|
cu126onlytorch290 = [
|
|
"xformers==0.0.33.post1 ; ('linux' in sys_platform or sys_platform == 'win32') and (platform_machine == 'AMD64' or platform_machine == 'x86_64')",
|
|
]
|
|
cu128onlytorch290 = [
|
|
"xformers==0.0.33.post1 ; ('linux' in sys_platform or sys_platform == 'win32') and (platform_machine == 'AMD64' or platform_machine == 'x86_64')",
|
|
]
|
|
cu130onlytorch290 = [
|
|
"xformers==0.0.33.post1 ; ('linux' in sys_platform or sys_platform == 'win32') and (platform_machine == 'AMD64' or platform_machine == 'x86_64')",
|
|
]
|
|
cu126onlytorch291 = [
|
|
"xformers==0.0.33.post2 ; ('linux' in sys_platform or sys_platform == 'win32') and (platform_machine == 'AMD64' or platform_machine == 'x86_64')",
|
|
]
|
|
cu128onlytorch291 = [
|
|
"xformers==0.0.33.post2 ; ('linux' in sys_platform or sys_platform == 'win32') and (platform_machine == 'AMD64' or platform_machine == 'x86_64')",
|
|
]
|
|
cu130onlytorch291 = [
|
|
"xformers==0.0.33.post2 ; ('linux' in sys_platform or sys_platform == 'win32') and (platform_machine == 'AMD64' or platform_machine == 'x86_64')",
|
|
]
|
|
cu126onlytorch2100 = [
|
|
"xformers==0.0.34 ; ('linux' in sys_platform or sys_platform == 'win32') and (platform_machine == 'AMD64' or platform_machine == 'x86_64')",
|
|
]
|
|
cu128onlytorch2100 = [
|
|
"xformers==0.0.34 ; ('linux' in sys_platform or sys_platform == 'win32') and (platform_machine == 'AMD64' or platform_machine == 'x86_64')",
|
|
]
|
|
cu130onlytorch2100 = [
|
|
"xformers==0.0.34 ; ('linux' in sys_platform or sys_platform == 'win32') and (platform_machine == 'AMD64' or platform_machine == 'x86_64')",
|
|
]
|
|
cu118 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu118only]",
|
|
]
|
|
cu121 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu121only]",
|
|
]
|
|
cu118-torch211 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu118onlytorch211]",
|
|
]
|
|
cu121-torch211 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu121onlytorch211]",
|
|
]
|
|
cu118-torch212 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu118onlytorch212]",
|
|
]
|
|
cu121-torch212 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu121onlytorch212]",
|
|
]
|
|
cu118-torch220 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu118onlytorch220]",
|
|
]
|
|
cu121-torch220 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu121onlytorch220]",
|
|
]
|
|
cu118-torch230 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu118onlytorch230]",
|
|
]
|
|
cu121-torch230 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu121onlytorch230]",
|
|
]
|
|
cu118-torch240 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu118onlytorch240]",
|
|
]
|
|
cu121-torch240 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu121onlytorch240]",
|
|
]
|
|
cu124-torch240 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu124onlytorch240]",
|
|
]
|
|
cu118-torch250 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu118onlytorch250]",
|
|
]
|
|
cu121-torch250 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu121onlytorch250]",
|
|
]
|
|
cu124-torch250 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu124onlytorch250]",
|
|
]
|
|
cu118-torch251 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu118onlytorch251]",
|
|
]
|
|
cu121-torch251 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu121onlytorch251]",
|
|
]
|
|
cu124-torch251 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu124onlytorch251]",
|
|
]
|
|
cu118-torch260 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.1",
|
|
"unsloth[cu118onlytorch260]",
|
|
]
|
|
cu124-torch260 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.1",
|
|
"unsloth[cu124onlytorch260]",
|
|
]
|
|
cu126-torch260 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.1",
|
|
"unsloth[cu126onlytorch260]",
|
|
]
|
|
cu118-torch270 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu118onlytorch270]",
|
|
]
|
|
cu126-torch270 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu126onlytorch270]",
|
|
]
|
|
cu128-torch270 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu128onlytorch270]",
|
|
]
|
|
cu118-torch271 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu118onlytorch271]",
|
|
]
|
|
cu126-torch271 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu126onlytorch271]",
|
|
]
|
|
cu128-torch271 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu128onlytorch271]",
|
|
]
|
|
cu118-torch280 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu118onlytorch280]",
|
|
]
|
|
cu126-torch280 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu126onlytorch280]",
|
|
]
|
|
cu128-torch280 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu128onlytorch280]",
|
|
]
|
|
cu130-torch280 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu130onlytorch280]",
|
|
]
|
|
cu126-torch290 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu126onlytorch290]",
|
|
]
|
|
cu128-torch290 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu128onlytorch290]",
|
|
]
|
|
cu130-torch290 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu130onlytorch290]",
|
|
]
|
|
cu126-torch291 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu126onlytorch291]",
|
|
]
|
|
cu128-torch291 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu128onlytorch291]",
|
|
]
|
|
cu130-torch291 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu130onlytorch291]",
|
|
]
|
|
cu126-torch2100 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu126onlytorch2100]",
|
|
"unsloth[audio-torch210]",
|
|
]
|
|
cu128-torch2100 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu128onlytorch2100]",
|
|
"unsloth[audio-torch210]",
|
|
]
|
|
cu130-torch2100 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu130onlytorch2100]",
|
|
"unsloth[audio-torch210]",
|
|
]
|
|
kaggle = [
|
|
"unsloth[huggingface]",
|
|
]
|
|
kaggle-new = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
]
|
|
conda = [
|
|
"unsloth[huggingface]",
|
|
]
|
|
colab-torch211 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu121onlytorch211]",
|
|
]
|
|
flashattention = [
|
|
"packaging ; ('linux' in sys_platform)",
|
|
"ninja ; ('linux' in sys_platform)",
|
|
"flash-attn>=2.6.3 ; ('linux' in sys_platform)",
|
|
]
|
|
# torchcodec is the audio decode path; its releases track torch minor versions,
|
|
# so each torch minor gets its own window (#7225). It publishes no sdist and only
|
|
# manylinux_2_28_x86_64, macosx_*_arm64 and win_amd64 wheels, so Linux aarch64,
|
|
# Windows ARM64 and Intel Mac have nothing to resolve and pip would hard-fail the
|
|
# whole install. Gate on the platforms that have a wheel, matching
|
|
# PLATFORM_LACKS_TORCHCODEC_WHEEL in studio/install_python_stack.py.
|
|
audio-torch280 = [
|
|
"torchcodec>=0.6.0,<0.8.0 ; python_version >= '3.9' and (((sys_platform == 'linux' or sys_platform == 'win32') and (platform_machine == 'x86_64' or platform_machine == 'AMD64')) or (sys_platform == 'darwin' and platform_machine == 'arm64'))",
|
|
]
|
|
audio-torch290 = [
|
|
"torchcodec>=0.8.0,<0.10.0 ; python_version >= '3.10' and (((sys_platform == 'linux' or sys_platform == 'win32') and (platform_machine == 'x86_64' or platform_machine == 'AMD64')) or (sys_platform == 'darwin' and platform_machine == 'arm64'))",
|
|
]
|
|
audio-torch210 = [
|
|
"torchcodec>=0.10.0,<0.11.0 ; python_version >= '3.10' and (((sys_platform == 'linux' or sys_platform == 'win32') and (platform_machine == 'x86_64' or platform_machine == 'AMD64')) or (sys_platform == 'darwin' and platform_machine == 'arm64'))",
|
|
]
|
|
colab-ampere-torch211 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu121onlytorch211]",
|
|
"unsloth[flashattention]",
|
|
]
|
|
colab-torch220 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu121onlytorch220]",
|
|
]
|
|
colab-ampere-torch220 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu121onlytorch220]",
|
|
"unsloth[flashattention]",
|
|
]
|
|
colab-new = [
|
|
"unsloth_zoo>=2026.7.6",
|
|
"packaging",
|
|
"tyro",
|
|
"transformers>=4.51.3,!=4.52.0,!=4.52.1,!=4.52.2,!=4.52.3,!=4.53.0,!=4.54.0,!=4.55.0,!=4.55.1,!=4.57.0,!=4.57.4,!=4.57.5,!=5.0.0,!=5.1.0,<=5.5.0",
|
|
"datasets>=3.4.1,!=4.0.*,!=4.1.0,<4.4.0",
|
|
"sentencepiece>=0.2.0",
|
|
"tqdm",
|
|
"psutil",
|
|
"wheel>=0.42.0",
|
|
"numpy",
|
|
"protobuf",
|
|
"huggingface_hub>=0.34.0",
|
|
"hf_transfer",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[triton]",
|
|
"sentence-transformers",
|
|
"typer>=0.12.0",
|
|
"pydantic",
|
|
"pyyaml",
|
|
"nest-asyncio",
|
|
]
|
|
colab-no-deps = [
|
|
"accelerate>=0.34.1",
|
|
"trl>=0.18.2,!=0.19.0,<=0.24.0",
|
|
"peft>=0.18.0",
|
|
"xformers ; ('linux' in sys_platform or sys_platform == 'win32') and (platform_machine == 'AMD64' or platform_machine == 'x86_64')",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"protobuf",
|
|
]
|
|
colab = [
|
|
"unsloth[cu121]",
|
|
]
|
|
colab-ampere = [
|
|
"unsloth[colab-ampere-torch220]",
|
|
"unsloth[flashattention]",
|
|
]
|
|
cu118-ampere = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu118only]",
|
|
"unsloth[flashattention]",
|
|
]
|
|
cu121-ampere = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu121only]",
|
|
"unsloth[flashattention]",
|
|
]
|
|
cu118-ampere-torch211 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu118onlytorch211]",
|
|
"unsloth[flashattention]",
|
|
]
|
|
cu121-ampere-torch211 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu121onlytorch211]",
|
|
"unsloth[flashattention]",
|
|
]
|
|
cu118-ampere-torch220 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu118onlytorch220]",
|
|
"unsloth[flashattention]",
|
|
]
|
|
cu121-ampere-torch220 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu121onlytorch220]",
|
|
"unsloth[flashattention]",
|
|
]
|
|
cu118-ampere-torch230 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu118onlytorch230]",
|
|
"unsloth[flashattention]",
|
|
]
|
|
cu121-ampere-torch230 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu121onlytorch230]",
|
|
"unsloth[flashattention]",
|
|
]
|
|
cu118-ampere-torch240 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu118onlytorch240]",
|
|
"unsloth[flashattention]",
|
|
]
|
|
cu121-ampere-torch240 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu121onlytorch240]",
|
|
"unsloth[flashattention]",
|
|
]
|
|
cu124-ampere-torch240 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu124onlytorch240]",
|
|
"unsloth[flashattention]",
|
|
]
|
|
cu118-ampere-torch250 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu118onlytorch250]",
|
|
"unsloth[flashattention]",
|
|
]
|
|
cu121-ampere-torch250 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu121onlytorch250]",
|
|
"unsloth[flashattention]",
|
|
]
|
|
cu124-ampere-torch250 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu124onlytorch250]",
|
|
"unsloth[flashattention]",
|
|
]
|
|
cu118-ampere-torch251 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu118onlytorch251]",
|
|
"unsloth[flashattention]",
|
|
]
|
|
cu121-ampere-torch251 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu121onlytorch251]",
|
|
"unsloth[flashattention]",
|
|
]
|
|
cu124-ampere-torch251 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu124onlytorch251]",
|
|
"unsloth[flashattention]",
|
|
]
|
|
cu118-ampere-torch260 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.1",
|
|
"unsloth[cu118onlytorch260]",
|
|
"unsloth[flashattention]",
|
|
]
|
|
cu124-ampere-torch260 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.1",
|
|
"unsloth[cu124onlytorch260]",
|
|
"unsloth[flashattention]",
|
|
]
|
|
cu126-ampere-torch260 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.1",
|
|
"unsloth[cu126onlytorch260]",
|
|
"unsloth[flashattention]",
|
|
]
|
|
cu118-ampere-torch270 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu118onlytorch270]",
|
|
"unsloth[flashattention]",
|
|
]
|
|
cu126-ampere-torch270 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu126onlytorch270]",
|
|
"unsloth[flashattention]",
|
|
]
|
|
cu128-ampere-torch270 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu128onlytorch270]",
|
|
"unsloth[flashattention]",
|
|
]
|
|
cu118-ampere-torch271 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu118onlytorch271]",
|
|
"unsloth[flashattention]",
|
|
]
|
|
cu126-ampere-torch271 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu126onlytorch271]",
|
|
"unsloth[flashattention]",
|
|
]
|
|
cu128-ampere-torch271 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu128onlytorch271]",
|
|
"unsloth[flashattention]",
|
|
]
|
|
cu118-ampere-torch280 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu118onlytorch280]",
|
|
"unsloth[flashattention]",
|
|
]
|
|
cu126-ampere-torch280 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu126onlytorch280]",
|
|
"unsloth[flashattention]",
|
|
]
|
|
cu128-ampere-torch280 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu128onlytorch280]",
|
|
"unsloth[flashattention]",
|
|
]
|
|
cu130-ampere-torch280 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu130onlytorch280]",
|
|
"unsloth[flashattention]",
|
|
]
|
|
cu126-ampere-torch290 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu126onlytorch290]",
|
|
]
|
|
cu128-ampere-torch290 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu128onlytorch290]",
|
|
]
|
|
cu130-ampere-torch290 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu130onlytorch290]",
|
|
]
|
|
cu126-ampere-torch291 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu126onlytorch291]",
|
|
]
|
|
cu128-ampere-torch291 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu128onlytorch291]",
|
|
]
|
|
cu130-ampere-torch291 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu130onlytorch291]",
|
|
]
|
|
cu126-ampere-torch2100 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu126onlytorch2100]",
|
|
"unsloth[audio-torch210]",
|
|
]
|
|
cu128-ampere-torch2100 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu128onlytorch2100]",
|
|
"unsloth[audio-torch210]",
|
|
]
|
|
cu130-ampere-torch2100 = [
|
|
"unsloth[huggingface]",
|
|
"bitsandbytes>=0.45.5,!=0.46.0,!=0.48.0",
|
|
"unsloth[cu130onlytorch2100]",
|
|
"unsloth[audio-torch210]",
|
|
]
|
|
|
|
[project.urls]
|
|
homepage = "https://unsloth.ai"
|
|
documentation = "https://unsloth.ai/docs"
|
|
repository = "https://github.com/unslothai/unsloth"
|
|
|
|
[tool.ruff]
|
|
target-version = "py311"
|
|
line-length = 100
|
|
force-exclude = true
|
|
extend-exclude = [
|
|
"*chat_templates.py",
|
|
"*ollama_template_mappers.py",
|
|
"*_auto_install.py",
|
|
"*mapper.py",
|
|
]
|
|
|
|
[tool.ruff.lint]
|
|
select = ["E9", "F63", "F7", "F82"]
|
|
ignore = [
|
|
"E402",
|
|
"E722",
|
|
"F403",
|
|
"F405",
|
|
"F811",
|
|
"F821",
|
|
"F841",
|
|
"F401",
|
|
"E731",
|
|
"E741",
|
|
"F601",
|
|
"E712",
|
|
]
|
|
|
|
[tool.ruff.format]
|
|
|
|
[tool.pytest.ini_options]
|
|
# Narrow the default test discovery so `pytest` from the repo root
|
|
# does NOT pick up the GPU-heavy tests under tests/python, tests/qlora,
|
|
# etc. The CI security job runs `pytest tests/security` explicitly.
|
|
pythonpath = ["."]
|
|
testpaths = ["tests/security"]
|