coredot.today
LoRA 완전 정복: 포스트잇 하나로 거대 AI를 내 것으로 만드는 법
블로그로 돌아가기
LoRAQLoRA파인튜닝PEFTLLM경량화

LoRA 완전 정복: 포스트잇 하나로 거대 AI를 내 것으로 만드는 법

700억 파라미터 모델을 내 노트북에서 파인튜닝한다고? LoRA와 QLoRA가 가능하게 만든 '효율적 적응'의 원리를 포스트잇 비유와 함께 완전 해부합니다.

코어닷투데이2025-12-1536

"이 모델을 우리 데이터에 맞추고 싶은데요..."

GPT, Claude, Llama — 이 거대 모델들은 범용적으로 똑똒하지만, 여러분의 특정 업무에 최적화되어 있지는 않습니다. 법률 문서를 요약하거나, 의료 용어를 정확히 사용하거나, 회사 고유의 말투로 응대하는 것은 별도의 학습이 필요합니다.

해법은 파인튜닝(Fine-tuning) — 사전 학습된 모델을 추가 데이터로 재학습시키는 것. 하지만 여기에 거대한 장벽이 있습니다:

💸 Full Fine-tuning의 현실

Llama 2 70B 모델을 Full Fine-tuning하려면:

• GPU 메모리: 약 280GB (A100 80GB × 4장 이상)
• 하드웨어 비용: 수천만 원~
• 학습 시간: 수일~수주
• 저장 공간: 학습된 모델 사본 140GB

대기업이 아니면 사실상 불가능합니다.

2021년, 마이크로소프트 연구팀이 이 장벽을 무너뜨리는 논문을 발표합니다:

"전체 교과서를 다시 쓸 필요 없다. 포스트잇을 붙이면 된다."

이것이 LoRA(Low-Rank Adaptation)입니다.


1. 파인튜닝의 역사: 전이학습에서 PEFT까지

전이학습의 시대 (2018~)

파인튜닝의 아이디어는 단순합니다: 대규모 데이터로 사전 학습된 모델을, 소규모 태스크 데이터로 재학습시키는 것.

사전 학습
인터넷 전체 텍스트로
범용 언어 능력 학습
파인튜닝
특정 도메인 데이터로
전문 능력 추가
전문 모델
법률/의료/코드 등
특화된 AI

2018년 ULMFiT(Howard & Ruder)이 NLP에서 이 패턴을 확립하고, BERT(Devlin et al., 2018)가 "사전학습 → 파인튜닝" 패러다임을 표준으로 만듭니다.

BERT(1.1억 파라미터) 시절에는 Full Fine-tuning(모든 가중치를 업데이트)이 가능했습니다. 소비자급 GPU 하나면 충분했으니까요.

모델이 너무 커졌다

문제는 모델이 기하급수적으로 커졌다는 것입니다:

BERT (2018)
1.1억
GPT-2 (2019)
15억
GPT-3 (2020)
1,750억
Llama 2 (2023)
70억~700억
Llama 3.1 (2024)
4,050억

700억 파라미터 모델의 Full Fine-tuning은 모든 700억 개의 가중치를 업데이트하는 것입니다. 이건 대부분의 조직에서 비용적으로 불가능합니다.

이 문제를 해결하기 위해 등장한 것이 PEFT(Parameter-Efficient Fine-Tuning) — 전체 파라미터 중 극소수만 학습하는 효율적 파인튜닝 기법들입니다. 그리고 PEFT의 왕이 바로 LoRA입니다.


2. LoRA의 핵심 원리: 포스트잇의 마법

거대 모델에 작은 LoRA 어댑터를 붙이는 정비사 로봇

핵심 통찰: 변화량은 "저랭크"다

후 등(Hu et al., "LoRA: Low-Rank Adaptation of Large Language Models", 2021)의 핵심 관찰:

파인튜닝 과정에서 가중치의 변화량(ΔW)은 본질적으로 저랭크(low-rank) 구조를 가진다.

쉽게 말하면: 700억 개의 가중치를 전부 바꿔야 할 것 같지만, 실제로 의미 있게 변하는 "방향"은 극소수입니다. 나머지는 거의 변하지 않거나 중복됩니다.

