full fine-tuning 이 아픈 이유
큰 모델의 모든 weight 를 학습한다는 건 weight 마다 gradient 와 optimizer state 까지 들고 있어야 한다는 뜻 — 모델 자체보다 한참 먼저 GPU 메모리를 터뜨리는 게 바로 이 항목이야. LoRA (Low-Rank Adaptation) 는 영리한 베팅으로 이걸 비껴가: 원래 weight 는 통째로 freeze 하고, 그 옆에 더해지는 작은 low-rank 행렬 쌍만 학습해. 수억 개 대신 수십만 개 parameter 만 학습하는데, 모델은 전체를 튜닝한 것처럼 동작해.
한 줄, 두 가지 큰 이득
KerasHub 에선 backbone.enable_lora(rank=r) 한 줄 — 그 뒤 fit() 을 평소대로 호출하면 adapter 만 update 돼 (Code 참고). rank 가 다이얼이야: 높으면 적응 capacity 늘지만 학습할 parameter 도 늘어. 4~16 이면 대부분 커버. 공짜로 따라오는 이득 둘. 첫째 메모리: trainable param 이 자릿수째로 줄어서, cluster 필요했던 모델이 카드 한 장에 들어가. 둘째 저장: full 모델 복사본이 아니라 작은 adapter weight 만 save — 같은 base 를 열 번 fine-tune 해도 full checkpoint 열 개가 아니라 작은 파일 열 개야.
QLoRA — quantization 까지 쌓기
QLoRA 는 한 발 더 가: frozen backbone 을 먼저 quantize() 로 int8 (또는 int4) 로 줄여 resident 모델을 작게 만들고, 그 다음 위에 LoRA adapter 를 얹어. base 는 작고 frozen, adapter 는 작고 trainable, quality 는 full fine-tuning 에 근접. 이 조합이 7B 급 fine-tuning 을 consumer 하드웨어에 올린 거야.