대형 모델 파인튜닝을 위한 가장 효율적이고 핫한 방법

LoRA란 무엇인가?
LoRA(Low-Rank Adaptation)는 대형 모델 파인튜닝(transfer learning) 을 훨씬 가볍고 효율적으로 만들기 위해 고안된 방법입니다.
기존에는 파인튜닝 시 모델 전체 파라미터를 업데이트해야 했습니다.
하지만 대형 모델(수억~수십억 파라미터)을 이런 식으로 학습하려면:
- VRAM 엄청 필요 (A100 여러 장…)
- 학습 시간이 오래 걸림
- 모델 버전을 여러 개 저장하기 힘듦
LoRA는 이런 문제를 해결합니다.
핵심 아이디어는 “기존 가중치는 그대로 두고, 아주 작은 저랭크 행렬만 학습한다” 입니다.
수식으로 보는 LoRA
기존 선형 계층(예: Attention의 Q, K, V projection)은 다음과 같습니다:
여기서 W₀ 는 Pre-trained weight.
LoRA는 W₀를 동결(freeze) 하고, 대신 아래처럼 업데이트를 추가합니다:
- A: (r × k) 행렬
- B: (d × r) 행렬
- r 은 rank, 보통 4~16처럼 아주 작게 설정
즉, 전체 weight를 학습하지 않고 ΔW만 학습합니다.
파라미터 절감 예시
예를 들어 d=1024, k=1024, r=8이면
- 기존 파인튜닝 파라미터 수:
-
d × k = 1,048,576
- LoRA 학습 파라미터 수:
-
(r × k) + (d × r) = (8×1024)+(1024×8)=16,384
98% 이상 파라미터 절약!
장점 정리
1. VRAM 사용량 대폭 감소
2. 학습 시간 단축
3. 모델 버전 관리 쉬움 → LoRA 어댑터만 저장하면 됨
4. 여러 Task에 하나의 Base Model 재활용 가능
5. 추론 시 원하면 Merge 가능 (W₀에 델타 가중치 더해서 단일 weight로 변환)
단점 및 고려할 점
- rank r이 너무 작으면 표현력이 부족 → 성능 하락
- 어떤 레이어에 LoRA 적용할지 선택 중요 (Q/K/V 추천, FFN 일부 가능)
- 극단적으로 다른 도메인 데이터면 full fine-tuning이 더 필요할 수도 있음
🔧 PyTorch 예시 코드 (간단 버전)
import torch
import torch.nn as nn
class LoRALinear(nn.Module):
def __init__(self, in_features, out_features, r=8):
super().__init__()
self.W = nn.Linear(in_features, out_features, bias=False)
self.W.weight.requires_grad = False # Freeze original weight
self.A = nn.Linear(in_features, r, bias=False)
self.B = nn.Linear(r, out_features, bias=False)
def forward(self, x):
return self.W(x) + self.B(self.A(x))
실무 적용 팁
- 새 클래스 추가 시 → head는 새로 초기화하고 학습
- Optimizer → LoRA 파라미터만 등록
- Rank & Learning Rate → 함께 튜닝 (r=4~16 권장)
- 여러 Adapter → Task별로 저장/교체 가능
결론
LoRA는 이제 필수적으로 알아야 하는 Fine-Tuning 기법입니다.
대형 모델 시대에서 비용, 시간, 자원 문제를 해결해 주고,
서비스 배포 시에도 유연한 모델 관리가 가능하게 해 줍니다.
다음 편은 아래에 있습니다!
https://machineindeep.tistory.com/62
AI 모델 경량화 시리즈 2편: Prefix-Tuning & Prompt-Tuning
프롬프트만 바꿔서 모델을 새로운 태스크에 적응시킨다?LoRA보다 더 가볍게, 심지어 파라미터 몇 퍼센트만 학습하는 방법. Prefix-/Prompt-Tuning이란?Prefix-Tuning 과 Prompt-Tuning 은 Pretrained 모델의 파라미
machineindeep.tistory.com
'ML | DL > 딥러닝 방법론|실습' 카테고리의 다른 글
| AI 모델 경량화 시리즈 3편: Adapters (0) | 2025.09.14 |
|---|---|
| AI 모델 경량화 시리즈 2편: Prefix-Tuning & Prompt-Tuning (0) | 2025.09.14 |
| [Activation Function] Sigmoid 이란? (2) | 2022.03.28 |
| Deepfake faceswap 소프트웨어 설치, 사용법 (1) | 2021.04.06 |
| CNN(Convolutional Neural Networks) 이론 설명 (0) | 2020.10.30 |