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

700억 파라미터 모델을 내 노트북에서 파인튜닝한다고? LoRA와 QLoRA가 가능하게 만든 '효율적 적응'의 원리를 포스트잇 비유와 함께 완전 해부합니다.
GPT, Claude, Llama — 이 거대 모델들은 범용적으로 똑똒하지만, 여러분의 특정 업무에 최적화되어 있지는 않습니다. 법률 문서를 요약하거나, 의료 용어를 정확히 사용하거나, 회사 고유의 말투로 응대하는 것은 별도의 학습이 필요합니다.
해법은 파인튜닝(Fine-tuning) — 사전 학습된 모델을 추가 데이터로 재학습시키는 것. 하지만 여기에 거대한 장벽이 있습니다:
Llama 2 70B 모델을 Full Fine-tuning하려면:
• GPU 메모리: 약 280GB (A100 80GB × 4장 이상)
• 하드웨어 비용: 수천만 원~
• 학습 시간: 수일~수주
• 저장 공간: 학습된 모델 사본 140GB
대기업이 아니면 사실상 불가능합니다.
2021년, 마이크로소프트 연구팀이 이 장벽을 무너뜨리는 논문을 발표합니다:
"전체 교과서를 다시 쓸 필요 없다. 포스트잇을 붙이면 된다."
이것이 LoRA(Low-Rank Adaptation)입니다.
파인튜닝의 아이디어는 단순합니다: 대규모 데이터로 사전 학습된 모델을, 소규모 태스크 데이터로 재학습시키는 것.
2018년 ULMFiT(Howard & Ruder)이 NLP에서 이 패턴을 확립하고, BERT(Devlin et al., 2018)가 "사전학습 → 파인튜닝" 패러다임을 표준으로 만듭니다.
BERT(1.1억 파라미터) 시절에는 Full Fine-tuning(모든 가중치를 업데이트)이 가능했습니다. 소비자급 GPU 하나면 충분했으니까요.
문제는 모델이 기하급수적으로 커졌다는 것입니다:
700억 파라미터 모델의 Full Fine-tuning은 모든 700억 개의 가중치를 업데이트하는 것입니다. 이건 대부분의 조직에서 비용적으로 불가능합니다.
이 문제를 해결하기 위해 등장한 것이 PEFT(Parameter-Efficient Fine-Tuning) — 전체 파라미터 중 극소수만 학습하는 효율적 파인튜닝 기법들입니다. 그리고 PEFT의 왕이 바로 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의 곱으로 분해합니다:
원래 가중치: 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 중 선택. 낮을수록 효율적, 높을수록 표현력↑
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
핵심을 주목하세요:
rank (r): LoRA 어댑터의 "표현력"을 결정합니다.
alpha (α): 학습률을 조절하는 스케일링 팩터. scale = α/r로 LoRA 출력을 조절합니다. 보통 alpha = 2 × rank가 안전한 시작점입니다.
실무 팁: rank=8, alpha=16으로 시작하고, 성능이 부족하면 rank를 올리세요. 대부분의 경우 rank=16이면 Full Fine-tuning의 95% 이상 성능에 도달합니다.

LoRA가 학습 파라미터를 줄여줬지만, 모델 자체는 여전히 GPU 메모리에 올라가야 합니다. 70B 모델은 FP16(16비트)으로 약 140GB. A100 80GB 두 장이 필요합니다.
2023년, 데트머스 등(Dettmers et al., "QLoRA: Efficient Finetuning of Quantized Language Models")이 이 마지막 장벽마저 무너뜨립니다.
QLoRA가 단순한 "양자화 + LoRA"가 아닌 이유는 세 가지 기술적 혁신 때문입니다:
| 혁신 | 설명 |
|---|---|
| NF4 (NormalFloat4) | 정규분포에 최적화된 새로운 4비트 양자화 포맷. 기존 INT4보다 정보 손실이 적음 |
| 이중 양자화 | 양자화 상수 자체도 양자화하여 메모리를 추가 절약 (0.37비트/파라미터 절약) |
| 페이지드 옵티마이저 | GPU 메모리가 부족하면 자동으로 CPU RAM에 임시 저장 → OOM 방지 |
실전 결과: QLoRA로 학습한 Guanaco-65B 모델은 ChatGPT 성능의 99.3%에 도달하면서도, 단일 GPU 48GB에서 24시간 만에 학습 완료.
LoRA는 PEFT의 가장 인기 있는 방법이지만, 유일한 방법은 아닙니다.
2025년 현재, LoRA/QLoRA가 압도적 주류입니다. Hugging Face의 PEFT 라이브러리 다운로드의 80% 이상이 LoRA 관련입니다.

