Unsloth
Unsloth
Unsloth은 대규모 언어 모델의 학습을 빠르게 하고 메모리 사용을 줄여주는 파인튜닝·강화 학습 프레임워크예요. Transformers 모델을 4-bit, 8-bit, 16-bit 정밀도로 학습하는 방법을 살펴볼게요.
출처: 문서
본문
Unsloth은 대규모 언어 모델의 학습 속도를 높이고 메모리 사용을 줄여주는 파인튜닝·강화 프레임워크예요. 커스텀 RoPE와 Triton 커널로 4-bit, 8-bit, 16-bit 정밀도 학습을 지원해요. 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는 Transformers API를 감싸고 속도를 위해 내부 메서드를 패치해요.
-
FastLanguageModel.from_pretrained는 AutoConfig.from_pretrained()로 config를 불러와요. 그다음 AutoModelForCausalLM.from_pretrained()로 기본 모델을 불러와요. 로딩 전에 Unsloth는 Transformers 모델 내부의 attention, decoder layer, rotary embedding 클래스를 패치해요. -
UnslothTrainer는 TRL의 SFTTrainer를 확장해요. Unsloth는 compute_loss()와 training_step()을 패치해 예전 Transformers 버전의 gradient accumulation 문제를 고쳐요.
리소스 (Resources)
더 알아보기 (Learn more)
- TRL 문서
- Transformers 커스텀 모델 문서