Fine-tuning 실전·API — PEFT Quicktour (LoRA)

Fine-tuning 실전·API

PEFT Quicktour는 LoRA로 모델 일부만 학습해 큰 모델을 소비자 장비에서 다루는 법을 보여줘요. 설정(Config) → 모델 생성 → 학습 → 저장·추론 순서로 진행돼요.

LoRA 설정 구성

from peft import LoraConfig, TaskType

peft_config = LoraConfig(
    target_modules=["q_proj"],
    task_type=TaskType.CAUSAL_LM,
    inference_mode=False,
    r=8,
    lora_alpha=32,
    lora_dropout=0.1,
)

주요 인자:

  • target_modules: 어느 모듈(레이어)에 적응 파라미터를 넣을지
  • task_type: 과제 유형 (예: TaskType.CAUSAL_LM)
  • r: 저랭크 차수 (업데이트 행렬의 크기)
  • lora_alpha: LoRA 스케일링 계수

PEFT 모델 생성

from transformers import AutoModelForCausalLM
from peft import get_peft_model

model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3.2-1B")
peft_model = get_peft_model(model, peft_config)

peft_model.print_trainable_parameters()
# trainable params: 524,288 || all params: 1,236,338,688 || trainable%: 0.0424

1B 파라미터 중 0.04%만 학습하는 아주 가벼운 설정이 가능해요.

학습과 저장

trainer = Trainer(
    model=peft_model,
    args=training_args,
    train_dataset=tokenized_datasets["train"],
    eval_dataset=tokenized_datasets["test"],
    data_collator=data_collator,
)
trainer.train()

peft_model.save_pretrained("output_dir")
from huggingface_hub import notebook_login
notebook_login()
peft_model.push_to_hub("your-name/my-llama3.2-adapter")

LoRA 어댑터는 adapter_config.json + adapter_model.safetensors 두 파일뿐이라 아주 작아요. 예를 들어 opt-350m 기준 어댑터가 약 6MB인 것에 비해 전체 모델은 ~700MB예요. 그래서 저장·전송·로드가 무척 효율적이에요.

추론

from peft import AutoPeftModelForCausalLM
from transformers import AutoTokenizer
import torch

device = torch.accelerator.current_accelerator().type if hasattr(torch, "accelerator") else "cuda"
peft_model = AutoPeftModelForCausalLM.from_pretrained("ybelkada/opt-350m-lora")
tokenizer = AutoTokenizer.from_pretrained("ybelkada/opt-350m-lora")

AutoPeftModelForCausalLM.from_pretrained로 저장된 어댑터를 곧바로 다시 불러와 추론할 수 있어요.

더 알아보기