Metadata-Version: 2.4
Name: unsloth
Version: 2026.3.12
Summary: 2-5X faster training, reinforcement learning & finetuning
Author: Unsloth AI team
Author-email: info@unsloth.ai
Maintainer-email: Daniel Han <daniel@unsloth.ai>, Michael Han <info@unsloth.ai>
License-Expression: Apache-2.0
Project-URL: homepage, https://unsloth.ai
Project-URL: documentation, https://unsloth.ai/docs
Project-URL: repository, https://github.com/unslothai/unsloth
Keywords: ai,llm,reinforcement learning,machine learning,artificial intelligence,pytorch
Classifier: Programming Language :: Python
Classifier: Environment :: GPU
Classifier: Environment :: GPU :: NVIDIA CUDA
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Requires-Python: <3.15,>=3.9
Description-Content-Type: text/markdown
License-File: LICENSE
License-File: COPYING
Requires-Dist: unsloth_zoo>=2026.3.4
Requires-Dist: wheel>=0.42.0
Requires-Dist: packaging
Requires-Dist: torch<2.11.0,>=2.4.0
Requires-Dist: torchvision
Requires-Dist: numpy
Requires-Dist: tqdm
Requires-Dist: psutil
Requires-Dist: tyro
Requires-Dist: protobuf
Requires-Dist: xformers>=0.0.27.post2; ("linux" in sys_platform or sys_platform == "win32") and (platform_machine == "AMD64" or platform_machine == "x86_64")
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5
Requires-Dist: triton>=3.0.0; "linux" in sys_platform
Requires-Dist: triton-windows; sys_platform == "win32" and (platform_machine == "AMD64" or platform_machine == "x86_64")
Requires-Dist: sentencepiece>=0.2.0
Requires-Dist: datasets!=4.0.*,!=4.1.0,<4.4.0,>=3.4.1
Requires-Dist: accelerate>=0.34.1
Requires-Dist: peft!=0.11.0,>=0.18.0
Requires-Dist: huggingface_hub>=0.34.0
Requires-Dist: hf_transfer
Requires-Dist: diffusers
Requires-Dist: transformers!=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.3.0,>=4.51.3
Requires-Dist: trl!=0.19.0,<=0.24.0,>=0.18.2
Requires-Dist: typer
Requires-Dist: pydantic
Requires-Dist: pyyaml
Requires-Dist: nest-asyncio
Provides-Extra: huggingface
Requires-Dist: unsloth_zoo>=2026.3.4; extra == "huggingface"
Requires-Dist: wheel>=0.42.0; extra == "huggingface"
Requires-Dist: packaging; extra == "huggingface"
Requires-Dist: torchvision; extra == "huggingface"
Requires-Dist: numpy; extra == "huggingface"
Requires-Dist: tqdm; extra == "huggingface"
Requires-Dist: psutil; extra == "huggingface"
Requires-Dist: tyro; extra == "huggingface"
Requires-Dist: protobuf; extra == "huggingface"
Requires-Dist: sentencepiece>=0.2.0; extra == "huggingface"
Requires-Dist: datasets!=4.0.*,!=4.1.0,<4.4.0,>=3.4.1; extra == "huggingface"
Requires-Dist: accelerate>=0.34.1; extra == "huggingface"
Requires-Dist: peft!=0.11.0,>=0.18.0; extra == "huggingface"
Requires-Dist: huggingface_hub>=0.34.0; extra == "huggingface"
Requires-Dist: hf_transfer; extra == "huggingface"
Requires-Dist: diffusers; extra == "huggingface"
Requires-Dist: transformers!=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.3.0,>=4.51.3; extra == "huggingface"
Requires-Dist: trl!=0.19.0,<=0.24.0,>=0.18.2; extra == "huggingface"
Requires-Dist: typer; extra == "huggingface"
Requires-Dist: pydantic; extra == "huggingface"
Requires-Dist: pyyaml; extra == "huggingface"
Requires-Dist: nest-asyncio; extra == "huggingface"
Provides-Extra: base
Requires-Dist: unsloth[huggingface]; extra == "base"
Provides-Extra: cu118only
Requires-Dist: xformers==0.0.22.post7; (("linux" in sys_platform or sys_platform == "win32") and (platform_machine == "AMD64" or platform_machine == "x86_64")) and extra == "cu118only"
Provides-Extra: cu121only
Requires-Dist: xformers==0.0.22.post7; (("linux" in sys_platform or sys_platform == "win32") and (platform_machine == "AMD64" or platform_machine == "x86_64")) and extra == "cu121only"
Provides-Extra: cu118onlytorch211
Requires-Dist: xformers==0.0.23; (("linux" in sys_platform or sys_platform == "win32") and (platform_machine == "AMD64" or platform_machine == "x86_64")) and extra == "cu118onlytorch211"
Provides-Extra: cu121onlytorch211
Requires-Dist: xformers==0.0.23; (("linux" in sys_platform or sys_platform == "win32") and (platform_machine == "AMD64" or platform_machine == "x86_64")) and extra == "cu121onlytorch211"
Provides-Extra: cu118onlytorch212
Requires-Dist: xformers==0.0.23.post1; (("linux" in sys_platform or sys_platform == "win32") and (platform_machine == "AMD64" or platform_machine == "x86_64")) and extra == "cu118onlytorch212"
Provides-Extra: cu121onlytorch212
Requires-Dist: xformers==0.0.23.post1; (("linux" in sys_platform or sys_platform == "win32") and (platform_machine == "AMD64" or platform_machine == "x86_64")) and extra == "cu121onlytorch212"
Provides-Extra: cu118onlytorch220
Requires-Dist: xformers==0.0.24; (("linux" in sys_platform or sys_platform == "win32") and (platform_machine == "AMD64" or platform_machine == "x86_64")) and extra == "cu118onlytorch220"
Provides-Extra: cu121onlytorch220
Requires-Dist: xformers==0.0.24; (("linux" in sys_platform or sys_platform == "win32") and (platform_machine == "AMD64" or platform_machine == "x86_64")) and extra == "cu121onlytorch220"
Provides-Extra: cu118onlytorch230
Requires-Dist: xformers==0.0.27; (("linux" in sys_platform or sys_platform == "win32") and (platform_machine == "AMD64" or platform_machine == "x86_64")) and extra == "cu118onlytorch230"
Provides-Extra: cu121onlytorch230
Requires-Dist: xformers==0.0.27; (("linux" in sys_platform or sys_platform == "win32") and (platform_machine == "AMD64" or platform_machine == "x86_64")) and extra == "cu121onlytorch230"
Provides-Extra: cu118onlytorch240
Requires-Dist: xformers==0.0.27.post2; (("linux" in sys_platform or sys_platform == "win32") and (platform_machine == "AMD64" or platform_machine == "x86_64")) and extra == "cu118onlytorch240"
Provides-Extra: cu121onlytorch240
Requires-Dist: xformers==0.0.27.post2; (("linux" in sys_platform or sys_platform == "win32") and (platform_machine == "AMD64" or platform_machine == "x86_64")) and extra == "cu121onlytorch240"
Provides-Extra: cu118onlytorch250
Requires-Dist: xformers==0.0.28.post2; (("linux" in sys_platform or sys_platform == "win32") and (platform_machine == "AMD64" or platform_machine == "x86_64")) and extra == "cu118onlytorch250"
Provides-Extra: cu121onlytorch250
Requires-Dist: xformers==0.0.28.post2; (("linux" in sys_platform or sys_platform == "win32") and (platform_machine == "AMD64" or platform_machine == "x86_64")) and extra == "cu121onlytorch250"
Provides-Extra: cu124onlytorch250
Requires-Dist: xformers==0.0.28.post2; (("linux" in sys_platform or sys_platform == "win32") and (platform_machine == "AMD64" or platform_machine == "x86_64")) and extra == "cu124onlytorch250"
Provides-Extra: cu118onlytorch251
Requires-Dist: xformers==0.0.29.post1; (("linux" in sys_platform or sys_platform == "win32") and (platform_machine == "AMD64" or platform_machine == "x86_64")) and extra == "cu118onlytorch251"
Provides-Extra: cu121onlytorch251
Requires-Dist: xformers==0.0.29.post1; (("linux" in sys_platform or sys_platform == "win32") and (platform_machine == "AMD64" or platform_machine == "x86_64")) and extra == "cu121onlytorch251"
Provides-Extra: cu124onlytorch251
Requires-Dist: xformers==0.0.29.post1; (("linux" in sys_platform or sys_platform == "win32") and (platform_machine == "AMD64" or platform_machine == "x86_64")) and extra == "cu124onlytorch251"
Provides-Extra: cu118onlytorch260
Requires-Dist: xformers==0.0.29.post3; (("linux" in sys_platform or sys_platform == "win32") and (platform_machine == "AMD64" or platform_machine == "x86_64")) and extra == "cu118onlytorch260"
Provides-Extra: cu124onlytorch260
Requires-Dist: xformers==0.0.29.post3; (("linux" in sys_platform or sys_platform == "win32") and (platform_machine == "AMD64" or platform_machine == "x86_64")) and extra == "cu124onlytorch260"
Provides-Extra: cu126onlytorch260
Requires-Dist: xformers==0.0.29.post3; (("linux" in sys_platform or sys_platform == "win32") and (platform_machine == "AMD64" or platform_machine == "x86_64")) and extra == "cu126onlytorch260"
Provides-Extra: cu118onlytorch270
Requires-Dist: xformers==0.0.30; (("linux" in sys_platform or sys_platform == "win32") and (platform_machine == "AMD64" or platform_machine == "x86_64")) and extra == "cu118onlytorch270"
Provides-Extra: cu126onlytorch270
Requires-Dist: xformers==0.0.30; (("linux" in sys_platform or sys_platform == "win32") and (platform_machine == "AMD64" or platform_machine == "x86_64")) and extra == "cu126onlytorch270"
Provides-Extra: cu128onlytorch270
Requires-Dist: xformers==0.0.30; (("linux" in sys_platform or sys_platform == "win32") and (platform_machine == "AMD64" or platform_machine == "x86_64")) and extra == "cu128onlytorch270"
Provides-Extra: cu118onlytorch271
Requires-Dist: xformers==0.0.31.post1; (("linux" in sys_platform or sys_platform == "win32") and (platform_machine == "AMD64" or platform_machine == "x86_64")) and extra == "cu118onlytorch271"
Provides-Extra: cu126onlytorch271
Requires-Dist: xformers==0.0.31.post1; (("linux" in sys_platform or sys_platform == "win32") and (platform_machine == "AMD64" or platform_machine == "x86_64")) and extra == "cu126onlytorch271"
Provides-Extra: cu128onlytorch271
Requires-Dist: xformers==0.0.31.post1; (("linux" in sys_platform or sys_platform == "win32") and (platform_machine == "AMD64" or platform_machine == "x86_64")) and extra == "cu128onlytorch271"
Provides-Extra: cu118onlytorch280
Requires-Dist: xformers==0.0.32.post2; (("linux" in sys_platform or sys_platform == "win32") and (platform_machine == "AMD64" or platform_machine == "x86_64")) and extra == "cu118onlytorch280"
Provides-Extra: cu126onlytorch280
Requires-Dist: xformers==0.0.32.post2; (("linux" in sys_platform or sys_platform == "win32") and (platform_machine == "AMD64" or platform_machine == "x86_64")) and extra == "cu126onlytorch280"
Provides-Extra: cu128onlytorch280
Requires-Dist: xformers==0.0.32.post2; (("linux" in sys_platform or sys_platform == "win32") and (platform_machine == "AMD64" or platform_machine == "x86_64")) and extra == "cu128onlytorch280"
Provides-Extra: cu130onlytorch280
Provides-Extra: cu126onlytorch290
Requires-Dist: xformers==0.0.33.post1; (("linux" in sys_platform or sys_platform == "win32") and (platform_machine == "AMD64" or platform_machine == "x86_64")) and extra == "cu126onlytorch290"
Provides-Extra: cu128onlytorch290
Requires-Dist: xformers==0.0.33.post1; (("linux" in sys_platform or sys_platform == "win32") and (platform_machine == "AMD64" or platform_machine == "x86_64")) and extra == "cu128onlytorch290"
Provides-Extra: cu130onlytorch290
Requires-Dist: xformers==0.0.33.post1; (("linux" in sys_platform or sys_platform == "win32") and (platform_machine == "AMD64" or platform_machine == "x86_64")) and extra == "cu130onlytorch290"
Provides-Extra: cu126onlytorch291
Requires-Dist: xformers==0.0.33.post2; (("linux" in sys_platform or sys_platform == "win32") and (platform_machine == "AMD64" or platform_machine == "x86_64")) and extra == "cu126onlytorch291"
Provides-Extra: cu128onlytorch291
Requires-Dist: xformers==0.0.33.post2; (("linux" in sys_platform or sys_platform == "win32") and (platform_machine == "AMD64" or platform_machine == "x86_64")) and extra == "cu128onlytorch291"
Provides-Extra: cu130onlytorch291
Requires-Dist: xformers==0.0.33.post2; (("linux" in sys_platform or sys_platform == "win32") and (platform_machine == "AMD64" or platform_machine == "x86_64")) and extra == "cu130onlytorch291"
Provides-Extra: cu126onlytorch2100
Requires-Dist: xformers==0.0.34; (("linux" in sys_platform or sys_platform == "win32") and (platform_machine == "AMD64" or platform_machine == "x86_64")) and extra == "cu126onlytorch2100"
Provides-Extra: cu128onlytorch2100
Requires-Dist: xformers==0.0.34; (("linux" in sys_platform or sys_platform == "win32") and (platform_machine == "AMD64" or platform_machine == "x86_64")) and extra == "cu128onlytorch2100"
Provides-Extra: cu130onlytorch2100
Requires-Dist: xformers==0.0.34; (("linux" in sys_platform or sys_platform == "win32") and (platform_machine == "AMD64" or platform_machine == "x86_64")) and extra == "cu130onlytorch2100"
Provides-Extra: cu118
Requires-Dist: unsloth[huggingface]; extra == "cu118"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu118"
Requires-Dist: unsloth[cu118only]; extra == "cu118"
Provides-Extra: cu121
Requires-Dist: unsloth[huggingface]; extra == "cu121"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu121"
Requires-Dist: unsloth[cu121only]; extra == "cu121"
Provides-Extra: cu118-torch211
Requires-Dist: unsloth[huggingface]; extra == "cu118-torch211"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu118-torch211"
Requires-Dist: unsloth[cu118onlytorch211]; extra == "cu118-torch211"
Provides-Extra: cu121-torch211
Requires-Dist: unsloth[huggingface]; extra == "cu121-torch211"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu121-torch211"
Requires-Dist: unsloth[cu121onlytorch211]; extra == "cu121-torch211"
Provides-Extra: cu118-torch212
Requires-Dist: unsloth[huggingface]; extra == "cu118-torch212"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu118-torch212"
Requires-Dist: unsloth[cu118onlytorch212]; extra == "cu118-torch212"
Provides-Extra: cu121-torch212
Requires-Dist: unsloth[huggingface]; extra == "cu121-torch212"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu121-torch212"
Requires-Dist: unsloth[cu121onlytorch212]; extra == "cu121-torch212"
Provides-Extra: cu118-torch220
Requires-Dist: unsloth[huggingface]; extra == "cu118-torch220"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu118-torch220"
Requires-Dist: unsloth[cu118onlytorch220]; extra == "cu118-torch220"
Provides-Extra: cu121-torch220
Requires-Dist: unsloth[huggingface]; extra == "cu121-torch220"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu121-torch220"
Requires-Dist: unsloth[cu121onlytorch220]; extra == "cu121-torch220"
Provides-Extra: cu118-torch230
Requires-Dist: unsloth[huggingface]; extra == "cu118-torch230"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu118-torch230"
Requires-Dist: unsloth[cu118onlytorch230]; extra == "cu118-torch230"
Provides-Extra: cu121-torch230
Requires-Dist: unsloth[huggingface]; extra == "cu121-torch230"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu121-torch230"
Requires-Dist: unsloth[cu121onlytorch230]; extra == "cu121-torch230"
Provides-Extra: cu118-torch240
Requires-Dist: unsloth[huggingface]; extra == "cu118-torch240"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu118-torch240"
Requires-Dist: unsloth[cu118onlytorch240]; extra == "cu118-torch240"
Provides-Extra: cu121-torch240
Requires-Dist: unsloth[huggingface]; extra == "cu121-torch240"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu121-torch240"
Requires-Dist: unsloth[cu121onlytorch240]; extra == "cu121-torch240"
Provides-Extra: cu124-torch240
Requires-Dist: unsloth[huggingface]; extra == "cu124-torch240"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu124-torch240"
Requires-Dist: unsloth[cu124onlytorch240]; extra == "cu124-torch240"
Provides-Extra: cu118-torch250
Requires-Dist: unsloth[huggingface]; extra == "cu118-torch250"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu118-torch250"
Requires-Dist: unsloth[cu118onlytorch250]; extra == "cu118-torch250"
Provides-Extra: cu121-torch250
Requires-Dist: unsloth[huggingface]; extra == "cu121-torch250"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu121-torch250"
Requires-Dist: unsloth[cu121onlytorch250]; extra == "cu121-torch250"
Provides-Extra: cu124-torch250
Requires-Dist: unsloth[huggingface]; extra == "cu124-torch250"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu124-torch250"
Requires-Dist: unsloth[cu124onlytorch250]; extra == "cu124-torch250"
Provides-Extra: cu118-torch251
Requires-Dist: unsloth[huggingface]; extra == "cu118-torch251"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu118-torch251"
Requires-Dist: unsloth[cu118onlytorch251]; extra == "cu118-torch251"
Provides-Extra: cu121-torch251
Requires-Dist: unsloth[huggingface]; extra == "cu121-torch251"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu121-torch251"
Requires-Dist: unsloth[cu121onlytorch251]; extra == "cu121-torch251"
Provides-Extra: cu124-torch251
Requires-Dist: unsloth[huggingface]; extra == "cu124-torch251"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu124-torch251"
Requires-Dist: unsloth[cu124onlytorch251]; extra == "cu124-torch251"
Provides-Extra: cu118-torch260
Requires-Dist: unsloth[huggingface]; extra == "cu118-torch260"
Requires-Dist: bitsandbytes>=0.45.1; extra == "cu118-torch260"
Requires-Dist: unsloth[cu118onlytorch260]; extra == "cu118-torch260"
Provides-Extra: cu124-torch260
Requires-Dist: unsloth[huggingface]; extra == "cu124-torch260"
Requires-Dist: bitsandbytes>=0.45.1; extra == "cu124-torch260"
Requires-Dist: unsloth[cu124onlytorch260]; extra == "cu124-torch260"
Provides-Extra: cu126-torch260
Requires-Dist: unsloth[huggingface]; extra == "cu126-torch260"
Requires-Dist: bitsandbytes>=0.45.1; extra == "cu126-torch260"
Requires-Dist: unsloth[cu126onlytorch260]; extra == "cu126-torch260"
Provides-Extra: cu118-torch270
Requires-Dist: unsloth[huggingface]; extra == "cu118-torch270"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu118-torch270"
Requires-Dist: unsloth[cu118onlytorch270]; extra == "cu118-torch270"
Provides-Extra: cu126-torch270
Requires-Dist: unsloth[huggingface]; extra == "cu126-torch270"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu126-torch270"
Requires-Dist: unsloth[cu126onlytorch270]; extra == "cu126-torch270"
Provides-Extra: cu128-torch270
Requires-Dist: unsloth[huggingface]; extra == "cu128-torch270"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu128-torch270"
Requires-Dist: unsloth[cu128onlytorch270]; extra == "cu128-torch270"
Provides-Extra: cu118-torch271
Requires-Dist: unsloth[huggingface]; extra == "cu118-torch271"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu118-torch271"
Requires-Dist: unsloth[cu118onlytorch271]; extra == "cu118-torch271"
Provides-Extra: cu126-torch271
Requires-Dist: unsloth[huggingface]; extra == "cu126-torch271"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu126-torch271"
Requires-Dist: unsloth[cu126onlytorch271]; extra == "cu126-torch271"
Provides-Extra: cu128-torch271
Requires-Dist: unsloth[huggingface]; extra == "cu128-torch271"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu128-torch271"
Requires-Dist: unsloth[cu128onlytorch271]; extra == "cu128-torch271"
Provides-Extra: cu118-torch280
Requires-Dist: unsloth[huggingface]; extra == "cu118-torch280"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu118-torch280"
Requires-Dist: unsloth[cu118onlytorch280]; extra == "cu118-torch280"
Provides-Extra: cu126-torch280
Requires-Dist: unsloth[huggingface]; extra == "cu126-torch280"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu126-torch280"
Requires-Dist: unsloth[cu126onlytorch280]; extra == "cu126-torch280"
Provides-Extra: cu128-torch280
Requires-Dist: unsloth[huggingface]; extra == "cu128-torch280"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu128-torch280"
Requires-Dist: unsloth[cu128onlytorch280]; extra == "cu128-torch280"
Provides-Extra: cu130-torch280
Requires-Dist: unsloth[huggingface]; extra == "cu130-torch280"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu130-torch280"
Requires-Dist: unsloth[cu130onlytorch280]; extra == "cu130-torch280"
Provides-Extra: cu126-torch290
Requires-Dist: unsloth[huggingface]; extra == "cu126-torch290"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu126-torch290"
Requires-Dist: unsloth[cu126onlytorch290]; extra == "cu126-torch290"
Provides-Extra: cu128-torch290
Requires-Dist: unsloth[huggingface]; extra == "cu128-torch290"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu128-torch290"
Requires-Dist: unsloth[cu128onlytorch290]; extra == "cu128-torch290"
Provides-Extra: cu130-torch290
Requires-Dist: unsloth[huggingface]; extra == "cu130-torch290"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu130-torch290"
Requires-Dist: unsloth[cu130onlytorch290]; extra == "cu130-torch290"
Provides-Extra: cu126-torch291
Requires-Dist: unsloth[huggingface]; extra == "cu126-torch291"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu126-torch291"
Requires-Dist: unsloth[cu126onlytorch291]; extra == "cu126-torch291"
Provides-Extra: cu128-torch291
Requires-Dist: unsloth[huggingface]; extra == "cu128-torch291"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu128-torch291"
Requires-Dist: unsloth[cu128onlytorch291]; extra == "cu128-torch291"
Provides-Extra: cu130-torch291
Requires-Dist: unsloth[huggingface]; extra == "cu130-torch291"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu130-torch291"
Requires-Dist: unsloth[cu130onlytorch291]; extra == "cu130-torch291"
Provides-Extra: cu126-torch2100
Requires-Dist: unsloth[huggingface]; extra == "cu126-torch2100"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu126-torch2100"
Requires-Dist: unsloth[cu126onlytorch2100]; extra == "cu126-torch2100"
Provides-Extra: cu128-torch2100
Requires-Dist: unsloth[huggingface]; extra == "cu128-torch2100"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu128-torch2100"
Requires-Dist: unsloth[cu128onlytorch2100]; extra == "cu128-torch2100"
Provides-Extra: cu130-torch2100
Requires-Dist: unsloth[huggingface]; extra == "cu130-torch2100"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu130-torch2100"
Requires-Dist: unsloth[cu130onlytorch2100]; extra == "cu130-torch2100"
Provides-Extra: kaggle
Requires-Dist: unsloth[huggingface]; extra == "kaggle"
Provides-Extra: kaggle-new
Requires-Dist: unsloth[huggingface]; extra == "kaggle-new"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "kaggle-new"
Provides-Extra: conda
Requires-Dist: unsloth[huggingface]; extra == "conda"
Provides-Extra: colab-torch211
Requires-Dist: unsloth[huggingface]; extra == "colab-torch211"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "colab-torch211"
Requires-Dist: unsloth[cu121onlytorch211]; extra == "colab-torch211"
Provides-Extra: flashattention
Requires-Dist: packaging; "linux" in sys_platform and extra == "flashattention"
Requires-Dist: ninja; "linux" in sys_platform and extra == "flashattention"
Requires-Dist: flash-attn>=2.6.3; "linux" in sys_platform and extra == "flashattention"
Provides-Extra: colab-ampere-torch211
Requires-Dist: unsloth[huggingface]; extra == "colab-ampere-torch211"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "colab-ampere-torch211"
Requires-Dist: unsloth[cu121onlytorch211]; extra == "colab-ampere-torch211"
Requires-Dist: unsloth[flashattention]; extra == "colab-ampere-torch211"
Provides-Extra: colab-torch220
Requires-Dist: unsloth[huggingface]; extra == "colab-torch220"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "colab-torch220"
Requires-Dist: unsloth[cu121onlytorch220]; extra == "colab-torch220"
Provides-Extra: colab-ampere-torch220
Requires-Dist: unsloth[huggingface]; extra == "colab-ampere-torch220"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "colab-ampere-torch220"
Requires-Dist: unsloth[cu121onlytorch220]; extra == "colab-ampere-torch220"
Requires-Dist: unsloth[flashattention]; extra == "colab-ampere-torch220"
Provides-Extra: colab-new
Requires-Dist: unsloth_zoo>=2026.3.4; extra == "colab-new"
Requires-Dist: packaging; extra == "colab-new"
Requires-Dist: tyro; extra == "colab-new"
Requires-Dist: transformers!=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.3.0,>=4.51.3; extra == "colab-new"
Requires-Dist: datasets!=4.0.*,!=4.1.0,<4.4.0,>=3.4.1; extra == "colab-new"
Requires-Dist: sentencepiece>=0.2.0; extra == "colab-new"
Requires-Dist: tqdm; extra == "colab-new"
Requires-Dist: psutil; extra == "colab-new"
Requires-Dist: wheel>=0.42.0; extra == "colab-new"
Requires-Dist: numpy; extra == "colab-new"
Requires-Dist: protobuf; extra == "colab-new"
Requires-Dist: huggingface_hub>=0.34.0; extra == "colab-new"
Requires-Dist: hf_transfer; extra == "colab-new"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "colab-new"
Requires-Dist: unsloth[triton]; extra == "colab-new"
Requires-Dist: typer; extra == "colab-new"
Requires-Dist: pydantic; extra == "colab-new"
Requires-Dist: pyyaml; extra == "colab-new"
Requires-Dist: nest-asyncio; extra == "colab-new"
Provides-Extra: colab-no-deps
Requires-Dist: accelerate>=0.34.1; extra == "colab-no-deps"
Requires-Dist: trl!=0.19.0,<=0.24.0,>=0.18.2; extra == "colab-no-deps"
Requires-Dist: peft>=0.18.0; extra == "colab-no-deps"
Requires-Dist: xformers<0.0.27; extra == "colab-no-deps"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "colab-no-deps"
Requires-Dist: protobuf; extra == "colab-no-deps"
Provides-Extra: colab
Requires-Dist: unsloth[cu121]; extra == "colab"
Provides-Extra: colab-ampere
Requires-Dist: unsloth[colab-ampere-torch220]; extra == "colab-ampere"
Requires-Dist: unsloth[flashattention]; extra == "colab-ampere"
Provides-Extra: cu118-ampere
Requires-Dist: unsloth[huggingface]; extra == "cu118-ampere"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu118-ampere"
Requires-Dist: unsloth[cu118only]; extra == "cu118-ampere"
Requires-Dist: unsloth[flashattention]; extra == "cu118-ampere"
Provides-Extra: cu121-ampere
Requires-Dist: unsloth[huggingface]; extra == "cu121-ampere"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu121-ampere"
Requires-Dist: unsloth[cu121only]; extra == "cu121-ampere"
Requires-Dist: unsloth[flashattention]; extra == "cu121-ampere"
Provides-Extra: cu118-ampere-torch211
Requires-Dist: unsloth[huggingface]; extra == "cu118-ampere-torch211"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu118-ampere-torch211"
Requires-Dist: unsloth[cu118onlytorch211]; extra == "cu118-ampere-torch211"
Requires-Dist: unsloth[flashattention]; extra == "cu118-ampere-torch211"
Provides-Extra: cu121-ampere-torch211
Requires-Dist: unsloth[huggingface]; extra == "cu121-ampere-torch211"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu121-ampere-torch211"
Requires-Dist: unsloth[cu121onlytorch211]; extra == "cu121-ampere-torch211"
Requires-Dist: unsloth[flashattention]; extra == "cu121-ampere-torch211"
Provides-Extra: cu118-ampere-torch220
Requires-Dist: unsloth[huggingface]; extra == "cu118-ampere-torch220"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu118-ampere-torch220"
Requires-Dist: unsloth[cu118onlytorch220]; extra == "cu118-ampere-torch220"
Requires-Dist: unsloth[flashattention]; extra == "cu118-ampere-torch220"
Provides-Extra: cu121-ampere-torch220
Requires-Dist: unsloth[huggingface]; extra == "cu121-ampere-torch220"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu121-ampere-torch220"
Requires-Dist: unsloth[cu121onlytorch220]; extra == "cu121-ampere-torch220"
Requires-Dist: unsloth[flashattention]; extra == "cu121-ampere-torch220"
Provides-Extra: cu118-ampere-torch230
Requires-Dist: unsloth[huggingface]; extra == "cu118-ampere-torch230"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu118-ampere-torch230"
Requires-Dist: unsloth[cu118onlytorch230]; extra == "cu118-ampere-torch230"
Requires-Dist: unsloth[flashattention]; extra == "cu118-ampere-torch230"
Provides-Extra: cu121-ampere-torch230
Requires-Dist: unsloth[huggingface]; extra == "cu121-ampere-torch230"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu121-ampere-torch230"
Requires-Dist: unsloth[cu121onlytorch230]; extra == "cu121-ampere-torch230"
Requires-Dist: unsloth[flashattention]; extra == "cu121-ampere-torch230"
Provides-Extra: cu118-ampere-torch240
Requires-Dist: unsloth[huggingface]; extra == "cu118-ampere-torch240"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu118-ampere-torch240"
Requires-Dist: unsloth[cu118onlytorch240]; extra == "cu118-ampere-torch240"
Requires-Dist: unsloth[flashattention]; extra == "cu118-ampere-torch240"
Provides-Extra: cu121-ampere-torch240
Requires-Dist: unsloth[huggingface]; extra == "cu121-ampere-torch240"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu121-ampere-torch240"
Requires-Dist: unsloth[cu121onlytorch240]; extra == "cu121-ampere-torch240"
Requires-Dist: unsloth[flashattention]; extra == "cu121-ampere-torch240"
Provides-Extra: cu124-ampere-torch240
Requires-Dist: unsloth[huggingface]; extra == "cu124-ampere-torch240"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu124-ampere-torch240"
Requires-Dist: unsloth[cu124onlytorch240]; extra == "cu124-ampere-torch240"
Requires-Dist: unsloth[flashattention]; extra == "cu124-ampere-torch240"
Provides-Extra: cu118-ampere-torch250
Requires-Dist: unsloth[huggingface]; extra == "cu118-ampere-torch250"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu118-ampere-torch250"
Requires-Dist: unsloth[cu118onlytorch250]; extra == "cu118-ampere-torch250"
Requires-Dist: unsloth[flashattention]; extra == "cu118-ampere-torch250"
Provides-Extra: cu121-ampere-torch250
Requires-Dist: unsloth[huggingface]; extra == "cu121-ampere-torch250"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu121-ampere-torch250"
Requires-Dist: unsloth[cu121onlytorch250]; extra == "cu121-ampere-torch250"
Requires-Dist: unsloth[flashattention]; extra == "cu121-ampere-torch250"
Provides-Extra: cu124-ampere-torch250
Requires-Dist: unsloth[huggingface]; extra == "cu124-ampere-torch250"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu124-ampere-torch250"
Requires-Dist: unsloth[cu124onlytorch250]; extra == "cu124-ampere-torch250"
Requires-Dist: unsloth[flashattention]; extra == "cu124-ampere-torch250"
Provides-Extra: cu118-ampere-torch251
Requires-Dist: unsloth[huggingface]; extra == "cu118-ampere-torch251"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu118-ampere-torch251"
Requires-Dist: unsloth[cu118onlytorch251]; extra == "cu118-ampere-torch251"
Requires-Dist: unsloth[flashattention]; extra == "cu118-ampere-torch251"
Provides-Extra: cu121-ampere-torch251
Requires-Dist: unsloth[huggingface]; extra == "cu121-ampere-torch251"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu121-ampere-torch251"
Requires-Dist: unsloth[cu121onlytorch251]; extra == "cu121-ampere-torch251"
Requires-Dist: unsloth[flashattention]; extra == "cu121-ampere-torch251"
Provides-Extra: cu124-ampere-torch251
Requires-Dist: unsloth[huggingface]; extra == "cu124-ampere-torch251"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu124-ampere-torch251"
Requires-Dist: unsloth[cu124onlytorch251]; extra == "cu124-ampere-torch251"
Requires-Dist: unsloth[flashattention]; extra == "cu124-ampere-torch251"
Provides-Extra: cu118-ampere-torch260
Requires-Dist: unsloth[huggingface]; extra == "cu118-ampere-torch260"
Requires-Dist: bitsandbytes>=0.45.1; extra == "cu118-ampere-torch260"
Requires-Dist: unsloth[cu118onlytorch260]; extra == "cu118-ampere-torch260"
Requires-Dist: unsloth[flashattention]; extra == "cu118-ampere-torch260"
Provides-Extra: cu124-ampere-torch260
Requires-Dist: unsloth[huggingface]; extra == "cu124-ampere-torch260"
Requires-Dist: bitsandbytes>=0.45.1; extra == "cu124-ampere-torch260"
Requires-Dist: unsloth[cu124onlytorch260]; extra == "cu124-ampere-torch260"
Requires-Dist: unsloth[flashattention]; extra == "cu124-ampere-torch260"
Provides-Extra: cu126-ampere-torch260
Requires-Dist: unsloth[huggingface]; extra == "cu126-ampere-torch260"
Requires-Dist: bitsandbytes>=0.45.1; extra == "cu126-ampere-torch260"
Requires-Dist: unsloth[cu126onlytorch260]; extra == "cu126-ampere-torch260"
Requires-Dist: unsloth[flashattention]; extra == "cu126-ampere-torch260"
Provides-Extra: cu118-ampere-torch270
Requires-Dist: unsloth[huggingface]; extra == "cu118-ampere-torch270"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu118-ampere-torch270"
Requires-Dist: unsloth[cu118onlytorch270]; extra == "cu118-ampere-torch270"
Requires-Dist: unsloth[flashattention]; extra == "cu118-ampere-torch270"
Provides-Extra: cu126-ampere-torch270
Requires-Dist: unsloth[huggingface]; extra == "cu126-ampere-torch270"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu126-ampere-torch270"
Requires-Dist: unsloth[cu126onlytorch270]; extra == "cu126-ampere-torch270"
Requires-Dist: unsloth[flashattention]; extra == "cu126-ampere-torch270"
Provides-Extra: cu128-ampere-torch270
Requires-Dist: unsloth[huggingface]; extra == "cu128-ampere-torch270"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu128-ampere-torch270"
Requires-Dist: unsloth[cu128onlytorch270]; extra == "cu128-ampere-torch270"
Requires-Dist: unsloth[flashattention]; extra == "cu128-ampere-torch270"
Provides-Extra: cu118-ampere-torch271
Requires-Dist: unsloth[huggingface]; extra == "cu118-ampere-torch271"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu118-ampere-torch271"
Requires-Dist: unsloth[cu118onlytorch271]; extra == "cu118-ampere-torch271"
Requires-Dist: unsloth[flashattention]; extra == "cu118-ampere-torch271"
Provides-Extra: cu126-ampere-torch271
Requires-Dist: unsloth[huggingface]; extra == "cu126-ampere-torch271"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu126-ampere-torch271"
Requires-Dist: unsloth[cu126onlytorch271]; extra == "cu126-ampere-torch271"
Requires-Dist: unsloth[flashattention]; extra == "cu126-ampere-torch271"
Provides-Extra: cu128-ampere-torch271
Requires-Dist: unsloth[huggingface]; extra == "cu128-ampere-torch271"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu128-ampere-torch271"
Requires-Dist: unsloth[cu128onlytorch271]; extra == "cu128-ampere-torch271"
Requires-Dist: unsloth[flashattention]; extra == "cu128-ampere-torch271"
Provides-Extra: cu118-ampere-torch280
Requires-Dist: unsloth[huggingface]; extra == "cu118-ampere-torch280"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu118-ampere-torch280"
Requires-Dist: unsloth[cu118onlytorch280]; extra == "cu118-ampere-torch280"
Requires-Dist: unsloth[flashattention]; extra == "cu118-ampere-torch280"
Provides-Extra: cu126-ampere-torch280
Requires-Dist: unsloth[huggingface]; extra == "cu126-ampere-torch280"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu126-ampere-torch280"
Requires-Dist: unsloth[cu126onlytorch280]; extra == "cu126-ampere-torch280"
Requires-Dist: unsloth[flashattention]; extra == "cu126-ampere-torch280"
Provides-Extra: cu128-ampere-torch280
Requires-Dist: unsloth[huggingface]; extra == "cu128-ampere-torch280"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu128-ampere-torch280"
Requires-Dist: unsloth[cu128onlytorch280]; extra == "cu128-ampere-torch280"
Requires-Dist: unsloth[flashattention]; extra == "cu128-ampere-torch280"
Provides-Extra: cu130-ampere-torch280
Requires-Dist: unsloth[huggingface]; extra == "cu130-ampere-torch280"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu130-ampere-torch280"
Requires-Dist: unsloth[cu130onlytorch280]; extra == "cu130-ampere-torch280"
Provides-Extra: cu126-ampere-torch290
Requires-Dist: unsloth[huggingface]; extra == "cu126-ampere-torch290"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu126-ampere-torch290"
Requires-Dist: unsloth[cu126onlytorch290]; extra == "cu126-ampere-torch290"
Provides-Extra: cu128-ampere-torch290
Requires-Dist: unsloth[huggingface]; extra == "cu128-ampere-torch290"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu128-ampere-torch290"
Requires-Dist: unsloth[cu128onlytorch290]; extra == "cu128-ampere-torch290"
Provides-Extra: cu130-ampere-torch290
Requires-Dist: unsloth[huggingface]; extra == "cu130-ampere-torch290"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu130-ampere-torch290"
Requires-Dist: unsloth[cu130onlytorch290]; extra == "cu130-ampere-torch290"
Provides-Extra: cu126-ampere-torch291
Requires-Dist: unsloth[huggingface]; extra == "cu126-ampere-torch291"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu126-ampere-torch291"
Requires-Dist: unsloth[cu126onlytorch291]; extra == "cu126-ampere-torch291"
Provides-Extra: cu128-ampere-torch291
Requires-Dist: unsloth[huggingface]; extra == "cu128-ampere-torch291"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu128-ampere-torch291"
Requires-Dist: unsloth[cu128onlytorch291]; extra == "cu128-ampere-torch291"
Provides-Extra: cu130-ampere-torch291
Requires-Dist: unsloth[huggingface]; extra == "cu130-ampere-torch291"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu130-ampere-torch291"
Requires-Dist: unsloth[cu130onlytorch291]; extra == "cu130-ampere-torch291"
Provides-Extra: cu126-ampere-torch2100
Requires-Dist: unsloth[huggingface]; extra == "cu126-ampere-torch2100"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu126-ampere-torch2100"
Requires-Dist: unsloth[cu126onlytorch2100]; extra == "cu126-ampere-torch2100"
Provides-Extra: cu128-ampere-torch2100
Requires-Dist: unsloth[huggingface]; extra == "cu128-ampere-torch2100"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu128-ampere-torch2100"
Requires-Dist: unsloth[cu128onlytorch2100]; extra == "cu128-ampere-torch2100"
Provides-Extra: cu130-ampere-torch2100
Requires-Dist: unsloth[huggingface]; extra == "cu130-ampere-torch2100"
Requires-Dist: bitsandbytes!=0.46.0,!=0.48.0,>=0.45.5; extra == "cu130-ampere-torch2100"
Requires-Dist: unsloth[cu130onlytorch2100]; extra == "cu130-ampere-torch2100"
Dynamic: license-file

