Twitter (alias X)
Suivez-nous sur X | |
Installation | unsloth/README.md |
Analyse comparative | Tableaux de performances |
Modèles publiés | Sorties sans paresseux |
Blogue | Lisez nos blogs |
Tous les noyaux écrits dans le langage Triton d'OpenAI. Moteur de recul manuel .
0 % de perte de précision – aucune méthode d'approximation – toutes exactes.
Aucun changement de matériel. Prend en charge les GPU NVIDIA depuis 2018+. Capacité minimale CUDA 7.0 (V100, T4, Titan V, RTX 20, 30, 40x, A100, H100, L40, etc.) Vérifiez votre GPU ! GTX 1070, 1080 fonctionne, mais est lent.
Fonctionne sous Linux et Windows via WSL.
Prend en charge le réglage fin QLoRA / LoRA 4 bits et 16 bits via bitsandbytes.
L'open source s'entraîne 5 fois plus vite – consultez Unsloth Pro pour une formation jusqu'à 30 fois plus rapide !
Si vous avez entraîné un modèle avec ?Unsloth, vous pouvez utiliser cet autocollant sympa !
Pour la liste complète des tableaux d'analyse comparative reproductibles , rendez-vous sur notre site Web
1 A100 40 Go | ?Câlin visage | Attention éclair | ?Unsloth Open Source | ?Unsloth Pro |
---|---|---|---|---|
Alpaga | 1x | 1,04x | 1,98x | 15,64x |
Puce LAION2 | 1x | 0,92x | 1,61x | 20,73x |
OASST | 1x | 1,19x | 2,17x | 14,83x |
Orque mince | 1x | 1,18x | 2,22x | 14,82x |
Le tableau d'analyse comparative ci-dessous a été réalisé par ?Hugging Face.
Colab T4 gratuit | Ensemble de données | ?Câlin visage | Torche 2.1.1 | ?Un paresseux | ? Réduction de la VRAM |
---|---|---|---|---|---|
Lama-2 7b | OASST | 1x | 1,19x | 1,95x | -43,3% |
Mistral 7b | Alpaga | 1x | 1,07x | 1,56x | -13,7% |
Petit lama 1.1b | Alpaga | 1x | 2,06x | 3,87x | -73,8% |
DPO avec Zephyr | Ultra-Chat | 1x | 1,09x | 1,55x | -18,6% |
Pour les versions stables, utilisez pip install unsloth
. Nous recommandons cependant pip install "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git"
pour la plupart des installations.
️Only use Conda if you have it. If not, use Pip
. Sélectionnez pytorch-cuda=11.8,12.1
pour CUDA 11.8 ou CUDA 12.1. Nous prenons en charge python=3.10,3.11,3.12
.
conda create --name unsloth_env python=3.11 pytorch-cuda=12.1 pytorch cudatoolkit xformers -c pytorch -c nvidia -c xformers -y conda activer unsloth_env pip install "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git"pip install --no-deps trl peft accélère les bitsandbytes
mkdir -p ~/miniconda3 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3 rm -rf ~/miniconda3/miniconda.sh~/miniconda3/bin/conda init bash~/miniconda3/bin/conda init zsh
️Do **NOT** use this if you have Conda.
Pip est un peu plus complexe car il existe des problèmes de dépendance. La commande pip est différente pour les versions torch 2.2,2.3,2.4,2.5
et CUDA.
Pour les autres versions de torch, nous prenons en charge torch211
, torch212
, torch220
, torch230
, torch240
et pour les versions CUDA, nous prenons en charge cu118
et cu121
et cu124
. Pour les appareils Ampere (A100, H100, RTX3090) et supérieurs, utilisez cu118-ampere
ou cu121-ampere
ou cu124-ampere
.
Par exemple, si vous disposez torch 2.4
et CUDA 12.1
, utilisez :
pip install --upgrade pip pip install "unsloth[cu121-torch240] @ git+https://github.com/unslothai/unsloth.git"
Autre exemple, si vous avez torch 2.5
et CUDA 12.4
, utilisez :
pip install --upgrade pip pip install "unsloth[cu124-torch250] @ git+https://github.com/unslothai/unsloth.git"
Et d'autres exemples :
pip install "unsloth[cu121-ampere-torch240] @ git+https://github.com/unslothai/unsloth.git"pip install "unsloth[cu118-ampere-torch240] @ git+https://github.com/ unslothai/unsloth.git"pip install"unsloth[cu121-torch240] @ git+https://github.com/unslothai/unsloth.git"pip install "unsloth[cu118-torch240] @ git+https://github.com/unslothai/unsloth.git"pip install "unsloth[cu121-torch230 ] @ git+https://github.com/unslothai/unsloth.git"installation pip "unsloth[cu121-ampere-torch230] @ git+https://github.com/unslothai/unsloth.git"pip install "unsloth[cu121-torch250] @ git+https://github.com/unslothai/unsloth. git"pip install"unsloth[cu124-ampere-torch250] @ git+https://github.com/unslothai/unsloth.git"
Ou exécutez ce qui suit dans un terminal pour obtenir la commande d'installation pip optimale :
wget -qO- https://raw.githubusercontent.com/unslothai/unsloth/main/unsloth/_auto_install.py | python -
Ou exécutez manuellement ce qui suit dans un REPL Python :
essayez : import torchsauf : raise ImportError('Install torch via `pip install torch`')from packaging.version import Version as Vv = V(torch.__version__)cuda = str(torch.version.cuda)is_ampere = torch.cuda. get_device_capability()[0] >= 8if cuda != "12.1" et cuda != "11.8" et cuda != "12.4": raise RuntimeError(f"CUDA = {cuda} non pris en charge !")if v <= V('2.1.0') : raise RuntimeError(f"Torch = {v} trop vieux !")elif v <= V(' 2.1.1') : x = 'cu{}{}-torch211'elif v <= V('2.1.2') : x = 'cu{}{}-torch212'elif v < V('2.3.0') : x = 'cu{}{}-torch220'elif v < V('2.4.0') : x = 'cu{}{}-torch230'elif v < V( '2.5.0') : x = 'cu{}{}-torch240'elif v < V('2.6.0') : x = 'cu{}{}-torch250'else : augmenter RuntimeError(f"Torch = {v} trop nouveau!")x = x.format(cuda.replace(".", ""), "-ampere" if is_ampere else "")print(f'pip install -- mettre à niveau pip && pip install "unsloth[{x}] @ git+https://github.com/unslothai/unsloth.git"')
Pour exécuter Unsloth directement sur Windows :
Installez Triton à partir de ce fork de Windows et suivez les instructions : https://github.com/woct0rdho/triton-windows
Dans SFTTrainer, définissez dataset_num_proc=1
pour éviter un problème de plantage :
entraîneur = SFTTrainer(dataset_num_proc=1, ... )
Pour obtenir des instructions d'installation avancées ou si vous voyez des erreurs étranges lors de l'installation :
Installez torch
et triton
. Allez sur https://pytorch.org pour l'installer. Par exemple pip install torch torchvision torchaudio triton
Confirmez si CUDA est installé correctement. Essayez nvcc
. Si cela échoue, vous devez installer les pilotes cudatoolkit
ou CUDA.
Installez xformers
manuellement. Vous pouvez essayer d'installer vllm
et voir si vllm
réussit. Vérifiez si xformers
a réussi avec python -m xformers.info
Accédez à https://github.com/facebookresearch/xformers. Une autre option consiste à installer flash-attn
pour les GPU Ampere.
Enfin, installez bitsandbytes
et vérifiez-le avec python -m bitsandbytes
Accédez à notre documentation officielle pour l'enregistrement dans GGUF, les points de contrôle, l'évaluation et plus encore !
Nous prenons en charge le code TRL, Trainer, Seq2SeqTrainer ou même Pytorch de Huggingface !
Nous sommes dans la documentation officielle de ?Hugging Face ! Consultez les documents SFT et DPO !
from unsloth import FastLanguageModel from unsloth import is_bfloat16_supportedimport torchfrom trl import SFTrainerfrom transformers import TrainingArgumentsfrom datasets import load_datasetmax_seq_length = 2048 # Prend en charge la mise à l'échelle RoPE en interne, alors choisissez-en un !# Obtenez LAION dataseturl = "https://huggingface.co/datasets/laion/OIG/resolve/main/unified_chip2.jsonl"dataset = load_dataset("json", data_files = {"train" : url}, split = "train")# 4bit pré modèles quantifiés que nous prenons en charge pour un téléchargement 4 fois plus rapide + pas de MOO.fourbit_models = ["unsloth/mistral-7b-v0.3-bnb-4bit", # Nouveau Mistral v3 2x plus rapide!"unsloth/mistral-7b-instruct-v0.3-bnb-4bit","unsloth/llama-3-8b -bnb-4bit", # Llama-3 15 billions de jetons modèle 2x plus rapide!"unsloth/llama-3-8b-Instruct-bnb-4bit","unsloth/llama-3-70b-bnb-4bit","unsloth/Phi-3-mini-4k-instruct", # Phi-3 2x plus rapide!"unsloth/Phi-3-medium-4k-instruct","unsloth/mistral-7b-bnb-4bit","unsloth/gemma-7b-bnb-4bit", # Gemma 2,2x plus rapide !] # Plus de modèles sur https://huggingface.co/unslothmodel, tokenizer = FastLanguageModel.from_pretrained(model_name = "unsloth/llama-3-8b-bnb-4bit",max_seq_length = max_seq_length,dtype = Aucun,load_in_4bit = True, )# Effectuer des correctifs de modèle et ajouter des poids LoRA rapidesmodel = FastLanguageModel.get_peft_model(model,r = 16,target_modules = ["q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj ",],lora_alpha = 16,lora_dropout = 0, # Prend en charge n'importe quel, mais = 0 est optimisébias = "aucun", # Prend en charge tout, mais = "aucun" est optimisé# [NOUVEAU] "unsloth" utilise 30 % de VRAM en moins, s'adapte à des tailles de lots 2 fois plus grandes !use_gradient_checkpointing = "unsloth", # True ou "unsloth" pour très long contextrandom_state = 3407,max_seq_length = max_seq_length,use_rslora = False, # Nous prenons en charge le classement LoRAloftq_config = Aucun, # Et LoftQ)trainer = SFTTrainer(model = model,train_dataset = dataset,dataset_text_field = "text",max_seq_length = max_seq_length,tokenizer = tokenizer,args = TrainingArguments(per_device_train_batch_size = 2,gradient_accumulation_steps = 4,warmup_steps = 10,max_steps = 60,fp16 = not is_bfloat16_supported(),bf16 = is_bfloat16_supported(),logging_steps = 1,output_dir = "outputs",optim = "adamw_8bit",seed = 3407, ), )trainer.train()# Allez sur https://github.com/unslothai/unsloth/wiki pour des conseils avancés comme# (1) Enregistrement au format GGUF / fusion en 16 bits pour vLLM# (2) Formation continue à partir d'un adaptateur LoRA enregistré # (3) Ajout d'une boucle d'évaluation / MOO# (4) Modèles de chat personnalisés
DPO (Direct Preference Optimization), PPO, Reward Modeling semblent tous fonctionner selon les tests indépendants tiers de Llama-Factory. Nous avons ici un notebook Google Colab préliminaire pour reproduire Zephyr sur Tesla T4 : notebook.
Nous sommes dans la documentation officielle de ?Hugging Face ! On est sur les docs SFT et les docs DPO !
import osos.environ["CUDA_VISIBLE_DEVICES"] = "0" # Définir facultatif l'ID du périphérique GPU à partir d'un paresseux import FastLanguageModel, PatchDPOTrainerfrom unsloth import is_bfloat16_supportedPatchDPOTrainer() importer torchfrom transformateurs import TrainingArgumentsfrom trl import DPOTrainermodel, tokenizer = FastLanguageModel.from_pretrained(model_name = "unsloth/zephyr-sft-bnb-4bit",max_seq_length = max_seq_length,dtype = Aucun,load_in_4bit = True, )# Effectuer des correctifs de modèle et ajouter des poids LoRA rapidesmodel = FastLanguageModel.get_peft_model(model,r = 64,target_modules = ["q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj ",],lora_alpha = 64,lora_dropout = 0, # Prend en charge n'importe quel, mais = 0 est optimisébias = "aucun", # Prend en charge tout, mais = "aucun" est optimisé# [NOUVEAU] "unsloth" utilise 30 % de VRAM en moins, s'adapte à des tailles de lots 2 fois plus grandes !use_gradient_checkpointing = "unsloth", # True ou "unsloth" pour très long contexterandom_state = 3407, max_seq_length = max_seq_length, )dpo_trainer = DPOTrainer(model = model,ref_model = Aucun,args = TrainingArguments(per_device_train_batch_size = 4,gradient_accumulation_steps = 8,warmup_ratio = 0.1,num_train_epochs = 3,fp16 = not is_bfloat16_supported(),bf16 = is_bfloat16_supported(),logging_steps = 1,optim = "adamw_8bit",seed = 42,output_dir = "outputs", ),bêta = 0,1,train_dataset = YOUR_DATASET_HERE,# eval_dataset = YOUR_DATASET_HERE,tokenizer = tokenizer,max_length = 1024,max_prompt_length = 512, )dpo_trainer.train()
Cliquez sur "Code" pour des exemples entièrement reproductibles
"Unsloth Equal" est un aperçu de notre version PRO, avec le code supprimé. Tous les réglages et la courbe de perte restent identiques.
Pour la liste complète des tableaux d’analyse comparative, rendez-vous sur notre site Web
1 A100 40 Go | ?Câlin visage | Attention éclair 2 | ?Unsloth ouvert | Un paresseux égal | Unsloth Pro | Détraqueur Max |
---|---|---|---|---|---|---|
Alpaga | 1x | 1,04x | 1,98x | 2,48x | 5,32x | 15,64x |
code | Code | Code | Code | Code | ||
secondes | 1040 | 1001 | 525 | 419 | 196 | 67 |
mémoire Mo | 18235 | 15365 | 9631 | 8525 | ||
% économisé | 15.74 | 47.18 | 53.25 |
Lien vers le tableau des performances. TGS : jetons par GPU par seconde. Modèle : LLaMA2-7B. GPU : NVIDIA A100 * 1. Taille du lot : 4. Accumulation de dégradé : 2. Rang LoRA : 8. Longueur maximale : 1024.
Méthode | Morceaux | TGS | GRAMME | Vitesse |
---|---|---|---|---|
HF | 16 | 2392 | 18 Go | 100% |
HF+FA2 | 16 | 2954 | 17 Go | 123% |
Paresseux+FA2 | 16 | 4007 | 16 GB | 168% |
HF | 4 | 2415 | 9 Go | 101% |
Paresseux+FA2 | 4 | 3726 | 7 Go | 160% |
1 A100 40 Go | Visage câlin | Attention éclair 2 | Un paresseux ouvert | Un paresseux égal | Unsloth Pro | Détraqueur Max |
---|---|---|---|---|---|---|
Mistral 7B Slim Orque | 1x | 1,15x | 2,15x | 2,53x | 4,61x | 13,69x |
code | Code | Code | Code | Code | ||
secondes | 1813 | 1571 | 842 | 718 | 393 | 132 |
mémoire Mo | 32853 | 19385 | 12465 | 10271 | ||
% économisé | 40,99 | 62.06 | 68,74 |
1 A100 40 Go | Visage câlin | Attention éclair 2 | Un paresseux ouvert | Un paresseux égal | Unsloth Pro | Détraqueur Max |
---|---|---|---|---|---|---|
Code Lama 34B | MOO | 0,99x | 1,87x | 2,61x | 4,27x | 12,82x |
code | Code | Code | Code | |||
secondes | 1953 | 1982 | 1043 | 748 | 458 | 152 |
mémoire Mo | 40000 | 33217 | 27413 | 22161 | ||
% économisé | 16.96 | 31.47 | 44,60 |
1 T4 16 Go | Visage câlin | Attention éclair | Un paresseux ouvert | Unsloth Pro Égal | Unsloth Pro | Détraqueur Max |
---|---|---|---|---|---|---|
Alpaga | 1x | 1,09x | 1,69x | 1,79x | 2,93x | 8,3x |
code | Code | Code | Code | |||
secondes | 1599 | 1468 | 942 | 894 | 545 | 193 |
mémoire Mo | 7199 | 7059 | 6459 | 5443 | ||
% économisé | 1,94 | 10.28 | 24h39 |
2 T4 DDP | Visage câlin | Attention éclair | Un paresseux ouvert | Un paresseux égal | Unsloth Pro | Détraqueur Max |
---|---|---|---|---|---|---|
Alpaga | 1x | 0,99x | 4,95x | 4,44x | 7,28x | 20,61x |
code | Code | Code | ||||
secondes | 9882 | 9946 | 1996 | 2227 | 1357 | 480 |
mémoire Mo | 9176 | 9128 | 6904 | 6782 | ||
% économisé | 0,52 | 24h76 | 26.09 |
Une Tesla T4 sur Google Colab bsz = 2, ga = 4, max_grad_norm = 0.3, num_train_epochs = 1, seed = 3047, lr = 2e-4, wd = 0.01, optim = "adamw_8bit", schedule = "linear", schedule_steps = 10
Système | GPU | Alpaga (52K) | LAION OIG (210K) | Assistant ouvert (10K) | SlimOrque (518K) |
---|---|---|---|---|---|
Visage câlin | 1T4 | 23h15 | 56h 28min | 8h 38min | 391h 41min |
Un paresseux ouvert | 1T4 | 13h 7min (1,8x) | 31h 47min (1,8x) | 4h 27min (1,9x) | 240h 4min (1,6x) |
Unsloth Pro | 1T4 | 3h 6min (7,5x) | 5h 17min (10,7x) | 1h 7min (7,7x) | 59h 53min (6,5x) |
Détraqueur Max | 1T4 | 2h 39min (8,8x) | 4h 31min (12,5x) | 0h 58m (8,9x) | 51h 30min (7,6x) |
Utilisation maximale de la mémoire
Système | GPU | Alpaga (52K) | LAION OIG (210K) | Assistant ouvert (10K) | SlimOrque (518K) |
---|---|---|---|---|---|
Visage câlin | 1T4 | 7,3 Go | 5,9 Go | 14,0 Go | 13,3 Go |
Un paresseux ouvert | 1T4 | 6,8 Go | 5,7 Go | 7,8 Go | 7,7 Go |
Unsloth Pro | 1T4 | 6,4 Go | 6,4 Go | 6,4 Go | 6,4 Go |
Détraqueur Max | 1T4 | 11,4 Go | 12,4 Go | 11,9 Go | 14,4 Go |
Deux Tesla T4 sur Kaggle bsz = 2, ga = 4, max_grad_norm = 0.3, num_train_epochs = 1, seed = 3047, lr = 2e-4, wd = 0.01, optim = "adamw_8bit", schedule = "linear", schedule_steps = 10
Système | GPU | Alpaga (52K) | LAION OIG (210K) | Assistant ouvert (10K) | SlimOrque (518K) * |
---|---|---|---|---|---|
Visage câlin | 2T4 | 84h 47min | 163h 48min | 30h 51min | 1301h 24min * |
Unsloth Pro | 2T4 | 3h 20min (25,4x) | 5h 43min (28,7x) | 1h 12min (25,7x) | 71h 40min (18,1x) * |
Détraqueur Max | 2T4 | 3h 4min (27,6x) | 5h 14min (31,3x) | 1h 6min (28,1x) | 54h 20min (23,9x) * |
Utilisation maximale de la mémoire sur un système multi-GPU (2 GPU)
Système | GPU | Alpaga (52K) | LAION OIG (210K) | Assistant ouvert (10K) | SlimOrque (518K) * |
---|---|---|---|---|---|
Visage câlin | 2T4 | 8,4 Go | 6 Go | 7,2 Go | 5,3 Go | 14,3 Go | 6,6 Go | 10,9 Go | 5,9 Go * |
Unsloth Pro | 2T4 | 7,7 Go | 4,9 Go | 7,5 Go | 4,9 Go | 8,5 Go | 4,9 Go | 6,2 Go | 4,7 Go * |
Détraqueur Max | 2T4 | 10,5 Go | 5 Go | 10,6 Go | 5 Go | 10,6 Go | 5 Go | 10,5 Go | 5 Go * |
Slim Orca bsz=1
pour tous les benchmarks puisque bsz=2
MOO. Nous pouvons gérer bsz=2
, mais nous le comparons avec bsz=1
pour des raisons de cohérence.
HuyNguyen-hust pour avoir rendu les intégrations RoPE 28 % plus rapides
RandomInternetPreson pour confirmer la prise en charge de WSL
152334H pour la prise en charge expérimentale du DPO
atgctg pour la coloration syntaxique