Transformers documentation
Unsloth
Unsloth
Unsloth — это фреймворк для дообучения и обучения с подкреплением, который ускоряет обучение и снижает потребление памяти для больших языковых моделей. Он поддерживает обучение с точностью 4-бит, 8-бит и 16-бит с использованием собственных ядер RoPE и Triton. Unsloth работает с семействами моделей Llama, Mistral, Gemma, Qwen и другими.
from datasets import load_dataset
from transformers import TrainingArguments
from unsloth import FastLanguageModel
from unsloth.trainer import UnslothTrainer
model, tokenizer = FastLanguageModel.from_pretrained(
model_name="unsloth/Llama-3.2-1B-Instruct",
max_seq_length=2048,
load_in_4bit=True,
)
model = FastLanguageModel.get_peft_model(
model,
r=16,
lora_alpha=16,
target_modules=["q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj"],
)
dataset = load_dataset("trl-lib/Capybara", split="train[:500]")
dataset = dataset.map(lambda x: {"text": x["conversations"][0]["value"]})
trainer = UnslothTrainer(
model=model,
tokenizer=tokenizer,
train_dataset=dataset,
dataset_text_field="text",
max_seq_length=2048,
args=TrainingArguments(
output_dir="outputs",
per_device_train_batch_size=2,
num_train_epochs=1,
),
)
trainer.train()Интеграция с Transformers
Unsloth оборачивает API Transformers и патчит внутренние методы для повышения скорости.
FastLanguageModel.from_pretrainedloads config with AutoConfig.from_pretrained(). It then loads a base model with AutoModelForCausalLM.from_pretrained(). Before loading, Unsloth patches attention, decoder layer, and rotary embedding classes inside a Transformers model.UnslothTrainerрасширяет SFTTrainer из TRL. Unsloth патчит compute_loss() и training_step(), чтобы исправить накопление градиентов в старых версиях Transformers.
Ресурсы
- Документация Unsloth
- статья в блоге Ускорение дообучения LLM в 2 раза с помощью Unsloth и TRL