비유하면:

교과서 전체를 새로 쓰는 대신(Full Fine-tuning), 핵심 페이지에 포스트잇만 붙이면(LoRA) 같은 효과를 낼 수 있습니다. 교과서의 99%는 그대로 두고, 정말 바꿔야 하는 1%만 수정하는 것입니다.

수학적 원리: 저랭크 분해

저랭크 분해 — 큰 행렬을 두 개의 작은 행렬로 근사하는 원리

LoRA는 가중치 변화량 ΔW를 두 개의 작은 행렬 A와 B의 곱으로 분해합니다:

📐 LoRA의 수학

원래 가중치: W₀ (d × d 행렬, 예: 4096 × 4096)
Full Fine-tuning: W₀ + ΔW → ΔW도 4096 × 4096 = 1,677만 파라미터

LoRA: W₀ + B × A
• A: (r × d) = (8 × 4096) = 32,768 파라미터
• B: (d × r) = (4096 × 8) = 32,768 파라미터
• 합계: 65,536 파라미터 (원래의 0.4%!)

r = 랭크(rank). 보통 4, 8, 16, 32 중 선택. 낮을수록 효율적, 높을수록 표현력↑

Full Fine-tuning

W₀(고정) → W₀ + ΔW(학습)

ΔW = 4096 × 4096
= 1,677만 파라미터

모든 가중치 업데이트
LoRA (rank=8)

W₀(고정) → W₀ + B×A(학습)

A = 8 × 4096, B = 4096 × 8
= 6.5만 파라미터

0.4%만 학습 → 256배 효율적

코드로 보는 LoRA

hljs language-python
import torch
import torch.nn as nn

class LoRALayer(nn.Module):
    def __init__(self, original_layer, rank=8, alpha=16):
        super().__init__()
        d_in = original_layer.in_features
        d_out = original_layer.out_features

        # 원래 가중치는 고정 (학습하지 않음!)
        self.original = original_layer
        self.original.weight.requires_grad = False

        # LoRA 어댑터: 작은 행렬 두 개만 학습
        self.A = nn.Linear(d_in, rank, bias=False)   # 다운 프로젝션
        self.B = nn.Linear(rank, d_out, bias=False)   # 업 프로젝션
        self.scale = alpha / rank

        # A는 랜덤 초기화, B는 0으로 초기화
        # → 학습 시작 시 ΔW = B×A = 0 (원래 모델과 동일)
        nn.init.zeros_(self.B.weight)

    def forward(self, x):
        # 원래 출력 + LoRA 보정
        return self.original(x) + self.B(self.A(x)) * self.scale

핵심을 주목하세요:

  1. 원래 가중치는 완전히 고정(frozen)합니다
  2. 작은 행렬 A, B만 학습합니다
  3. B를 0으로 초기화하므로 학습 시작 시 원래 모델과 완전히 동일합니다
  4. 추론 시 B×A를 W₀에 합치면 원래 모델과 같은 구조 → 추가 지연 없음!
🔍 alpha와 rank는 어떻게 정하나요? (눌러서 펼치기)

rank (r): LoRA 어댑터의 "표현력"을 결정합니다.

  • r=4~8: 대부분의 경우 충분. 간단한 도메인 적응에 적합
  • r=16~32: 복잡한 태스크. 원래 모델과 큰 차이가 필요할 때
  • r=64+: Full Fine-tuning에 근접한 성능. 하지만 효율성 이점 감소

alpha (α): 학습률을 조절하는 스케일링 팩터. scale = α/r로 LoRA 출력을 조절합니다. 보통 alpha = 2 × rank가 안전한 시작점입니다.

실무 팁: rank=8, alpha=16으로 시작하고, 성능이 부족하면 rank를 올리세요. 대부분의 경우 rank=16이면 Full Fine-tuning의 95% 이상 성능에 도달합니다.


3. QLoRA: "노트북에서 700억 모델을 파인튜닝한다"

QLoRA — 양자화로 모델을 축소한 뒤 LoRA를 적용하는 개념

