본문 바로가기
C.W.K.
Stream
Lesson 07 of 08 · published

QLoRA 와 PEFT 라이브러리

~26 min · training, peft, qlora

Level 0스카우트
0 XP0/50 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

QLoRA는 4비트 base 위에 LoRA를 얹어

base 모델을 정규 분포 가중치에 맞춘 NF4로 양자화해 고정하고, fp16이나 bf16인 작은 LoRA adapter만 학습해. base가 차지하는 메모리를 크게 줄여 48GB GPU 한 장에서도 70B급 모델을 조정할 수 있는 길을 열어.

  • BitsAndBytesConfig로 4비트 방식을 선언해.
  • prepare_model_for_kbit_training으로 base를 고정하고 필요한 형 변환과 checkpointing을 준비해.
  • LoraConfig로 rank와 대상 계층을 정해.
  • get_peft_model로 adapter가 붙은 모델을 만들어.

PEFT에는 IA3·LoHa·LoKr·OFT·X-LoRA·VeRA도 있지만 일반적인 SFT에서는 LoRA와 QLoRA가 검증된 출발점이야. 다른 방법은 메모리나 표현력의 구체적인 병목이 확인됐을 때 비교해.

Code

QLoRA 셋업·python
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
from peft import LoraConfig, get_peft_model, prepare_model_for_kbit_training
import torch

bnb_cfg = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_compute_dtype=torch.bfloat16,
    bnb_4bit_use_double_quant=True,
)

base = "meta-llama/Llama-3.1-8B-Instruct"
tok = AutoTokenizer.from_pretrained(base)
model = AutoModelForCausalLM.from_pretrained(base, quantization_config=bnb_cfg, device_map="auto")
model = prepare_model_for_kbit_training(model)

lora_cfg = LoraConfig(
    r=16, lora_alpha=32, lora_dropout=0.05,
    target_modules=["q_proj", "k_proj", "v_proj", "o_proj"],
    bias="none", task_type="CAUSAL_LM",
)
model = get_peft_model(model, lora_cfg)
model.print_trainable_parameters()
# 이제 Trainer / SFTTrainer 학습

External links

Exercise

7B 모델에 QLoRA fine-tune 셋업. GPU 메모리 비교: 풀 bf16 (fit 안 됨), LoRA bf16 (fit 가능), QLoRA. 200 step 학습. Adapter 저장. 인퍼런스: 4-bit base + adapter 로드 후 generate. base SHA 핀해서 결과 재현 가능.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.