<h1 align="center" style="margin:0;">
  <a href="https://unsloth.ai/docs"><picture>
    <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/unslothai/unsloth/main/images/STUDIO%20WHITE%20LOGO.png">
    <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/unslothai/unsloth/main/images/STUDIO%20BLACK%20LOGO.png">
    <img alt="Unsloth logo" src="https://raw.githubusercontent.com/unslothai/unsloth/main/images/STUDIO%20BLACK%20LOGO.png" height="60" style="max-width:100%;">
  </picture></a>
</h1>
<h3 align="center" style="margin: 0; margin-top: 0;">
Run and train AI models with a unified local interface.
</h3>

<p align="center">
  <a href="#-features">Features</a> •
  <a href="#-quickstart">Quickstart</a> •
  <a href="#-free-notebooks">Notebooks</a> •
  <a href="https://unsloth.ai/docs">Documentation</a> •
  <a href="https://www.reddit.com/r/unsloth/">Reddit</a>
</p>
 <a href="https://unsloth.ai/docs/new/studio">
<img alt="unsloth studio ui homepage" src="https://raw.githubusercontent.com/unslothai/unsloth/main/studio/frontend/public/studio%20github%20landscape%20colab%20display.png" style="max-width: 100%; margin-bottom: 0;"></a>

Unsloth Studio (Beta) lets you run and train text, [audio](https://unsloth.ai/docs/basics/text-to-speech-tts-fine-tuning), [embedding](https://unsloth.ai/docs/new/embedding-finetuning), [vision](https://unsloth.ai/docs/basics/vision-fine-tuning) models on Windows, Linux and macOS.

## ⭐ Features
Unsloth provides several key features for both inference and training:
### Inference
* **Search + download + run models** including GGUF, LoRA adapters, safetensors
* **Export models**: [Save or export](https://unsloth.ai/docs/new/studio/export) models to GGUF, 16-bit safetensors and other formats.
* **Tool calling**: Support for [self-healing tool calling](https://unsloth.ai/docs/new/studio/chat#auto-healing-tool-calling) and web search
* **[Code execution](https://unsloth.ai/docs/new/studio/chat#code-execution)**: lets LLMs test code in Claude artifacts and sandbox environments
* [Auto-tune inference parameters](https://unsloth.ai/docs/new/studio/chat#auto-parameter-tuning) and customize chat templates.
* We work directly with teams behind [gpt-oss](https://docs.unsloth.ai/new/gpt-oss-how-to-run-and-fine-tune#unsloth-fixes-for-gpt-oss), [Qwen3](https://www.reddit.com/r/LocalLLaMA/comments/1kaodxu/qwen3_unsloth_dynamic_ggufs_128k_context_bug_fixes/), [Llama 4](https://github.com/ggml-org/llama.cpp/pull/12889), [Mistral](models/tutorials/devstral-how-to-run-and-fine-tune.md), [Gemma 1-3](https://news.ycombinator.com/item?id=39671146), and [Phi-4](https://unsloth.ai/blog/phi4), where we’ve fixed bugs that improve model accuracy.
* Upload images, audio, PDFs, code, DOCX and more file types to chat with.
### Training
* Train and RL **500+ models** up to **2x faster** with up to **70% less VRAM**, with no accuracy loss.
* Custom Triton and mathematical **kernels**. See some collabs we did with [PyTorch](https://unsloth.ai/docs/get-started/reinforcement-learning-rl-guide/fp8-reinforcement-learning) and [Hugging Face](https://unsloth.ai/docs/new/faster-moe).
* **Data Recipes**: [Auto-create datasets](https://unsloth.ai/docs/new/studio/data-recipe) from **PDF, CSV, DOCX** etc. Edit data in a visual-node workflow.
* **[Reinforcement Learning](https://unsloth.ai/docs/get-started/reinforcement-learning-rl-guide)** (RL): The most efficient [RL](https://unsloth.ai/docs/get-started/reinforcement-learning-rl-guide) library, using **80% less VRAM** for GRPO, [FP8](https://unsloth.ai/docs/get-started/reinforcement-learning-rl-guide/fp8-reinforcement-learning) etc.
* Supports full fine-tuning, RL, pretraining, 4-bit, 16-bit and, FP8 training.
* **Observability**: Monitor training live, track loss and GPU usage and customize graphs.
* [Multi-GPU](https://unsloth.ai/docs/basics/multi-gpu-training-with-unsloth) training is supported, with major improvements coming soon.

## ⚡ Quickstart
Unsloth can be used in two ways: through **[Unsloth Studio](https://unsloth.ai/docs/new/studio/)**, the web UI, or through **Unsloth Core**, the code-based version. Each has different requirements.

### Unsloth Studio (web UI)
Unsloth Studio (Beta) works on **Windows, Linux, WSL** and **macOS**.

* **CPU:** Supported for Chat and Data Recipes currently
* **NVIDIA:** Training works on RTX 30/40/50, Blackwell, DGX Spark, Station and more
* **macOS:** Currently supports chat and Data Recipes. **MLX training** is coming very soon
* **AMD:** Chat + Data works. Train with [Unsloth Core](#unsloth-core-code-based). Studio support is out soon.
* **Coming soon:** Training support for Apple MLX, AMD, and Intel.
* **Multi-GPU:** Available now, with a major upgrade on the way

#### macOS, Linux, WSL:
```bash
curl -fsSL https://unsloth.ai/install.sh | sh
```
If you don't have `curl`, use `wget`. Launch after setup via:
```bash
source unsloth_studio/bin/activate
unsloth studio -H 0.0.0.0 -p 8888
```

#### Windows:
```powershell
irm https://unsloth.ai/install.ps1 | iex
```
Launch after setup via:
```powershell
& .\unsloth_studio\Scripts\unsloth.exe studio -H 0.0.0.0 -p 8888
```

#### Docker
Use our [Docker image](https://hub.docker.com/r/unsloth/unsloth) ```unsloth/unsloth``` container. Run:
```bash
docker run -d -e JUPYTER_PASSWORD="mypassword" \
  -p 8888:8888 -p 8000:8000 -p 2222:22 \
  -v $(pwd)/work:/workspace/work \
  --gpus all \
  unsloth/unsloth
  ```

#### macOS, Linux, WSL developer installs:
```bash
curl -LsSf https://astral.sh/uv/install.sh | sh
uv venv unsloth_studio --python 3.13
source unsloth_studio/bin/activate
uv pip install unsloth --torch-backend=auto
unsloth studio setup
unsloth studio -H 0.0.0.0 -p 8888
```

#### Windows PowerShell developer installs:
```powershell
winget install -e --id Python.Python.3.13
winget install --id=astral-sh.uv  -e
uv venv unsloth_studio --python 3.13
.\unsloth_studio\Scripts\activate
uv pip install unsloth --torch-backend=auto
unsloth studio setup
unsloth studio -H 0.0.0.0 -p 8888
```

#### Nightly - MacOS, Linux, WSL:
```bash
curl -LsSf https://astral.sh/uv/install.sh | sh
git clone --filter=blob:none https://github.com/unslothai/unsloth.git unsloth_studio
cd unsloth_studio
uv venv --python 3.13
source .venv/bin/activate
uv pip install -e . --torch-backend=auto
unsloth studio setup
unsloth studio -H 0.0.0.0 -p 8888
```
Then to launch every time:
```bash
cd unsloth_studio
source .venv/bin/activate
unsloth studio -H 0.0.0.0 -p 8888
```

#### Nightly - Windows:
Run in Windows Powershell:
```bash
winget install -e --id Python.Python.3.13
winget install --id=astral-sh.uv  -e
git clone --filter=blob:none https://github.com/unslothai/unsloth.git unsloth_studio
cd unsloth_studio
uv venv --python 3.13
.\.venv\Scripts\activate
uv pip install -e . --torch-backend=auto
unsloth studio setup
unsloth studio -H 0.0.0.0 -p 8888
```
Then to launch every time:
```bash
cd unsloth_studio
.\.venv\Scripts\activate
unsloth studio -H 0.0.0.0 -p 8888
```

### Unsloth Core (code-based)
#### Linux, WSL:
```bash
curl -LsSf https://astral.sh/uv/install.sh | sh
uv venv unsloth_env --python 3.13
source unsloth_env/bin/activate
uv pip install unsloth --torch-backend=auto
```
#### Windows:
```powershell
winget install -e --id Python.Python.3.13
winget install --id=astral-sh.uv  -e
uv venv unsloth_env --python 3.13
.\unsloth_env\Scripts\activate
uv pip install unsloth --torch-backend=auto
```
For Windows, `pip install unsloth` works only if you have PyTorch installed. Read our [Windows Guide](https://unsloth.ai/docs/get-started/install/windows-installation).
You can use the same Docker image as Unsloth Studio.

#### AMD, Intel:
For RTX 50x, B200, 6000 GPUs: `uv pip install unsloth --torch-backend=auto`. Read our guides for: [Blackwell](https://unsloth.ai/docs/blog/fine-tuning-llms-with-blackwell-rtx-50-series-and-unsloth) and [DGX Spark](https://unsloth.ai/docs/blog/fine-tuning-llms-with-nvidia-dgx-spark-and-unsloth). <br>
To install Unsloth on **AMD** and **Intel** GPUs, follow our [AMD Guide](https://unsloth.ai/docs/get-started/install/amd) and [Intel Guide](https://unsloth.ai/docs/get-started/install/intel).

## ✨ Free Notebooks

Train for free with our notebooks. Read our [guide](https://unsloth.ai/docs/get-started/fine-tuning-llms-guide). Add dataset, run, then deploy your trained model.

| Model | Free Notebooks | Performance | Memory use |
|-----------|---------|--------|----------|
| **Qwen3.5 (4B)**      | [▶️ Start for free](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Qwen3_5_(4B)_Vision.ipynb)               | 1.5x faster | 60% less |
| **gpt-oss (20B)**      | [▶️ Start for free](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/gpt-oss-(20B)-Fine-tuning.ipynb)               | 2x faster | 70% less |
| **Qwen3.5 GSPO**      | [▶️ Start for free](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Qwen3_5_(4B)_Vision_GRPO.ipynb)               | 2x faster | 70% less |
| **gpt-oss (20B): GRPO**      | [▶️ Start for free](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/gpt-oss-(20B)-GRPO.ipynb)               | 2x faster | 80% less |
| **Qwen3: Advanced GRPO**      | [▶️ Start for free](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Qwen3_(4B)-GRPO.ipynb)               | 2x faster | 70% less |
| **Gemma 3 (4B) Vision** | [▶️ Start for free](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Gemma3_(4B)-Vision.ipynb)               | 1.7x faster | 60% less |
| **embeddinggemma (300M)**    | [▶️ Start for free](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/EmbeddingGemma_(300M).ipynb)               | 2x faster | 20% less |
| **Mistral Ministral 3 (3B)**      | [▶️ Start for free](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Ministral_3_VL_(3B)_Vision.ipynb)               | 1.5x faster | 60% less |
| **Llama 3.1 (8B) Alpaca**      | [▶️ Start for free](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Llama3.1_(8B)-Alpaca.ipynb)               | 2x faster | 70% less |
| **Llama 3.2 Conversational**      | [▶️ Start for free](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Llama3.2_(1B_and_3B)-Conversational.ipynb)               | 2x faster | 70% less |
| **Orpheus-TTS (3B)**     | [▶️ Start for free](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Orpheus_(3B)-TTS.ipynb)               | 1.5x faster | 50% less |

- See all our notebooks for: [Kaggle](https://github.com/unslothai/notebooks?tab=readme-ov-file#-kaggle-notebooks), [GRPO](https://unsloth.ai/docs/get-started/unsloth-notebooks#grpo-reasoning-rl-notebooks), [TTS](https://unsloth.ai/docs/get-started/unsloth-notebooks#text-to-speech-tts-notebooks), [embedding](https://unsloth.ai/docs/new/embedding-finetuning) & [Vision](https://unsloth.ai/docs/get-started/unsloth-notebooks#vision-multimodal-notebooks)
- See [all our models](https://unsloth.ai/docs/get-started/unsloth-model-catalog) and [all our notebooks](https://unsloth.ai/docs/get-started/unsloth-notebooks)
- See detailed documentation for Unsloth [here](https://unsloth.ai/docs)

## 🦥 Unsloth News
- **Introducing Unsloth Studio**: our new web UI for running and training LLMs. [Blog](https://unsloth.ai/docs/new/studio)
- **Qwen3.5** - 0.8B, 2B, 4B, 9B, 27B, 35-A3B, 112B-A10B are now supported. [Guide + notebooks](https://unsloth.ai/docs/models/qwen3.5/fine-tune)
- Train **MoE LLMs 12x faster** with 35% less VRAM - DeepSeek, GLM, Qwen and gpt-oss. [Blog](https://unsloth.ai/docs/new/faster-moe)
- **Embedding models**: Unsloth now supports ~1.8-3.3x faster embedding fine-tuning. [Blog](https://unsloth.ai/docs/new/embedding-finetuning) • [Notebooks](https://unsloth.ai/docs/get-started/unsloth-notebooks#embedding-models)
- New **7x longer context RL** vs. all other setups, via our new batching algorithms. [Blog](https://unsloth.ai/docs/new/grpo-long-context)
- New RoPE & MLP **Triton Kernels** & **Padding Free + Packing**: 3x faster training & 30% less VRAM. [Blog](https://unsloth.ai/docs/new/3x-faster-training-packing)
- **500K Context**: Training a 20B model with >500K context is now possible on an 80GB GPU. [Blog](https://unsloth.ai/docs/blog/500k-context-length-fine-tuning)
- **FP8 & Vision RL**: You can now do FP8 & VLM GRPO on consumer GPUs. [FP8 Blog](https://unsloth.ai/docs/get-started/reinforcement-learning-rl-guide/fp8-reinforcement-learning) • [Vision RL](https://unsloth.ai/docs/get-started/reinforcement-learning-rl-guide/vision-reinforcement-learning-vlm-rl)
- **gpt-oss** by OpenAI: Read our [RL blog](https://unsloth.ai/docs/models/gpt-oss-how-to-run-and-fine-tune/gpt-oss-reinforcement-learning), [Flex Attention](https://unsloth.ai/docs/models/gpt-oss-how-to-run-and-fine-tune/long-context-gpt-oss-training) blog and [Guide](https://unsloth.ai/docs/models/gpt-oss-how-to-run-and-fine-tune).

## 💚 Community and Links
| Type                                                                                                                                      | Links                                                                          |
| ----------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------ |
| <img width="16" src="https://cdn.prod.website-files.com/6257adef93867e50d84d30e2/66e3d80db9971f10a9757c99_Symbol.svg" />  **Discord**                       | [Join Discord server](https://discord.com/invite/unsloth)                          |
| <img width="15" src="https://redditinc.com/hs-fs/hubfs/Reddit%20Inc/Brand/Reddit_Logo.png" />  **r/unsloth Reddit**                       | [Join Reddit community](https://reddit.com/r/unsloth)                          |
| 📚 **Documentation & Wiki**                                                                                                               | [Read Our Docs](https://unsloth.ai/docs)                                       |
| <img width="13" src="https://upload.wikimedia.org/wikipedia/commons/0/09/X_(formerly_Twitter)_logo_late_2025.svg" />  **Twitter (aka X)** | [Follow us on X](https://twitter.com/unslothai)                                |
| 🔮 **Our Models**                                                                                                                         | [Unsloth Catalog](https://unsloth.ai/docs/get-started/unsloth-model-catalog)   |
| ✍️ **Blog**                                                                                                                               | [Read our Blogs](https://unsloth.ai/blog)                                      |

### Citation

You can cite the Unsloth repo as follows:
```bibtex
@software{unsloth,
  author = {Daniel Han, Michael Han and Unsloth team},
  title = {Unsloth},
  url = {https://github.com/unslothai/unsloth},
  year = {2023}
}
```
If you trained a model with 🦥Unsloth, you can use this cool sticker!   <img src="https://raw.githubusercontent.com/unslothai/unsloth/main/images/made with unsloth.png" width="200" align="center" />

### License
Unsloth uses a dual-licensing model of Apache 2.0 and AGPL-3.0. The core Unsloth package remains licensed under **[Apache 2.0](https://github.com/unslothai/unsloth?tab=Apache-2.0-1-ov-file)**, while certain optional components, such as the Unsloth Studio UI are licensed under the open-source license **[AGPL-3.0](https://github.com/unslothai/unsloth?tab=AGPL-3.0-2-ov-file)**.

This structure helps support ongoing Unsloth development while keeping the project open source and enabling the broader ecosystem to continue growing.

### Thank You to
- The [llama.cpp library](https://github.com/ggml-org/llama.cpp) that lets users run and save models with Unsloth
- The Hugging Face team and their libraries: [transformers](https://github.com/huggingface/transformers) and [TRL](https://github.com/huggingface/trl)
- The Pytorch and [Torch AO](https://github.com/unslothai/unsloth/pull/3391) team for their contributions
- NVIDIA for their [NeMo DataDesigner](https://github.com/NVIDIA-NeMo/DataDesigner) library and their contributions
- And of course for every single person who has contributed or has used Unsloth!