LoRA도 부족하다면

LoRA가 학습 파라미터를 줄여줬지만, 모델 자체는 여전히 GPU 메모리에 올라가야 합니다. 70B 모델은 FP16(16비트)으로 약 140GB. A100 80GB 두 장이 필요합니다.

2023년, 데트머스 등(Dettmers et al., "QLoRA: Efficient Finetuning of Quantized Language Models")이 이 마지막 장벽마저 무너뜨립니다.

핵심: 양자화 + LoRA

1단계: 4비트 양자화 모델 가중치를 16비트 → 4비트로 압축
70B 모델: 140GB → 약 35GB (4배 축소!)
2단계: LoRA 어댑터 추가 양자화된 모델 위에 LoRA 어댑터를 붙임
어댑터만 16비트(BF16)로 학습 → 정밀도 유지
결과 70B 모델을 단일 48GB GPU에서 파인튜닝 가능!
(RTX 4090 또는 A6000 한 장)
Full Fine-tuning (FP16)
~280GB (A100 × 4)
LoRA (FP16)
~140GB (A100 × 2)
QLoRA (4bit + LoRA)
48GB!

QLoRA의 기술적 혁신

QLoRA가 단순한 "양자화 + LoRA"가 아닌 이유는 세 가지 기술적 혁신 때문입니다:

혁신설명
NF4 (NormalFloat4)정규분포에 최적화된 새로운 4비트 양자화 포맷. 기존 INT4보다 정보 손실이 적음
이중 양자화양자화 상수 자체도 양자화하여 메모리를 추가 절약 (0.37비트/파라미터 절약)
페이지드 옵티마이저GPU 메모리가 부족하면 자동으로 CPU RAM에 임시 저장 → OOM 방지

실전 결과: QLoRA로 학습한 Guanaco-65B 모델은 ChatGPT 성능의 99.3%에 도달하면서도, 단일 GPU 48GB에서 24시간 만에 학습 완료.


4. PEFT 생태계: LoRA만 있는 건 아니다

LoRA는 PEFT의 가장 인기 있는 방법이지만, 유일한 방법은 아닙니다.

LoRA / QLoRA

가중치 변화를 저랭크 분해

장점: 범용적, 추론 오버헤드 0
인기: ★★★★★
어댑터 (Adapter)

트랜스포머 층 사이에 작은 모듈 삽입

장점: 구조적으로 깔끔
단점: 추론 시 약간의 지연
프롬프트 튜닝

학습 가능한 소프트 프롬프트를 앞에 추가

장점: 모델 가중치 전혀 안 건드림
단점: 성능이 LoRA보다 낮은 경우 많음
프리픽스 튜닝

어텐션 레이어에 학습 가능한 프리픽스 추가

장점: 경량
단점: 복잡한 태스크에 한계
IA³

활성화에 학습 가능한 벡터를 곱셈

장점: LoRA보다 더 적은 파라미터
단점: 표현력 제한
DoRA (2024)

LoRA + 가중치 방향/크기 분리

장점: LoRA 대비 성능 향상
최신 연구 동향

2025년 현재, LoRA/QLoRA가 압도적 주류입니다. Hugging Face의 PEFT 라이브러리 다운로드의 80% 이상이 LoRA 관련입니다.


5. 실전 응용: 누가, 어디서 LoRA를 쓰는가

다양한 도메인에 동일 모델을 LoRA로 적응시키는 모습

사례 1: Stable Diffusion 커뮤니티

LoRA가 가장 폭발적으로 활용되는 곳입니다. Civitai 같은 플랫폼에는 수만 개의 LoRA 어댑터가 공유됩니다:

  • "지브리 스타일 LoRA" — 20MB짜리 파일 하나로 모든 이미지를 지브리 화풍으로
  • "특정 인물 LoRA" — 인물 사진 20장으로 학습, 다양한 상황에서 해당 인물 생성
  • "건축 스타일 LoRA" — 특정 건축 양식으로 건물 디자인 생성

