Metadata-Version: 2.4
Name: unsloth
Version: 2026.3.5
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, http://www.unsloth.ai
Project-URL: documentation, https://github.com/unslothai/unsloth
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.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://discord.com/invite/unsloth">Discord</a>
</p>
<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;">

Unsloth Studio lets you run and train models for 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) and more. Available 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 run code, data and verify results so answers are more accurate.
* [Auto-tune inference parameters](https://unsloth.ai/docs/new/studio/chat#auto-parameter-tuning) and customize chat templates.
* Upload images, audio, PDFs, code, DOCX and more file types to chat with.
### Training
* Train **500+ models** up to **2x faster** with up to **70% less VRAM**, with no accuracy loss.
* Supports full fine-tuning, pretraining, 4-bit, 16-bit and, FP8 training.
* **Observability**: Monitor training live, track loss and GPU usage and customize graphs.
* **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**: 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.
* [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 works on **Windows, Linux, WSL** and **macOS**.

* **CPU:** Supported for **chat inference only**
* **NVIDIA GPUs:** Training works on RTX 30/40/50, Blackwell, DGX Spark, DGX Station and more
* **macOS:** Currently supports chat only; **MLX training** is coming very soon
* **Multi-GPU:** Available now, with a major upgrade on the way

#### Windows, MacOS Linux or WSL:
```
git clone https://github.com/unslothai/unsloth.git
cd unsloth
pip install -e .
unsloth studio setup
unsloth studio -H 0.0.0.0 -p 8888
```
Use our [Docker image](https://hub.docker.com/r/unsloth/unsloth) ```unsloth/unsloth``` container. Read our [Docker Guide](https://unsloth.ai/docs/get-started/install/docker).
#### Git from source
```
git clone https://github.com/unslothai/unsloth.git
cd unsloth
pip install -e .
unsloth studio setup
unsloth studio -H 0.0.0.0 -p 8888
```

### Unsloth Core (code-based)
#### Windows, Linux, WSL
```bash
pip install unsloth
```
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: `pip install unsloth`. 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 |
| **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 | 50% 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).

## 🔗 Links and Resources
| Type                                                                                                                                      | Links                                                                          |
| ----------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------ |
| <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)                                |
| 💾 **Installation**                                                                                                                       | [Pip & Docker Install](https://unsloth.ai/docs/get-started/install) |
| 🔮 **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" />

### 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
- And of course for every single person who has contributed or has used Unsloth!
