C.W.K.
Stream
Lesson 04 of 08 · published

LoRA: Parameter-Efficient Tuning

~22 min · lora, peft, fine-tune

Level 0Curious
0 XP0/73 lessons0/11 achievements
0/120 XP to next level120 XP to go0% complete

왜 LoRA 가 존재하는가

7B-parameter LLM 의 full fine-tuning 이 task 당 update 된 7B parameter 저장 — weight 만 14GB. LoRA (Low-Rank Adaptation, Hu et al. 2021) 가 original weight freeze 하고 각 linear layer 옆에 작은 trainable low-rank matrix 추가. 그 layer 의 fine-tuned 'update' 가 W' = W + (BA) 인데 A: [d, r]B: [r, d]r << d.

결과: 0.1% 정도 추가 parameter train, full fine-tuning 과 comparable accuracy, base model 다시 load 없이 LoRA adapter swap in/out 가능. 개인 LLM fine-tuning 을 feasible 하게 만든 기술.

팁: LoRA 의 typical rank 가 r=8~64. Lower rank = 적은 parameter = 빠르고 + 싸고 + underfitting risk 더. Higher rank = full fine-tune 에 가까움. r=16 부터 시작, 거기서 tune.

QLoRA — quantized base 위 LoRA

QLoRA (Dettmers et al., 2023) 가 frozen base model 을 4-bit quantized 형태로 유지하고 LoRA adapter 를 BF16 으로 train. 결과: 70B model 이 8 개가 아니라 single 80GB H100 에서 fine-tune. 개인과 small team 에 진지한 LLM fine-tuning 을 feasible 하게 만든 거.

PEFT 라이브러리

Hugging Face peft 라이브러리가 LoRA, QLoRA, prefix tuning, prompt tuning, IA3 등을 uniform API 로 구현. 어떤 pretrained model 이든 get_peft_model(model, lora_config) 로 wrap, 보통 train, adapter (small file) 저장, 어디서든 load.

원칙: LoRA 가 modern fine-tuning default. Full fine-tuning 이 LoRA accuracy gap 이 중요하고 compute 사용 가능한 case 에 reserve. Everyday adaptation 엔 LoRA 이김.

Code

LoRA fine-tuning with PEFT in twelve lines·python
from transformers import AutoTokenizer, AutoModelForCausalLM
from peft import LoraConfig, get_peft_model, TaskType

base = "meta-llama/Llama-3.1-8B"
tok = AutoTokenizer.from_pretrained(base)
model = AutoModelForCausalLM.from_pretrained(base, torch_dtype="bfloat16",
                                             device_map="auto")

config = LoraConfig(
    task_type=TaskType.CAUSAL_LM,
    r=16, lora_alpha=32, lora_dropout=0.05,
    target_modules=["q_proj", "v_proj"],
)
model = get_peft_model(model, config)
model.print_trainable_parameters()
# trainable params: 4,194,304 || all params: 8,034,455,552 || trainable%: 0.052%

External links

Exercise

PEFT 사용해서 small (1.5B-3B) open LLM 을 chat-style dataset 에 LoRA-fine-tune. Adapter 저장. Base model 위에 다시 load 해서 inference 가 reproduce 하는지 확인. Adapter file size 와 base model file size 비교.

Progress

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

댓글 0

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

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