핵심: 기본 Stable Diffusion 모델은 그대로 두고, LoRA만 교체하면 스타일이 완전히 바뀝니다. 여러 LoRA를 동시에 조합할 수도 있습니다.

사례 2: 의료 AI

병원마다 전자건강기록(EHR)의 형식, 약어, 진료 패턴이 다릅니다. 범용 LLM은 이런 병원 고유의 맥락을 모릅니다.

Llama 3 70B
(범용 언어 모델)
+ LoRA
병원 A 데이터
(진료 기록, 프로토콜)
병원 A 전용 AI
(해당 병원 맥락 이해)

각 병원이 자체 LoRA를 학습하면, 기본 모델은 공유하면서 병원별 맞춤 AI를 구축할 수 있습니다. HIPAA 규정도 충족합니다 — 환자 데이터가 LoRA 어댑터 안에만 있으니까요.

사례 3: 다국어 특화

기본 LLM이 영어 중심이라면, 한국어 LoRA를 학습하여 한국어 성능을 크게 향상시킬 수 있습니다. 카카오, 네이버 등 국내 기업들이 오픈소스 LLM에 한국어 LoRA를 적용하는 사례가 늘어나고 있습니다.

사례 4: 코드 생성 특화

Meta의 Code Llama는 Llama 2를 코드 데이터로 추가 학습한 모델입니다. 이와 유사하게, 특정 프로그래밍 언어나 프레임워크에 특화된 LoRA를 만들 수 있습니다. "우리 회사 코드베이스 스타일에 맞는 코드를 생성하는 AI"를 만드는 것이죠.


6. LoRA vs Full Fine-tuning vs RAG: 어떻게 선택할까

이전 글(RAG vs Fine-tuning)에서 다룬 내용을 LoRA까지 포함하여 확장합니다.

비교 항목
Full FT
LoRA/QLoRA
RAG
모델 변경
전체 가중치 수정
0.1~1% 가중치만
모델 변경 없음
GPU 요구
매우 높음
낮음~중간
추론만 (낮음)
지식 업데이트
재학습 필요
재학습 필요
문서만 교체
행동/스타일 변경
최고
우수
제한적
출처 표시
불가
불가
가능
구축 속도
수주
수시간~수일
수시간
추천 상황
최대 성능 필요,
충분한 인프라
도메인 적응,
스타일/톤 변경
최신 정보,
출처 필요

실무 의사결정 플로우

시작: LLM을 우리 업무에 맞추고 싶다
Q1. 모델의 말투/추론 방식/형식을 바꿔야 하나요?
YesNo → RAG로 시작
Q2. A100급 GPU 4장 이상 인프라가 있나요?
→ RAG
프롬프트 + 검색으로 해결
Yes → Full FTNo → LoRA/QLoRA

2025년 실무 공식: RAG로 시작 → 부족하면 LoRA 추가 → 그래도 부족하면 Full Fine-tuning. 대부분은 RAG + LoRA로 해결됩니다.


7. 주의할 점: LoRA의 함정들

재앙적 망각 (Catastrophic Forgetting)

파인튜닝의 고전적 문제입니다. 새로운 데이터를 학습하면서 기존 능력을 잃어버리는 현상.

⚠️ 실제 사례

법률 문서에 LoRA를 학습시켰더니, 법률 용어는 잘 쓰지만
일반 대화 능력이 급감하거나 수학 능력을 잃는 경우가 발생합니다.

해결:
• 학습 데이터에 범용 데이터를 일부 섞기 (replay)
• rank를 너무 높이지 않기 (과적합 방지)
• 평가 시 도메인 성능뿐 아니라 범용 벤치마크도 함께 측정

데이터 품질 >>> 데이터 양

LoRA는 파라미터가 적기 때문에, 데이터 품질에 극도로 민감합니다.

나쁜 접근

저품질 데이터 100만 건으로 학습
→ 노이즈 학습, 성능 오히려 하락
좋은 접근

고품질 데이터 1,000~5,000건으로 학습
→ 적은 데이터로도 뛰어난 성능

Anthropic, OpenAI의 연구에서 일관되게 확인되는 것: 잘 정제된 소량 데이터가 대량의 저품질 데이터보다 항상 낫습니다.

