
LoRA / QLoRA 특집: 1,750억 개 파라미터를 35MB로 길들이는 마법
GPT-3 175B를 파인튜닝하려면 1.2TB GPU 메모리가 필요하다. LoRA는 학습 파라미터를 1만 배 줄이고, QLoRA는 65B 모델을 단일 48GB GPU에서 학습 가능하게 만들었다. 저랭크 분해의 수학부터 2026년 모든 오픈소스 모델의 표준이 된 여정까지, 두 논문을 낱낱이 해부한다.

GPT-3 175B를 파인튜닝하려면 1.2TB GPU 메모리가 필요하다. LoRA는 학습 파라미터를 1만 배 줄이고, QLoRA는 65B 모델을 단일 48GB GPU에서 학습 가능하게 만들었다. 저랭크 분해의 수학부터 2026년 모든 오픈소스 모델의 표준이 된 여정까지, 두 논문을 낱낱이 해부한다.

2020년, OpenAI가 GPT-3**를 발표했다. 1,750억 개의 파라미터. 학습에 사용된 GPU 시간만 수백만 달러. 이 모델을 특정 업무에 맞게 **파인튜닝(fine-tuning)하려면? 모든 1,750억 개 파라미터를 다시 학습해야 한다. 필요한 GPU 메모리: 1.2TB. NVIDIA A100 80GB 기준으로 15장 이상.
그런데 2021년, Microsoft의 Edward Hu 등이 질문 하나를 던졌다:
"정말로 1,750억 개 파라미터를 전부 바꿔야 하나? 혹시 아주 작은 부분만 바꿔도 되는 건 아닐까?"
답은 "된다"였다. 그것도 놀라울 정도로. 학습할 파라미터를 1만 배** 줄여도 성능이 떨어지지 않았다. 체크포인트 크기가 350GB에서 35MB로 줄었다. 이것이 **LoRA(Low-Rank Adaptation)다.
2년 뒤, University of Washington의 Tim Dettmers 등은 여기에 4비트 양자화**를 결합하여 QLoRA를 만들었다. 650억 파라미터 모델을 단일 48GB GPU에서, ChatGPT 성능의 **99.3%를 달성하는 모델로 학습시켰다. 학습 시간: 24시간.
이 글에서는 왜 이런 기술이 필요했는지(제1장), LoRA의 수학적 원리(제2장), 논문의 실험 결과(제3장), "랭크가 낮아도 되는" 놀라운 발견(제4장), QLoRA의 세 가지 혁신(제5장), 실전 활용(제6장), 그리고 2026년 현재의 위치(제7장)를 다룬다.
대형 언어 모델의 활용 패러다임은 간단하다. 사전학습(pre-training) → 파인튜닝(fine-tuning). 인터넷의 방대한 텍스트로 일반 지식을 학습하고(사전학습), 특정 과제의 데이터로 미세 조정한다(파인튜닝).
문제는 파인튜닝도 풀 파인튜닝(full fine-tuning)이었다는 것이다. 모델의 모든 파라미터에 대해 기울기(gradient)를 계산하고, 옵티마이저 상태(momentum, variance)를 유지해야 한다. Adam 옵티마이저를 사용하면 파라미터당 추가로 8바이트의 옵티마이저 상태가 필요하다.
더 심각한 문제: 과제마다 독립적인 모델 복사본이 필요하다. 고객 서비스, 코드 생성, 의료 상담 — 각 과제마다 350GB짜리 체크포인트를 따로 저장하고, 전환할 때마다 전체 모델을 교체해야 한다.
비유하면 이렇다. 영어 선생님이 수학도 가르치고 싶다고 하자. 풀 파인튜닝은 선생님의 뇌 전체를 복제해서 수학 교육을 다시 시킨 뒤, 수학 수업 때마다 뇌를 통째로 교체하는 것이다. 엄청나게 비효율적이다.
LoRA 이전에도 "효율적 파인튜닝"을 위한 시도는 있었다:
| 방법 | 핵심 아이디어 | 한계 |
|---|---|---|
| Adapter Layers (Houlsby, 2019) | Transformer 블록 사이에 작은 병목 레이어 삽입 | 추론 시 지연(latency) — 레이어가 추가되므로 |
| Prefix Tuning (Li & Liang, 2021) | 입력 앞에 학습 가능한 가상 토큰 추가 | 최적화 어려움, 성능 불안정, 시퀀스 길이 감소 |
| BitFit (Ben-Zaken, 2022) | 바이어스 항만 학습 | 대형 모델에서 성능 부족 |
| Prompt Tuning (Lester, 2021) | 연속 프롬프트 벡터 학습 | 모델 크기가 작으면 성능 급격히 하락 |
특히 Adapter Layers의 추론 지연 문제는 심각했다. LoRA 논문이 직접 측정한 결과:
배치 크기 1에서 어댑터는 20~30% 느려진다. 실시간 서비스에서 이 차이는 치명적이다. 더구나 모델 병렬화(여러 GPU 분산) 환경에서는 어댑터가 추가 동기화 연산을 발생시켜 지연이 더 심해진다.
LoRA의 핵심 약속: 학습 파라미터를 극적으로 줄이면서, 추론 시 지연이 전혀 없다. 어떻게?
LoRA의 출발점은 대담한 가설이다:
"파인튜닝 과정에서 가중치 행렬의 변화량(Delta W)은 본질적으로 랭크가 낮다."
이것은 Aghajanyan et al.(2020)의 내재적 차원(intrinsic dimensionality) 연구에 기반한다. 그들은 사전학습된 모델이 수백만 차원의 파라미터 공간에 있지만, 파인튜닝에 실제로 필요한 차원은 놀라울 정도로 낮다는 것을 보였다. 175B 모델의 파라미터가 1,750억 차원 공간에 있지만, 과제 적응에 필요한 "방향"은 수백~수천 차원이면 충분하다는 것이다.
비유하면: 서울에서 부산까지 가는 길은 무한히 많지만, 실제로 의미 있는 경로는 몇 개 안 된다. 파인튜닝의 가중치 업데이트도 마찬가지다 — 수십억 차원의 공간에서 움직이지만, 실제로 중요한 방향은 극소수다.
LoRA의 수학은 놀라울 정도로 단순하다.
사전학습된 가중치 행렬 에 대해, 풀 파인튜닝은 업데이트 를 직접 학습한다. LoRA는 이 를 두 개의 작은 행렬의 곱으로 분해한다:
여기서 , , 그리고 .
순전파(forward pass)는:
예: GPT-3의 어텐션 가중치 (d = k = 12,288)
전체 GPT-3 175B에 적용하면:
풀 파인튜닝: 175,255,800,000 파라미터
LoRA (r=4, +): 4,700,000 파라미터
축소 비율: 약 37,000배 (0.0027%)
초기화:** A는 랜덤 가우시안으로, B는 **영행렬(zero)로 초기화한다. 따라서 학습 시작 시 이다. 이것은 학습 초기에 모델이 사전학습된 상태에서 시작하도록 보장한다 — 안정적인 학습의 핵심이다.
스케일링: 에 스케일링 팩터를 곱한다. 는 상수로, 을 바꿔도 하이퍼파라미터 재조정 없이 학습할 수 있게 한다.
LoRA의 가장 우아한 특성은 배포 시 원래 모델과 합칠 수 있다는 것이다:
한 번 합치면 를 가지고 일반 모델처럼 추론한다. 추가 레이어도 없고, 추가 연산도 없다. Adapter와 달리 추론 지연이 완전히 제로다.
과제 전환은? 를 빼고 를 더하면 된다:
하나의 기본 모델(350GB)에 과제별 어댑터(35MB)만 교체. 마치 하나의 스마트폰에 앱만 바꿔 설치하는 것과 같다.
LoRA가 풀 파인튜닝과 정말 동등한 성능을 내는지, GLUE 벤치마크(자연어 이해 8개 과제)에서 검증했다:
모든 모델 크기에서 LoRA가 풀 파인튜닝과 동등하거나 오히려 더 좋다. DeBERTa-XXL(15억 파라미터)에서는 학습 파라미터가 1,500M → 4.7M (0.31%)으로 줄었는데도 성능이 오히려 올랐다.
LoRA 논문의 하이라이트는 GPT-3 175B에서의 실험이다:
| 방법 | 학습 파라미터 | WikiSQL | MNLI-m | SAMSum |
|---|---|---|---|---|
| GPT-3 풀 FT | 175,255.8M | 73.8 | 89.5 | 52.0 |
| GPT-3 LoRA | 4.7M | 73.4 | 91.7 | 53.8 |
| GPT-3 AdapterH | 7.1M | 71.9 | 89.8 | 53.0 |
| GPT-3 PreLayer | 20.2M | 70.1 | 89.5 | 50.8 |
| GPT-3 BitFit | 14.2M | 71.3 | 91.0 | 51.3 |
Transformer의 셀프 어텐션에는 4개의 가중치 행렬이 있다: (쿼리), (키), (값), (출력). 어디에 LoRA를 적용해야 할까?
논문은 고정된 파라미터 예산(18M)으로 다양한 조합을 실험했다:
결론: 하나의 가중치에 높은 랭크보다, 여러 가중치에 낮은 랭크로 분산하는 것이 낫다. 이것은 업데이트의 "내재적 랭크"가 매우 낮다는 가설을 뒷받침한다.
이것이 논문의 가장 놀라운 발견이다:
| 랭크 r | WikiSQL | MNLI |
|---|---|---|
| r = 1 | 73.4 | 91.3 |
| r = 2 | 73.3 | 91.4 |
| r = 4 | 73.7 | 91.3 |
| r = 8 | 73.8 | 91.6 |
| r = 64 | 73.5 | 91.4 |
r = 1에서도 이미 경쟁력 있는 성능을 달성한다. r을 1에서 64로 64배 늘려도 성능 향상은 미미하다. 이것은 파인튜닝의 가중치 업데이트가 극도로 낮은 내재적 랭크를 가진다는 것을 의미한다.
논문은 한 걸음 더 나아가 가 원래 가중치 와 어떤 관계인지 분석한다. 핵심 발견:
비유하면: 사전학습된 모델이 이미 "일반 지식"으로 잘 다져진 도로가 있다. 파인튜닝은 새 도로를 까는 것이 아니라, 기존에 사용되지 않던 작은 샛길을 크게 확장하는 것이다. 그래서 소수의 방향(저랭크)만으로도 충분하다.

