Twitter (também conhecido como X)
Siga-nos no X | |
Instalação | indolente/README.md |
Comparativo de mercado | Tabelas de desempenho |
Modelos Lançados | Lançamentos despreocupados |
Blogue | Leia nossos blogs |
Todos os kernels escritos na linguagem Triton da OpenAI. Motor de retropropulsão manual .
0% de perda de precisão - sem métodos de aproximação - todos exatos.
Nenhuma mudança de hardware. Suporta GPUs NVIDIA desde 2018+. Capacidade mínima de CUDA 7.0 (V100, T4, Titan V, RTX 20, 30, 40x, A100, H100, L40 etc) Verifique sua GPU! GTX 1070, 1080 funciona, mas é lento.
Funciona em Linux e Windows via WSL.
Suporta ajuste fino QLoRA / LoRA de 4 bits e 16 bits via bits e bytes.
O código aberto treina 5x mais rápido - veja o Unsloth Pro para um treinamento até 30x mais rápido !
Se você treinou um modelo com ?Unsloth, você pode usar este adesivo legal!
Para obter a lista completa de tabelas de benchmarking reproduzíveis , acesse nosso site
1A100 40GB | ?Abraçando o rosto | Atenção instantânea | ?Código aberto despreguiçoso | ?Despreguiça Pro |
---|---|---|---|---|
Alpaca | 1x | 1,04x | 1,98x | 15,64x |
LAION Chip2 | 1x | 0,92x | 1,61x | 20,73x |
OASST | 1x | 1,19x | 2,17x | 14,83x |
Orca Magra | 1x | 1,18x | 2,22x | 14,82x |
A tabela de benchmarking abaixo foi conduzida por ?Hugging Face.
Colab T4 grátis | Conjunto de dados | ?Abraçando o rosto | PyTorch 2.1.1 | ?Preguiça | ? Redução de VRAM |
---|---|---|---|---|---|
Lhama-2 7b | OASST | 1x | 1,19x | 1,95x | -43,3% |
Mistral 7b | Alpaca | 1x | 1,07x | 1,56x | -13,7% |
Lhama Minúscula 1.1b | Alpaca | 1x | 2,06x | 3,87x | -73,8% |
DPO com Zephyr | Ultra-bate-papo | 1x | 1,09x | 1,55x | -18,6% |
Para versões estáveis, use pip install unsloth
. Recomendamos pip install "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git"
para a maioria das instalações.
️Only use Conda if you have it. If not, use Pip
. Selecione pytorch-cuda=11.8,12.1
para CUDA 11.8 ou CUDA 12.1. Apoiamos python=3.10,3.11,3.12
.
conda criar --name unsloth_env píton=3.11 pytorch-cuda = 12,1 pytorch cudatoolkit xformers -c pytorch -c nvidia -c xformers - sim conda ativar unsloth_env pip install "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git"pip install --no-deps trl peft acelera 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 é um pouco mais complexo porque há problemas de dependência. O comando pip é diferente para as versões torch 2.2,2.3,2.4,2.5
e CUDA.
Para outras versões de tocha, oferecemos suporte torch211
, torch212
, torch220
, torch230
, torch240
e para versões CUDA, oferecemos suporte cu118
e cu121
e cu124
. Para dispositivos Ampere (A100, H100, RTX3090) e superiores, use cu118-ampere
ou cu121-ampere
ou cu124-ampere
.
Por exemplo, se você tiver torch 2.4
e CUDA 12.1
, use:
pip instalar --atualizar pip pip instalar "unsloth[cu121-torch240] @ git+https://github.com/unslothai/unsloth.git"
Outro exemplo, se você tiver torch 2.5
e CUDA 12.4
, use:
pip instalar --atualizar pip pip instalar "unsloth[cu124-torch250] @ git+https://github.com/unslothai/unsloth.git"
E outros exemplos:
pip instalar "unsloth[cu121-ampere-torch240] @ git+https://github.com/unslothai/unsloth.git"pip instalar "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"instalação de 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 execute o seguinte em um terminal para obter o comando de instalação ideal do pip:
wget -qO- https://raw.githubusercontent.com/unslothai/unsloth/main/unsloth/_auto_install.py | píton -
Ou execute o seguinte manualmente em um Python REPL:
tente: importar tocha, exceto: raise ImportError('Instalar tocha via `pip install torch`')da embalagem.versão importar Versão como Vv = V(torch.__version__)cuda = str(torch.version.cuda)is_ampere = torch.cuda. get_device_capability()[0] >= 8if cuda != "12.1" e cuda != "11.8" e cuda != "12.4": raise RuntimeError(f"CUDA = {cuda} não suportado!")if v <= V('2.1.0'): raise RuntimeError(f"Torch = {v} muito antigo!")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: raise RuntimeError(f"Torch = {v} muito novo!")x = x.format(cuda.replace(".", ""), "-ampere" if is_ampere else "")print(f'pip install --upgrade pip && pip install "unsloth[{x}] @ git+https://github.com/unslothai/unsloth.git"')
Para executar o Unsloth diretamente no Windows:
Instale o Triton a partir deste fork do Windows e siga as instruções: https://github.com/woct0rdho/triton-windows
No SFTTrainer, defina dataset_num_proc=1
para evitar um problema de travamento:
treinador = SFTTrainer(dataset_num_proc=1, ... )
Para obter instruções de instalação avançadas ou se você encontrar erros estranhos durante as instalações:
Instale torch
e triton
. Vá para https://pytorch.org para instalá-lo. Por exemplo, pip install torch torchvision torchaudio triton
Confirme se o CUDA está instalado corretamente. Tente nvcc
. Se isso falhar, você precisará instalar os drivers cudatoolkit
ou CUDA.
Instale xformers
manualmente. Você pode tentar instalar vllm
e ver se vllm
foi bem-sucedido. Verifique se xformers
foi bem-sucedido com python -m xformers.info
Vá para https://github.com/facebookresearch/xformers. Outra opção é instalar flash-attn
para GPUs Ampere.
Finalmente, instale bitsandbytes
e verifique-o com python -m bitsandbytes
Acesse nossa documentação oficial para salvar no GGUF, checkpoint, avaliação e muito mais!
Apoiamos o código TRL, Trainer, Seq2SeqTrainer ou mesmo Pytorch do Huggingface!
Estamos nos documentos oficiais do Hugging Face! Confira os documentos SFT e documentos DPO!
from unsloth import FastLanguageModel from unsloth import is_bfloat16_supportedimport torchfrom trl import SFTTrainerfrom transformers import TrainingArgumentsfrom datasets import load_datasetmax_seq_length = 2048 # Suporta RoPE Scaling internamente, então escolha qualquer!# Obtenha LAION dataseturl = "https://huggingface.co/datasets/laion/OIG/resolve/main/unified_chip2.jsonl"dataset = load_dataset("json", data_files = {"train": url}, split = "train")# 4 bits pré modelos quantizados que oferecemos suporte para download 4x mais rápido + sem OOMs.fourbit_models = ["unsloth/mistral-7b-v0.3-bnb-4bit", # Novo Mistral v3 2x mais rápido!"unsloth/mistral-7b-instruct-v0.3-bnb-4bit","unsloth/llama-3-8b -bnb-4bit", # Llama-3 modelo de 15 trilhões de tokens 2x mais rápido!"unsloth/llama-3-8b-Instruct-bnb-4bit","unsloth/llama-3-70b-bnb-4bit","unsloth/Phi-3-mini-4k-instruct", # Phi-3 2x mais rápido!"unsloth/Phi-3-medium-4k-instruct","unsloth/mistral-7b-bnb-4bit","unsloth/gemma-7b-bnb-4bit", # Gemma 2,2x mais rápido!] # Mais modelos em https://huggingface.co/unslothmodel, tokenizer = FastLanguageModel.from_pretrained(model_name = "unsloth/llama-3-8b-bnb-4bit",max_seq_length = max_seq_length,dtype = Nenhum,load_in_4bit = Verdadeiro, )# Faça correção de modelo e adicione pesos LoRA rápidosmodel = 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, # Suporta qualquer um, mas = 0 é otimizadobias = "none", # Suporta qualquer um, mas = "none" é otimizado# [NOVO] "unsloth" usa 30% menos VRAM, cabe em tamanhos de lote 2x maiores!use_gradient_checkpointing = "unsloth", # True ou "unsloth" para muito longo contextrandom_state = 3407,max_seq_length = max_seq_length,use_rslora = False, # Oferecemos suporte à classificação estabilizada LoRAloftq_config = Nenhum, # E 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 = não is_bfloat16_supported(),bf16 = is_bfloat16_supported(),logging_steps = 1,output_dir = "outputs",optim = "adamw_8bit",seed = 3407, ), )trainer.train()# Vá para https://github.com/unslothai/unsloth/wiki para dicas avançadas como# (1) Salvar em GGUF / mesclar em 16 bits para vLLM# (2) Treinamento contínuo a partir de um adaptador LoRA salvo # (3) Adicionando um ciclo de avaliação / OOMs# (4) Modelos de chat personalizados
DPO (Otimização de preferência direta), PPO e modelagem de recompensa parecem funcionar de acordo com testes independentes de terceiros da Llama-Factory. Temos aqui um notebook preliminar do Google Colab para reproduzir o Zephyr no Tesla T4: notebook.
Estamos nos documentos oficiais do Hugging Face! Estamos nos documentos SFT e nos documentos DPO!
import osos.environ["CUDA_VISIBLE_DEVICES"] = "0" # Opcional definir ID do dispositivo GPUfrom unsloth import FastLanguageModel, PatchDPOTrainerfrom unsloth import is_bfloat16_supportedPatchDPOTrainer()import torchfrom transformers import TrainingArgumentsfrom trl import DPOTrainermodel, tokenizer = FastLanguageModel.from_pretrained(model_name = "unsloth/zephyr-sft-bnb-4bit",max_seq_length = max_seq_length,dtype = Nenhum,load_in_4bit = Verdadeiro, )# Faça correção de modelo e adicione pesos LoRA rápidosmodel = 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, # Suporta qualquer um, mas = 0 é otimizadobias = "none", # Suporta qualquer um, mas = "none" é otimizado# [NOVO] "unsloth" usa 30% menos VRAM, cabe em tamanhos de lote 2x maiores!use_gradient_checkpointing = "unsloth", # True ou "unsloth" para muito contexto_state_aleatório longo = 3407, max_seq_length = max_seq_length, )dpo_trainer = DPOTrainer(model = model,ref_model = None,args = TrainingArguments(per_device_train_batch_size = 4,gradient_accumulation_steps = 8,warmup_ratio = 0,1,num_train_epochs = 3,fp16 = não is_bfloat16_supported(),bf16 = is_bfloat16_supported(),logging_steps = 1,optim = "adamw_8bit",seed = 42,output_dir = "saídas", ),beta = 0,1,train_dataset = YOUR_DATASET_HERE,# eval_dataset = YOUR_DATASET_HERE,tokenizer = tokenizer,max_length = 1024,max_prompt_length = 512, )dpo_trainer.train()
Clique em "Código" para exemplos totalmente reproduzíveis
"Unsloth Equal" é uma prévia da nossa versão PRO, com o código removido. Todas as configurações e a curva de perda permanecem idênticas.
Para a lista completa de tabelas de benchmarking, acesse nosso site
1A100 40GB | ?Abraçando o rosto | Atenção Flash 2 | ?Despreguiça aberta | Preguiça Igual | Preguiça Pro | Despreguiça Max |
---|---|---|---|---|---|---|
Alpaca | 1x | 1,04x | 1,98x | 2,48x | 5,32x | 15,64x |
código | Código | Código | Código | Código | ||
segundos | 1040 | 1001 | 525 | 419 | 196 | 67 |
memória MB | 18235 | 15365 | 9631 | 8525 | ||
% economizada | 15,74 | 47.18 | 53,25 |
Link para tabela de desempenho. TGS: tokens por GPU por segundo. Modelo: LLaMA2-7B. GPU: NVIDIA A100 * 1. Tamanho do lote: 4. Acumulação de gradiente: 2. Classificação LoRA: 8. Comprimento máximo: 1024.
Método | Pedaços | TGS | GRAMA | Velocidade |
---|---|---|---|---|
AF | 16 | 2392 | 18 GB | 100% |
AF+FA2 | 16 | 2954 | 17 GB | 123% |
Preguiça+FA2 | 16 | 4007 | 16 GB | 168% |
AF | 4 | 2415 | 9 GB | 101% |
Preguiça+FA2 | 4 | 3726 | 7 GB | 160% |
1A100 40GB | Abraçando o rosto | Atenção Flash 2 | Despreguiça aberta | Preguiça Igual | Preguiça Pro | Despreguiça Max |
---|---|---|---|---|---|---|
Mistral 7B Slim Orca | 1x | 1,15x | 2,15x | 2,53x | 4,61x | 13,69x |
código | Código | Código | Código | Código | ||
segundos | 1813 | 1571 | 842 | 718 | 393 | 132 |
memória MB | 32853 | 19385 | 12465 | 10271 | ||
% economizada | 40,99 | 62.06 | 68,74 |
1A100 40GB | Abraçando o rosto | Atenção Flash 2 | Despreguiça aberta | Preguiça Igual | Preguiça Pro | Despreguiça Max |
---|---|---|---|---|---|---|
Código Lhama 34B | OOM | 0,99x | 1,87x | 2,61x | 4,27x | 12,82x |
código | Código | Código | Código | |||
segundos | 1953 | 1982 | 1043 | 748 | 458 | 152 |
memória MB | 40.000 | 33217 | 27413 | 22161 | ||
% economizada | 16,96 | 31.47 | 44,60 |
1T4 16 GB | Abraçando o rosto | Atenção instantânea | Despreguiça aberta | Unsloth Pro Igual | Preguiça Pro | Despreguiça Max |
---|---|---|---|---|---|---|
Alpaca | 1x | 1,09x | 1,69x | 1,79x | 2,93x | 8,3x |
código | Código | Código | Código | |||
segundos | 1599 | 1468 | 942 | 894 | 545 | 193 |
memória MB | 7199 | 7059 | 6459 | 5443 | ||
% economizada | 1,94 | 10.28 | 24h39 |
2 T4 DDP | Abraçando o rosto | Atenção instantânea | Despreguiça aberta | Preguiça Igual | Preguiça Pro | Despreguiça Max |
---|---|---|---|---|---|---|
Alpaca | 1x | 0,99x | 4,95x | 4,44x | 7,28x | 20,61x |
código | Código | Código | ||||
segundos | 9882 | 9946 | 1996 | 2227 | 1357 | 480 |
memória MB | 9176 | 9128 | 6904 | 6782 | ||
% economizada | 0,52 | 24,76 | 26.09 |
Um Tesla T4 no 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
Sistema | GPU | Alpaca (52K) | LAION OIG (210K) | Abra o Assistente (10K) | SlimOrca (518K) |
---|---|---|---|---|---|
Abraçando cara | 1 T4 | 23h 15m | 56h 28m | 8h 38m | 391h 41m |
Despreguiça aberta | 1 T4 | 13h 7m (1,8x) | 31h 47m (1,8x) | 4h 27m (1,9x) | 240h 4m (1,6x) |
Preguiça Pro | 1 T4 | 3h 6m (7,5x) | 5h 17m (10,7x) | 1h 7m (7,7x) | 59h 53m (6,5x) |
Despreguiça Max | 1 T4 | 2h 39m (8,8x) | 4h 31m (12,5x) | 0h 58m (8,9x) | 51h 30m (7,6x) |
Uso máximo de memória
Sistema | GPU | Alpaca (52K) | LAION OIG (210K) | Abra o Assistente (10K) | SlimOrca (518K) |
---|---|---|---|---|---|
Abraçando cara | 1 T4 | 7,3 GB | 5,9 GB | 14,0 GB | 13,3 GB |
Despreguiça aberta | 1 T4 | 6,8 GB | 5,7 GB | 7,8 GB | 7,7 GB |
Preguiça Pro | 1 T4 | 6,4 GB | 6,4 GB | 6,4 GB | 6,4 GB |
Despreguiça Max | 1 T4 | 11,4 GB | 12,4 GB | 11,9 GB | 14,4 GB |
Dois Tesla T4s no 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
Sistema | GPU | Alpaca (52K) | LAION OIG (210K) | Abra o Assistente (10K) | SlimOrca (518K) * |
---|---|---|---|---|---|
Abraçando cara | 2 T4 | 84h 47m | 163h 48m | 30h 51m | 1301h 24m* |
Preguiça Pro | 2 T4 | 3h 20m (25,4x) | 5h 43m (28,7x) | 1h 12m (25,7x) | 71h 40m (18,1x)* |
Despreguiça Max | 2 T4 | 3h 4m (27,6x) | 5h 14m (31,3x) | 1h 6m (28,1x) | 54h 20m (23,9x)* |
Uso máximo de memória em um sistema multi GPU (2 GPUs)
Sistema | GPU | Alpaca (52K) | LAION OIG (210K) | Abra o Assistente (10K) | SlimOrca (518K) * |
---|---|---|---|---|---|
Abraçando cara | 2 T4 | 8,4 GB | 6GB | 7,2 GB | 5,3 GB | 14,3 GB | 6,6 GB | 10,9 GB | 5,9 GB* |
Preguiça Pro | 2 T4 | 7,7 GB | 4,9 GB | 7,5 GB | 4,9 GB | 8,5 GB | 4,9 GB | 6,2 GB | 4,7 GB * |
Despreguiça Max | 2 T4 | 10,5 GB | 5 GB | 10,6 GB | 5 GB | 10,6 GB | 5 GB | 10,5 GB | 5 GB * |
Slim Orca bsz=1
para todos os benchmarks desde bsz=2
OOMs. Podemos lidar com bsz=2
, mas comparamos com bsz=1
para consistência.
HuyNguyen-hust por tornar os embeddings RoPE 28% mais rápidos
RandomInternetPreson por confirmar o suporte WSL
152334H para suporte experimental a DPO
atgctg para destaque de sintaxe