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로 저장된 어댑터를 곧바로 다시 불러와 추론할 수 있어요.