LoRA는 학습 파라미터를 1만 배 줄였지만, 기본 모델 자체는 여전히 GPU에 올려야 한다. LLaMA-65B를 16비트로 올리려면 130GB 이상의 GPU 메모리가 필요하다. LoRA를 써도 기본 모델의 메모리 부담은 그대로다.
2023년 5월, Tim Dettmers 등은 질문을 던졌다: "기본 모델을 4비트로 양자화해놓고, 그 위에 LoRA를 적용하면 어떨까?"
얼핏 무모해 보인다. 모델을 4비트로 압축하면 정보 손실이 발생하는데, 그 상태에서 파인튜닝이 제대로 될까?
QLoRA 논문의 답: 세 가지 기술 혁신으로 성능 손실 없이 가능하다.
기존 4비트 양자화 방식들(Int4, Float4)은 데이터 분포를 고려하지 않았다. QLoRA는 핵심적인 관찰에서 출발한다:
"사전학습된 신경망의 가중치는 평균 0의 정규분포를 따른다."
Shapiro-Wilk 검정으로 LLaMA-7B를 분석한 결과, 뉴런의 92.5%가 정규분포를 따랐다.
정규분포에 최적화된 양자화란? Quantile Quantization — 각 양자화 구간에 동일한 수의 값이 들어가도록 경계를 설정하는 것이다. 정보 이론적으로, 이것이 주어진 비트 수에서 최소 오차를 달성하는 최적 방법이다.
NF4의 16개 값 (4비트 = = 16개 수준):
[-1.0, -0.6962, -0.5251, -0.3949, -0.2844, -0.1848, -0.0911, 0.0,
0.0796, 0.1609, 0.2461, 0.3379, 0.4407, 0.5626, 0.7230, 1.0]
중앙(0 근처)에 값이 밀집 — 정규분포의 꼭대기에 해상도 집중 양 끝(±1)은 듬성듬성 — 꼬리 부분은 적은 값이 존재하므로
블록 양자화에서 각 블록(64개 값)마다 하나의 양자화 상수(scaling factor)가 필요하다. 이 상수는 32비트 부동소수점이다. 175B 파라미터 모델이면 양자화 상수만 해도 상당한 메모리를 차지한다.
QLoRA의 아이디어: 양자화 상수를 또 양자화하자!
파라미터당 0.373비트 절약. 65B 모델에서 이것은 약 3GB 메모리 절감이다. 48GB GPU에서 이 3GB가 학습 가능/불가능의 경계를 결정한다.
그래디언트 체크포인팅 과정에서 메모리 사용량이 일시적으로 급증(spike)할 수 있다. 기존에는 이 스파이크 때문에 OOM(Out of Memory)이 발생하면 학습이 중단되었다.
QLoRA는 NVIDIA의 통합 메모리(Unified Memory)** 기능을 활용한다. GPU 메모리가 가득 차면 옵티마이저 상태를 **자동으로 CPU RAM으로 페이징(eviction)하고, 업데이트가 필요할 때 다시 GPU로 가져온다. 운영체제의 가상 메모리와 같은 원리다.
모든 것을 합치면:
저장은 NF4(4비트)로, 연산은 BF16(16비트)으로. 양자화된 기본 모델 위에 BF16 LoRA 어댑터를 올린다.
QLoRA의 실전 검증을 위해 연구팀은 Guanaco 모델 패밀리를 학습시켰다. LLaMA 65B를 QLoRA로 파인튜닝한 것이다.
학습 조건: OASST1 데이터셋 9,209개 예시, 단일 48GB GPU, 24시간. LLaMA 65B 풀 파인튜닝에 필요한 780GB 대비 1/16의 메모리다.
Guanaco 65B는 ChatGPT를 앞서고, Guanaco 33B는 21GB 메모리 — 소비자용 RTX 4090 한 장으로 학습 가능 — 에서 ChatGPT 성능의 97.8%를 달성했다.
Guanaco 7B는 놀라운 수치다. 5GB 메모리 — 이론상 스마트폰에서도 돌릴 수 있는 크기 — 로 ChatGPT의 87%를 달성하면서, 같은 13B 크기의 Alpaca보다 20%p 이상 앞선다.
QLoRA 논문의 또 다른 중요한 발견: 데이터의 품질이 양보다 압도적으로 중요하다.
9천 개의 고품질 데이터가 45만 개의 데이터를 챗봇 성능에서 압도한다. 반면 MMLU(지식 평가)에서는 FLAN v2가 더 좋다. 데이터셋 선택이 "무엇을 잘하는 모델을 만들 것인가"를 결정한다.
QLoRA의 가장 중요한 기여 중 하나는, NF4 양자화가 성능을 해치지 않는다는 것을 여러 스케일에서 검증한 것이다:
| LLaMA 크기 | BFloat16 | NFloat4+DQ |
|---|---|---|
| 7B | 38.4 | 39.0 |
| 13B | 47.2 | 47.5 |
| 33B | 57.7 | 57.3 |
| 65B | 61.8 | 61.8 |
NF4가 BF16과 동등하거나 오히려 더 좋은 경우도 있다. 양자화가 일종의 정규화(regularization) 효과를 내는 것으로 추측된다.
2026년 현재, LoRA는 오픈소스 LLM 커뮤니티의 사실상 표준 파인튜닝 방법이다.
Hugging Face: peft 라이브러리가 LoRA/QLoRA를 1급 시민으로 지원. transformers와 원클릭 통합.
커뮤니티 모델: CivitAI, Hugging Face에서 수만 개의 LoRA 어댑터가 공유되고 있다. 특히 Stable Diffusion 커뮤니티에서는 "LoRA"가 일상 용어가 되었다 — 특정 화풍, 캐릭터, 스타일을 학습한 어댑터를 "LoRA 파일"이라 부른다.
기업 활용: 모든 주요 LLM 서비스(OpenAI, Anthropic, Google, Together AI)가 LoRA 기반 파인튜닝 API를 제공한다.
2021년 이후 수많은 파라미터 효율적 방법이 제안되었지만, LoRA가 사실상 유일한 표준으로 살아남은 이유:
LoRA/QLoRA의 가장 중요한 사회적 기여는 AI 민주화다.
풀 파인튜닝 시대: GPT-3를 파인튜닝하려면 수십 장의 A100과 수만 달러의 클라우드 비용. 대기업과 연구소만 가능.
QLoRA 이후: 65B 모델을 단일 48GB GPU에서, 7B 모델을 게이밍 그래픽카드에서 학습 가능. 대학원생, 스타트업, 개인 개발자 모두 자신만의 AI를 만들 수 있다.
논문의 전망:
"QLoRA는 스마트폰에서의 파인튜닝 가능성을 열었다. iPhone 12 Plus에서 충전 중 밤새 300만 토큰을 학습할 수 있을 것으로 추정된다."
LoRA 논문의 한 줄 요약: "파인튜닝에서 바뀌는 것은 생각보다 훨씬 적다."
이 단순한 통찰이 가져온 변화는 혁명적이다. 350GB 체크포인트가 35MB로 줄었고, 수십 장의 GPU가 한 장으로 줄었고, 수만 달러의 비용이 수십 달러로 줄었다. 그리고 이 모든 것이 성능 손실 없이 — 때로는 오히려 더 나은 성능으로 — 달성되었다.
QLoRA는 여기에 양자화의 마법을 더해, "AI를 만들 수 있는 사람"의 범위를 극적으로 확장했다. ChatGPT에 필적하는 모델을 대학원생이 노트북 한 대로 만들 수 있게 된 것이다.
2026년 현재, Hugging Face에서 매일 올라오는 수백 개의 새로운 모델 중 상당수가 LoRA로 학습되었다. Stable Diffusion 커뮤니티에서 공유되는 수만 개의 스타일 어댑터, 기업들의 도메인 특화 모델, 연구자들의 실험 — 모두 이 기술 위에 서 있다.
돌이켜보면, Edward Hu의 질문은 이렇게 단순했다: "정말로 전부 바꿔야 하나?" 답이 "아니오"였다는 것 — 그리고 그 "아니오"가 얼마나 극적이었는지(이면 충분하다!) — 가 AI 역사의 한 페이지를 바꿨다.
참고 논문:
코드: github.com/microsoft/LoRA | github.com/artidoro/qlora | github.com/TimDettmers/bitsandbytes