라이선스와 법적 문제

오픈소스 모델이라고 아무렇게나 파인튜닝해서 상용화할 수 있는 것은 아닙니다. Llama의 라이선스, Mistral의 Apache 2.0, Falcon의 라이선스 등 각 모델의 이용 약관을 반드시 확인해야 합니다.


8. 2025년, LoRA는 어디로 향하고 있는가

서비스형 파인튜닝의 대중화

OpenAI, Anthropic, Google 모두 API를 통한 파인튜닝 서비스를 제공합니다. GPU를 직접 관리할 필요 없이, 데이터만 업로드하면 됩니다. 내부적으로 LoRA/PEFT 기법이 사용됩니다.

LoRA 어댑터 마켓플레이스

Hugging Face, Civitai 등에서 LoRA 어댑터를 공유하고 거래하는 생태계가 성장 중입니다. 기본 모델은 하나를 공유하고, 목적에 맞는 LoRA만 갈아끼우는 모듈식 AI의 시대가 열리고 있습니다.

기본 모델
(Llama 3, Mistral)
+
LoRA A: 법률
LoRA B: 의료
LoRA C: 코딩
LoRA D: 한국어
목적별 전문 AI
어댑터만 교체!

최신 연구 동향

  • DoRA (2024): 가중치를 방향과 크기로 분해하여 LoRA 성능 향상
  • GaLore (2024): 그래디언트 자체를 저랭크로 투영하여 메모리 더 절약
  • LoRA+ (2024): A와 B에 다른 학습률을 적용하여 수렴 속도 향상
  • 멀티 LoRA 추론: 여러 LoRA를 실시간으로 전환하며 서빙하는 기술 (S-LoRA, Punica)

마무리: 민주화의 도구

Full Fine-tuning

교과서를 통째로 새로 쓴다
완벽하지만, 비용이 막대하다
LoRA

핵심 페이지에 포스트잇을 붙인다
효율적이고, 거의 같은 효과를 낸다
QLoRA

교과서를 축소본으로 만든 뒤 포스트잇
노트북에서도 가능하다

LoRA의 진짜 의미는 기술적 효율성을 넘어서 AI의 민주화에 있습니다.

대기업만 할 수 있었던 LLM 커스터마이징이, 스타트업, 연구실, 심지어 개인 개발자에게까지 열렸습니다. RTX 4090 한 장이면 70B 모델을 자기 데이터에 맞출 수 있는 세상. 이것은 2년 전만 해도 상상할 수 없었습니다.

"전체 파라미터 중 0.1%만 바꿔도 충분하다"는 이 통찰은, AI 연구에서 반복되는 교훈을 다시 한번 확인시켜줍니다:

가장 좋은 해법은 종종 "덜 하는 것"에서 나옵니다.


참고 논문 및 자료

  • Howard, J. & Ruder, S. (2018). Universal Language Model Fine-tuning for Text Classification (ULMFiT). ACL.
  • Houlsby, N. et al. (2019). Parameter-Efficient Transfer Learning for NLP (Adapters). ICML.
  • Li, X. & Liang, P. (2021). Prefix-Tuning: Optimizing Continuous Prompts for Generation. ACL.
  • Lester, B. et al. (2021). The Power of Scale for Parameter-Efficient Prompt Tuning. EMNLP.
  • Hu, E. et al. (2021). LoRA: Low-Rank Adaptation of Large Language Models. ICLR.
  • Dettmers, T. et al. (2023). QLoRA: Efficient Finetuning of Quantized Language Models. NeurIPS.
  • Liu, H. et al. (2024). DoRA: Weight-Decomposed Low-Rank Adaptation. arXiv.
  • Zhao, J. et al. (2024). GaLore: Memory-Efficient LLM Training by Gradient Low-Rank Projection. arXiv.
  • Hayou, S. et al. (2024). LoRA+: Efficient Low Rank Adaptation of Large Models. arXiv.
  • Sheng, Y. et al. (2023). S-LoRA: Serving Thousands of Concurrent LoRA Adapters. arXiv.