Twitter (también conocido como X)
Síguenos en X | |
Instalación | unsloth/README.md |
Evaluación comparativa | Tablas de rendimiento |
Modelos lanzados | Lanzamientos no perezosos |
Blog | Lea nuestros blogs |
Todos los núcleos escritos en el lenguaje Triton de OpenAI. Motor de retroceso manual .
0% de pérdida de precisión - sin métodos de aproximación - todo exacto.
Sin cambio de hardware. Admite GPU NVIDIA desde 2018+. Capacidad mínima de CUDA 7.0 (V100, T4, Titan V, RTX 20, 30, 40x, A100, H100, L40, etc.) ¡Comprueba tu GPU! GTX 1070, 1080 funciona, pero es lento.
Funciona en Linux y Windows a través de WSL.
Admite ajuste fino QLoRA / LoRA de 4 bits y 16 bits a través de bitsandbytes.
El código abierto entrena 5 veces más rápido: ¡consulte Unsloth Pro para un entrenamiento hasta 30 veces más rápido !
Si entrenaste a un modelo con ?Unsloth, ¡puedes usar esta genial pegatina!
Para obtener la lista completa de tablas de evaluación comparativa reproducibles , visite nuestro sitio web
1 A100 40GB | ?Cara abrazada | Atención relámpago | ?Código abierto sin pereza | ?Unsloth Pro |
---|---|---|---|---|
Alpaca | 1x | 1,04x | 1,98x | 15,64x |
Chip2 LAION | 1x | 0,92x | 1,61x | 20,73x |
OASST | 1x | 1,19x | 2,17x | 14,83x |
Orca delgada | 1x | 1,18x | 2,22x | 14,82x |
La tabla de evaluación comparativa a continuación fue realizada por ?Hugging Face.
Colab T4 gratis | Conjunto de datos | ?Cara abrazada | Pytorch 2.1.1 | ?Desperezoso | ? Reducción de VRAM |
---|---|---|---|---|---|
Llama-2 7b | OASST | 1x | 1,19x | 1,95x | -43,3% |
mistral 7b | Alpaca | 1x | 1,07x | 1,56x | -13,7% |
Pequeña Llama 1.1b | Alpaca | 1x | 2,06x | 3,87x | -73,8% |
DPO con Zephyr | Ultrachat | 1x | 1,09x | 1,55x | -18,6% |
Para versiones estables, utilice pip install unsloth
. Sin embargo, recomendamos pip install "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git"
para la mayoría de las instalaciones.
️Only use Conda if you have it. If not, use Pip
. Seleccione pytorch-cuda=11.8,12.1
para CUDA 11.8 o CUDA 12.1. Admitimos python=3.10,3.11,3.12
.
conda crear --nombre unsloth_env pitón = 3.11 pytorch-cuda=12.1 pytorch cudatoolkit xformers -c pytorch -c nvidia -c xformers -y conda activar unsloth_env pip install "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git"pip install --no-deps trl peft acelerar 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 es un poco más complejo ya que existen problemas de dependencia. El comando pip es diferente para las versiones torch 2.2,2.3,2.4,2.5
y CUDA.
Para otras versiones de antorcha, admitimos torch211
, torch212
, torch220
, torch230
, torch240
y para las versiones CUDA, admitimos cu118
, cu121
y cu124
. Para dispositivos Ampere (A100, H100, RTX3090) y superiores, utilice cu118-ampere
, cu121-ampere
o cu124-ampere
.
Por ejemplo, si tienes torch 2.4
y CUDA 12.1
, usa:
instalación de pip --actualizar pip instalación de pip "unsloth[cu121-torch240] @ git+https://github.com/unslothai/unsloth.git"
Otro ejemplo, si tienes torch 2.5
y CUDA 12.4
, usa:
instalación de pip --actualizar pip instalación de pip "unsloth[cu124-torch250] @ git+https://github.com/unslothai/unsloth.git"
Y otros ejemplos:
instalación de pip "unsloth[cu121-ampere-torch240] @ git+https://github.com/unslothai/unsloth.git"instalación de pip "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"pip install "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"
O ejecute lo siguiente en una terminal para obtener el comando de instalación de pip óptimo :
wget -qO- https://raw.githubusercontent.com/unslothai/unsloth/main/unsloth/_auto_install.py | pitón -
O ejecute lo siguiente manualmente en un REPL de Python:
intente: importar antorchaexcepto: elevar ImportError('Instalar antorcha mediante `pip install torch`')desde packaging.version importar versión como Vv = V(torch.__version__)cuda = str(torch.version.cuda)is_ampere = torch.cuda. get_device_capability()[0] >= 8if cuda!= "12.1" y cuda!= "11.8" y cuda!= "12.4": elevar RuntimeError(f"CUDA = {cuda} ¡no es compatible!")if v <= V ('2.1.0'): rise RuntimeError(f"Torch = {v} ¡demasiado viejo!")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: rise RuntimeError(f"Torch = {v} ¡demasiado nuevo!")x = x.format(cuda.replace(".", ""), "- amperio" if is_ampere else "")print(f'pip install --upgrade pip && pip install "unsloth[{x}] @ git+https://github.com/unslothai/unsloth.git"')
Para ejecutar Unsloth directamente en Windows:
Instale Triton desde esta bifurcación de Windows y siga las instrucciones: https://github.com/woct0rdho/triton-windows
En SFTTrainer, configure dataset_num_proc=1
para evitar un problema de bloqueo:
entrenador = SFTTrainer(conjunto de datos_num_proc=1, ... )
Para obtener instrucciones de instalación avanzadas o si ve errores extraños durante las instalaciones:
Instale torch
y triton
. Vaya a https://pytorch.org para instalarlo. Por ejemplo, pip install torch torchvision torchaudio triton
Confirme si CUDA está instalado correctamente. Pruebe nvcc
. Si eso falla, necesita instalar cudatoolkit
o controladores CUDA.
Instale xformers
manualmente. Puede intentar instalar vllm
y ver si vllm
tiene éxito. Compruebe si xformers
tuvo éxito con python -m xformers.info
Vaya a https://github.com/facebookresearch/xformers. Otra opción es instalar flash-attn
para GPU Ampere.
Finalmente, instale bitsandbytes
y compruébelo con python -m bitsandbytes
¡Vaya a nuestra documentación oficial para guardar en GGUF, puntos de control, evaluación y más!
Admitimos el código TRL, Trainer, Seq2SeqTrainer o incluso Pytorch de Huggingface.
¡Estamos en los documentos oficiales de Hugging Face! ¡Consulte los documentos SFT y DPO!
de unsloth importa FastLanguageModel de unsloth importa is_bfloat16_supportedimport torchde trl importa SFTTrainerde transformadores importa TrainingArgumentsde conjuntos de datos importa load_datasetmax_seq_length = 2048 # Admite escalamiento RoPE internamente, ¡así que elige cualquiera!# Get LAION dataseturl = "https://huggingface.co/datasets/laion/OIG/ resolve/main/unified_chip2.jsonl"dataset = load_dataset("json", data_files = {"train" : url}, split = "train")# Modelos precuantizados de 4 bits que admitimos para una descarga 4 veces más rápida + sin OOM.fourbit_models = [ "unsloth/mistral-7b-v0.3-bnb-4bit", # ¡Nuevo Mistral v3 2 veces más rápido!"unsloth/mistral-7b-instruct-v0.3-bnb-4bit","unsloth/llama-3-8b- bnb-4bit", # Llama-3 ¡modelo de 15 billones de tokens 2 veces más rápido!"unsloth/llama-3-8b-Instruct-bnb-4bit","unsloth/llama-3-70b-bnb-4bit","unsloth/Phi -3-mini-4k-instruct", # ¡Phi-3 2 veces más rápido!"unsloth/Phi-3-medium-4k-instruct","unsloth/mistral-7b-bnb-4bit","unsloth/gemma-7b- bnb-4bit", # ¡Gemma 2,2 veces más rápida!] # Más modelos en https://huggingface.co/unslothmodel, tokenizer = FastLanguageModel.from_pretrained(model_name = "unsloth/llama-3-8b-bnb-4bit",max_seq_length = max_seq_length,dtype = Ninguno,load_in_4bit = Verdadero, )# Realice parches en el modelo y agregue 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, # Admite cualquiera, pero = 0 está optimizadobias = "none", # Admite cualquiera, pero = "none" está optimizado# [NUEVO] "unsloth" usa un 30% menos de VRAM, ¡se adapta a tamaños de lotes 2 veces más grandes!use_gradient_checkpointing = "unsloth", # Verdadero o "unsloth" para contextos muy largosrandom_state = 3407,max_seq_length = max_seq_length,use_rslora = False, # Admitimos rango estabilizado LoRAloftq_config = Ninguno, # Y LoftQ)trainer = SFTTrainer( modelo = modelo,train_dataset = conjunto de datos,conjunto de datos_text_field = "texto",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 = no is_bfloat16_supported(),bf16 = is_bfloat16_supported(),logging_steps = 1,output_dir = "salidas",optim = "adamw_8bit",seed = 3407, ), )trainer.train()# Vaya a https://github.com/unslothai/unsloth/wiki para obtener consejos avanzados como# (1) Guardar en GGUF/fusionar a 16 bits para vLLM# (2) Entrenamiento continuo desde un adaptador LoRA guardado # (3) Agregar un bucle de evaluación/OOM# (4) Plantillas de chat personalizadas
DPO (Optimización de preferencias directas), PPO y modelado de recompensas parecen funcionar según las pruebas independientes de terceros realizadas por Llama-Factory. Tenemos una libreta preliminar de Google Colab para reproducir Zephyr en Tesla T4 aquí: libreta.
¡Estamos en los documentos oficiales de Hugging Face! ¡Estamos en los documentos SFT y DPO!
import osos.environ["CUDA_VISIBLE_DEVICES"] = "0" # ID de dispositivo GPU opcional establecido desde unsloth import FastLanguageModel, PatchDPOTrainerdesde unsloth import is_bfloat16_supportedPatchDPOTrainer()importar antorchadesde transformadores importar TrainingArgumentsdesde trl importar DPOTrainermodel, tokenizer = FastLanguageModel.from_pretrained(model_name = "unsloth/ze firo -sft-bnb-4bit",max_seq_length = max_seq_length,dtype = Ninguno,load_in_4bit = Verdadero, )# Realice parches en el modelo y agregue 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, # Admite cualquiera, pero = 0 está optimizadobias = "none", # Admite cualquiera, pero = "none" está optimizado# [NUEVO] "unsloth" usa un 30% menos de VRAM, ¡se adapta a tamaños de lotes 2 veces más grandes! use_gradient_checkpointing = "unsloth", # Verdadero o "unsloth" para contextos muy largos contextrandom_state = 3407,max_seq_length = max_seq_length, )dpo_trainer = DPOTrainer(modelo = modelo,ref_model = Ninguno,args = TrainingArguments(per_device_train_batch_size = 4,gradient_accumulation_steps = 8,warmup_ratio = 0.1,num_train_epochs = 3,fp16 = no is_bfloat16_supported(),bf16 = is_bfloat16_supported(),logging_steps = 1, optim = "adamw_8bit",seed = 42,output_dir = "salidas", ),beta = 0.1,train_dataset = YOUR_DATASET_HERE,# eval_dataset = YOUR_DATASET_HERE,tokenizer = tokenizer,max_length = 1024,max_prompt_length = 512, )dpo_trainer.tren()
Haga clic en "Código" para ver ejemplos totalmente reproducibles
"Unsloth Equal" es una vista previa de nuestra versión PRO, sin código. Todos los ajustes y la curva de pérdidas siguen siendo idénticos.
Para obtener la lista completa de tablas de evaluación comparativa, visite nuestro sitio web
1 A100 40GB | ?Cara abrazada | Atención de destello 2 | ?Abierto sin pereza | Igualdad sin pereza | Pro perezoso | Max perezoso |
---|---|---|---|---|---|---|
Alpaca | 1x | 1,04x | 1,98x | 2,48x | 5,32x | 15,64x |
código | Código | Código | Código | Código | ||
artículos de segunda clase | 1040 | 1001 | 525 | 419 | 196 | 67 |
MB de memoria | 18235 | 15365 | 9631 | 8525 | ||
% ahorrado | 15,74 | 47.18 | 53,25 |
Enlace a la tabla de rendimiento. TGS: tokens por GPU por segundo. Modelo: LLaMA2-7B. GPU: NVIDIA A100 * 1. Tamaño de lote: 4. Acumulación de gradiente: 2. Rango LoRA: 8. Longitud máxima: 1024.
Método | bits | TGS | GRAMO | Velocidad |
---|---|---|---|---|
frecuencia cardíaca | 16 | 2392 | 18GB | 100% |
HF+FA2 | 16 | 2954 | 17GB | 123% |
No perezoso+FA2 | 16 | 4007 | 16GB | 168% |
frecuencia cardíaca | 4 | 2415 | 9GB | 101% |
No perezoso+FA2 | 4 | 3726 | 7GB | 160% |
1 A100 40GB | abrazando la cara | Atención de destello 2 | Abierto sin pereza | Igualdad sin pereza | Pro perezoso | Max perezoso |
---|---|---|---|---|---|---|
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 | ||
artículos de segunda clase | 1813 | 1571 | 842 | 718 | 393 | 132 |
MB de memoria | 32853 | 19385 | 12465 | 10271 | ||
% ahorrado | 40,99 | 62.06 | 68,74 |
1 A100 40GB | abrazando la cara | Atención de destello 2 | Abierto sin pereza | Igualdad sin pereza | Pro perezoso | Max perezoso |
---|---|---|---|---|---|---|
Código Llama 34B | OOM | 0,99x | 1,87x | 2,61x | 4,27x | 12,82x |
código | Código | Código | Código | |||
artículos de segunda clase | 1953 | 1982 | 1043 | 748 | 458 | 152 |
MB de memoria | 40000 | 33217 | 27413 | 22161 | ||
% ahorrado | 16,96 | 31,47 | 44,60 |
1T4 16GB | abrazando la cara | Atención relámpago | Abierto sin pereza | Unsloth Pro Igual | Pro perezoso | Max perezoso |
---|---|---|---|---|---|---|
Alpaca | 1x | 1,09x | 1,69x | 1,79x | 2,93x | 8,3x |
código | Código | Código | Código | |||
artículos de segunda clase | 1599 | 1468 | 942 | 894 | 545 | 193 |
MB de memoria | 7199 | 7059 | 6459 | 5443 | ||
% ahorrado | 1,94 | 10.28 | 24.39 |
2 T4 DDP | abrazando la cara | Atención relámpago | Abierto sin pereza | Igualdad sin pereza | Pro perezoso | Max perezoso |
---|---|---|---|---|---|---|
Alpaca | 1x | 0,99x | 4,95x | 4,44x | 7,28x | 20,61x |
código | Código | Código | ||||
artículos de segunda clase | 9882 | 9946 | 1996 | 2227 | 1357 | 480 |
MB de memoria | 9176 | 9128 | 6904 | 6782 | ||
% ahorrado | 0,52 | 24,76 | 26.09 |
Un Tesla T4 en 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) | OIG DE LAION (210K) | Asistente abierto (10K) | SlimOrca (518K) |
---|---|---|---|---|---|
abrazando cara | 1 T4 | 23h 15m | 56h 28m | 8h 38m | 391h 41m |
Abierto sin pereza | 1 T4 | 13h 7m (1,8x) | 31h 47m (1,8x) | 4h 27m (1,9x) | 240h 4m (1,6x) |
Pro perezoso | 1 T4 | 3h 6m (7,5x) | 5h 17m (10,7x) | 1h 7m (7,7x) | 59h 53m (6,5x) |
Max perezoso | 1 T4 | 2h 39m (8,8x) | 4h 31m (12,5x) | 0h 58m (8,9x) | 51h 30m (7,6x) |
Uso máximo de memoria
Sistema | GPU | Alpaca (52K) | OIG DE LAION (210K) | Asistente abierto (10K) | SlimOrca (518K) |
---|---|---|---|---|---|
abrazando cara | 1 T4 | 7,3GB | 5,9GB | 14,0GB | 13,3GB |
Abierto sin pereza | 1 T4 | 6,8GB | 5,7GB | 7,8GB | 7,7GB |
Pro perezoso | 1 T4 | 6,4GB | 6,4GB | 6,4GB | 6,4GB |
Max perezoso | 1 T4 | 11,4GB | 12,4GB | 11,9GB | 14,4GB |
Dos Tesla T4 en 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) | OIG DE LAION (210K) | Asistente abierto (10K) | SlimOrca (518K) * |
---|---|---|---|---|---|
abrazando cara | 2 T4 | 84h 47m | 163h 48m | 30h 51m | 1301h 24m * |
Pro perezoso | 2 T4 | 3h 20m (25,4x) | 5h 43m (28,7x) | 1h 12m (25,7x) | 71h 40m (18,1x) * |
Max perezoso | 2 T4 | 3h 4m (27,6x) | 5h 14m (31,3x) | 1h 6m (28,1x) | 54h 20m (23,9x) * |
Uso máximo de memoria en un sistema de múltiples GPU (2 GPU)
Sistema | GPU | Alpaca (52K) | OIG DE LAION (210K) | Asistente abierto (10K) | SlimOrca (518K) * |
---|---|---|---|---|---|
abrazando cara | 2 T4 | 8,4 GB | 6GB | 7,2 GB | 5,3GB | 14,3GB | 6,6GB | 10,9GB | 5,9 GB * |
Pro perezoso | 2 T4 | 7,7 GB | 4,9GB | 7,5 GB | 4,9GB | 8,5 GB | 4,9GB | 6,2 GB | 4,7 GB * |
Max perezoso | 2 T4 | 10,5 GB | 5GB | 10,6 GB | 5GB | 10,6 GB | 5GB | 10,5 GB | 5 GB * |
Slim Orca bsz=1
para todos los puntos de referencia desde bsz=2
OOM. Podemos manejar bsz=2
, pero lo comparamos con bsz=1
para mantener la coherencia.
HuyNguyen-hust por hacer que las incrustaciones de RoPE sean un 28% más rápidas
RandomInternetPreson por confirmar el soporte de WSL
152334H para soporte DPO experimental
atgctg para resaltar la sintaxis