ML | DL/딥러닝 방법론|실습

AI 모델 경량화 시리즈 1편: LoRA(Low-Rank Adaptation) 완벽 가이드

Leeys 2025. 9. 14. 22:04
반응형

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

 

LoRA

 

 LoRA란 무엇인가?

LoRA(Low-Rank Adaptation)는 대형 모델 파인튜닝(transfer learning) 을 훨씬 가볍고 효율적으로 만들기 위해 고안된 방법입니다.

기존에는 파인튜닝 시 모델 전체 파라미터를 업데이트해야 했습니다.
하지만 대형 모델(수억~수십억 파라미터)을 이런 식으로 학습하려면:

  • VRAM 엄청 필요 (A100 여러 장…)
  • 학습 시간이 오래 걸림
  • 모델 버전을 여러 개 저장하기 힘듦

LoRA는 이런 문제를 해결합니다.
핵심 아이디어는 “기존 가중치는 그대로 두고, 아주 작은 저랭크 행렬만 학습한다” 입니다.


수식으로 보는 LoRA

기존 선형 계층(예: Attention의 Q, K, V projection)은 다음과 같습니다:

y = W₀ x

여기서 W₀ 는 Pre-trained weight.

LoRA는 W₀를 동결(freeze) 하고, 대신 아래처럼 업데이트를 추가합니다:

 
y = W₀ x + ΔW x ΔW = B × A
  • 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

 

 

 

반응형