LoRA가 가장 폭발적으로 활용되는 곳입니다. Civitai 같은 플랫폼에는 수만 개의 LoRA 어댑터가 공유됩니다:
핵심: 기본 Stable Diffusion 모델은 그대로 두고, LoRA만 교체하면 스타일이 완전히 바뀝니다. 여러 LoRA를 동시에 조합할 수도 있습니다.
병원마다 전자건강기록(EHR)의 형식, 약어, 진료 패턴이 다릅니다. 범용 LLM은 이런 병원 고유의 맥락을 모릅니다.
각 병원이 자체 LoRA를 학습하면, 기본 모델은 공유하면서 병원별 맞춤 AI를 구축할 수 있습니다. HIPAA 규정도 충족합니다 — 환자 데이터가 LoRA 어댑터 안에만 있으니까요.
기본 LLM이 영어 중심이라면, 한국어 LoRA를 학습하여 한국어 성능을 크게 향상시킬 수 있습니다. 카카오, 네이버 등 국내 기업들이 오픈소스 LLM에 한국어 LoRA를 적용하는 사례가 늘어나고 있습니다.
Meta의 Code Llama는 Llama 2를 코드 데이터로 추가 학습한 모델입니다. 이와 유사하게, 특정 프로그래밍 언어나 프레임워크에 특화된 LoRA를 만들 수 있습니다. "우리 회사 코드베이스 스타일에 맞는 코드를 생성하는 AI"를 만드는 것이죠.
이전 글(RAG vs Fine-tuning)에서 다룬 내용을 LoRA까지 포함하여 확장합니다.
2025년 실무 공식: RAG로 시작 → 부족하면 LoRA 추가 → 그래도 부족하면 Full Fine-tuning. 대부분은 RAG + LoRA로 해결됩니다.
파인튜닝의 고전적 문제입니다. 새로운 데이터를 학습하면서 기존 능력을 잃어버리는 현상.
법률 문서에 LoRA를 학습시켰더니, 법률 용어는 잘 쓰지만
일반 대화 능력이 급감하거나 수학 능력을 잃는 경우가 발생합니다.
해결:
• 학습 데이터에 범용 데이터를 일부 섞기 (replay)
• rank를 너무 높이지 않기 (과적합 방지)
• 평가 시 도메인 성능뿐 아니라 범용 벤치마크도 함께 측정
LoRA는 파라미터가 적기 때문에, 데이터 품질에 극도로 민감합니다.
Anthropic, OpenAI의 연구에서 일관되게 확인되는 것: 잘 정제된 소량 데이터가 대량의 저품질 데이터보다 항상 낫습니다.
오픈소스 모델이라고 아무렇게나 파인튜닝해서 상용화할 수 있는 것은 아닙니다. Llama의 라이선스, Mistral의 Apache 2.0, Falcon의 라이선스 등 각 모델의 이용 약관을 반드시 확인해야 합니다.
OpenAI, Anthropic, Google 모두 API를 통한 파인튜닝 서비스를 제공합니다. GPU를 직접 관리할 필요 없이, 데이터만 업로드하면 됩니다. 내부적으로 LoRA/PEFT 기법이 사용됩니다.
Hugging Face, Civitai 등에서 LoRA 어댑터를 공유하고 거래하는 생태계가 성장 중입니다. 기본 모델은 하나를 공유하고, 목적에 맞는 LoRA만 갈아끼우는 모듈식 AI의 시대가 열리고 있습니다.
LoRA의 진짜 의미는 기술적 효율성을 넘어서 AI의 민주화에 있습니다.
대기업만 할 수 있었던 LLM 커스터마이징이, 스타트업, 연구실, 심지어 개인 개발자에게까지 열렸습니다. RTX 4090 한 장이면 70B 모델을 자기 데이터에 맞출 수 있는 세상. 이것은 2년 전만 해도 상상할 수 없었습니다.
"전체 파라미터 중 0.1%만 바꿔도 충분하다"는 이 통찰은, AI 연구에서 반복되는 교훈을 다시 한번 확인시켜줍니다:
가장 좋은 해법은 종종 "덜 하는 것"에서 나옵니다.