모두의 AI
머신러닝교육과정(예시)
로딩 중…

배우기

🏅내 업적

Ch.09

QLoRA와 양자화: 더 작게 줄여서 튜닝하기

양자화 흐름: FP16 → INT8 → FP16

고정밀 벡터를 스케일 α로 INT8에 맞춘 뒤, 쓸 때 다시 나눠 복원합니다.

FP16 입력max(abs)α 계산INT8 양자화역양자화복원 확인

단계별로 보기

  1. ① FP16: 원본 소수 벡터.
  2. ② max(abs): 스케일 기준 잡기.
  3. ③ α: 범위에 맞는 스케일 계수.
  4. ④ INT8: 곱한 뒤 반올림해 정수로 저장.
  5. ⑤ 역양자화: ÷α 로 소수에 가깝게 복원.
  6. ⑥ QLoRA: 백본 압축 + LoRA만 학습.

QLoRA와 양자화

집 골조는 4-bit 압축, 맞춤 가구(LoRA)만 선명하게 만듭니다.

압축된 백본 W0(q)W_0^{(q)}W0(q)​ 는 역양자화해 쓰고, LoRA A,BA,BA,B 만 새로 배웁니다.

4-bit 로드백본 동결LoRA 학습forward·저장

QLoRA 학습 흐름

  1. ① 사전학습 LLM을 4-bit로 로드.
  2. ② 양자화 백본은 고정.
  3. ③ LoRA만 FP16/BF16으로 학습.
  4. ④ 어댑터 저장·배포.
Chapter 08에서 배운 LoRA는 새로 학습할 부분만 얇게 만들어 주었습니다. 그런데 모델의 뇌라 할 거대한 사전학습 가중치 W0W_0W0​ 는 여전히 메모리의 대부분을 차지합니다. 마치 이미 지어진 대저택은 그대로 두고 작은 인테리어만 바꾸려 해도, 집 자체가 너무 커서 부담스러운 것과 비슷합니다.
이 장에서는 그 집 전체를 가볍게 압축하는 양자화(Quantization) 와, Chapter 08 LoRA와 합친 QLoRA를 다룹니다. 그림은 압축·동결된 백본 위에 선명한 LoRA 노트만 맞추는 이중 구조입니다.
비유: 수십 GB짜리 4K 영화를 스마트폰용 MP4로 바꿔도 줄거리는 그대로인 것처럼, 숫자 표현만 줄이고 의미는 최대한 유지합니다. 그래서 개인용 PC나 일반 GPU에서도 큰 언어 모델을 맞춤 학습하기가 한결 수월해집니다.

수식, 이렇게 읽으면 됩니다 (양자화 · QLoRA)

1. 비트 폭과 메모리 — 왜 압축하나?
한 줄 요약: 가중치 하나를 몇 비트로 저장하느냐에 따라, 모델 파일 크기와 GPU VRAM 사용량이 함께 달라집니다.
딥러닝 모델은 수억~수십억 개의 숫자(가중치)로 이루어져 있습니다. 이 숫자를 FP32(32비트) 처럼 아주 정밀하게 두면 품질은 좋지만 용량이 큽니다. 양자화는 “각 숫자를 더 짧은 코드(INT8, 4-bit 등)로 바꿔 두고, 필요할 때만 비슷한 소수로 되돌린다”는 생각입니다.
비유: 같은 풍경 사진을 RAW(용량 큼) 로 둘지 JPEG(용량 작음) 로 둘지 고르는 것과 같습니다. 눈으로 보면 비슷한데 저장 공간만 크게 줄어듭니다.
  • 형식FP32
  • 가중치 1개당 대략4바이트
  • 쉬운 말원본, 가장 정밀
  • 형식FP16
  • 가중치 1개당 대략2바이트
  • 쉬운 말절반 크기
  • 형식INT8
  • 가중치 1개당 대략1바이트
  • 쉬운 말정수 상자(8비트)
  • 형식INT4
  • 가중치 1개당 대략0.5바이트
  • 쉬운 말4-bit 극단 다이어트
형식가중치 1개당 대략쉬운 말
FP324바이트원본, 가장 정밀
FP162바이트절반 크기
INT81바이트정수 상자(8비트)
INT40.5바이트4-bit 극단 다이어트
표를 한 줄씩 읽어 보면, 비트 수가 줄수록 칸당 바이트도 줄어듭니다. 교육용으로 “32비트 표현을 4비트로 줄였다”고 할 때는 대략 32÷4 = 8 → 약 8배 가벼워졌다고 보면 됩니다. 연습문제의 32/4, 16/4 같은 비트 배수 문항은 모두 이 줄기에서 나옵니다.
QLoRA와 연결: Chapter 08 LoRA만 써도 새로 배우는 부분은 작아졌지만, W0W_0W0​ 본체는 여전히 큽니다. 그래서 QLoRA는 W0W_0W0​ 자체를 4-bit 등으로 압축한 뒤, 그 위에 LoRA만 고정밀로 맞춥니다.
frozen · 4-bittrain · LoRAxW₀⁽q⁾ · x4-bit·동결BAx+hbackboneLoRA
도식 읽는 법: 왼쪽 입력 xxx 가 위 회색 박스(압축·동결 백본) 와 아래 보라 박스(학습 LoRA) 로 나뉘어 흐른 뒤, 가운데 + 로 합쳐져 오른쪽 출력 hhh 가 됩니다. 회색은 4-bit·동결, 보라는 내가 배우는 쪽입니다.
2. INT8 양자화 — ‘저장’과 ‘계산’을 나눠 읽기
한 줄 요약: 파일·VRAM에는 짧은 정수로 두고, 실제로 곱하기 직전에 ÷α 로 되돌립니다.
쉽게 말하면: 컴퓨터는 작은 상자(정수) 에 넣어 두었다가, 진짜 계산할 때만 다시 넓은 소수로 펼칩니다. “항상 정수만으로 곱한다”가 아닙니다.
네 단계 (애니메이션과 같음):
1. 묶음에서 제일 큰 수 찾기 (예 5.4)
2. 그 수가 127에 오도록 눈금 α 정하기 (≈ 23.5)
3. 각 수에 α를 곱해 반올림 → `1.2` → 28
4. 쓸 때 28 ÷ 23.5 ≈ 1.2 (역양자화)
수식 (기호는 여기만):
qi=round(xi⋅α),x^i=qi/αq_i = \mathrm{round}(x_i \cdot \alpha), \quad \hat{x}_i = q_i / \alphaqi​=round(xi​⋅α),x^i​=qi​/α
- xix_ixi​: 원래 소수 · qiq_iqi​: 저장한 정수 · x^i\hat{x}_ix^i​: 복원한 소수 · α\alphaα: 눈금
외울 것: 곱해서 반올림 → 저장, 나눠서 → 복원.
3. QLoRA 한 층 — 굵은 길(사전) + 좁은 길(LoRA)
한 줄 요약: 들어온 입력 xxx가 두 갈래입니다. ① 압축·동결된 사전이 만든 값 + ② LoRA가 만든 값을 더하면 출력 hhh입니다.
Chapter 08 LoRA는 “원래 사전 + 작은 보정”이었습니다. QLoRA는 사전까지 4-bit로 가볍게 둔 뒤, LoRA만 선명하게 학습합니다.
비유 (아래 그림):
- 위 회색: 압축된 백과사전 — 평소엔 4-bit로 두고, 계산할 때만 잠깐 선명하게 펼침
- 아래 보라: 내 요약 스티커(LoRA) — 작은 행렬 두 개, 이 부분만 학습
- 가운데 +: 둘을 합침
수식 (한 층): 자세한 기호는 아래 한 줄만 보면 됩니다.
h≈W0(q)x+αlorarBAxh \approx W_0^{(q)} x + \frac{\alpha_{\mathrm{lora}}}{r} B A xh≈W0(q)​x+rαlora​​BAx
쉽게 읽기:
- W0(q)xW_0^{(q)} xW0(q)​x: “원래 사전이 xxx에 어떻게 반응하나” (저장은 작게, 곱하기 직전에 복원)
- BAxB A xBAx: “내 데이터로 얼마나 더할지” (LoRA만 학습)
- αlora/r\alpha_{\mathrm{lora}}/rαlora​/r: LoRA를 얼마나 세게 섞을지 (Chapter 08의 α\alphaα, rrr 과 비슷, 표기는 구현마다 조금 다름)
정리: 답 = 사전 쪽 + LoRA 쪽. 사전은 고정, LoRA만 맞춤.
4. 나머지 키워드 — NF4 · 이중 양자화 · 구성
NF4
가중치는 0 근처에 많이 모이는 경우가 많습니다. NF4는 “자주 나오는 구간은 칸을 촘촘히, 드문 구간은 성기게” 나눈 4-bit입니다. 문제에서는 「분포에 맞춘 4-bit」 를 고르면 됩니다.
이중 양자화
묶음마다 α(눈금) 가 하나씩 생깁니다. α가 수천 개면 α 목록도 커지므로, 그 표까지 한 번 더 줄입니다.
구성
사전 하나(압축·공유) + 과제마다 작은 LoRA를 바꿔 끼우는 그림입니다. 전체 7B를 매번 새로 저장하지 않아도 됩니다.

QLoRA와 양자화: 거인 모델을 가볍게 다루기

1. 양자화(Quantization)란? — 큰 숫자를 작은 상자에
모델 안의 숫자(가중치)는 보통 소수로 저장됩니다. FP32·FP16 은 “자리 수가 많은 정밀한 소수”이고, INT8·4-bit 는 “짧은 정수 칸”에 넣는 방식입니다.
양자화는 저장할 때는 짧게, 쓸 때는 비슷한 소수로 되돌리는 방법입니다. “계산을 항상 정수만 한다”가 아니라는 점이 중요합니다.
비유: RAW 사진 → JPEG. 용량은 ¼~⅛로 줄어도 모양은 대체로 같습니다.
쉬운 예: `0.0137` → `14`로 저장했다가, 필요할 때 비슷한 소수로 복원.
2. 양자화가 숫자를 줄이는 방법 — 눈금(스케일) 맞추기
여러 소수를 한꺼번에 줄일 때는, 먼저 그 묶음에서 가장 큰 숫자(절댓값이 가장 큰 값) 를 찾습니다. 예: `1.2`, `-0.5`, `5.4` … 이면 5.4가 기준입니다.
쉽게 말하면: “이 묶음에서 제일 큰 값이 127이라는 짧은 정수 칸에 딱 맞게 들어가도록” 눈금 α를 정합니다. 위 예에서는 α가 대략 23.5입니다.
그다음 각 숫자에 α를 곱해 반올림하면 `1.2`는 28처럼 짧은 정수로 저장됩니다. 나중에 쓸 때는 28 ÷ 23.5 ≈ 1.2 처럼 나눠서 원래에 가깝게 되돌립니다. (이 되돌리기를 역양자화라고 부릅니다.)
외울 한 줄: 곱해서 반올림해 저장 → 나눠서 복원. 문제의 28, 127, α≈24 는 모두 이 흐름에서 나옵니다.
3. NF4 — 4-bit를 조금 더 똑똑하게
가중치 숫자는 보통 0 근처에 많이 모이고, 아주 크거나 작은 값은 적습니다. 그래서 모든 구간을 똑같이 나누는 단순 4-bit보다, 자주 나오는 구간은 칸을 촘촘히, 드문 구간은 성기게 나누는 NF4가 쓰입니다. “분포에 맞춘 4-bit” 정도만 기억해도 충분합니다.
이중 양자화는 한 단계 더 줄이는 방법입니다. 묶음마다 α(눈금) 이 하나씩 생기는데, 이런 α가 수천 개면 α 목록 자체도 다시 압축합니다. 하나씩은 작아 보여도 모이면 의미가 있습니다.
자세한 기호는 수식 가이드에 두었습니다. 여기서는 저장할 때 줄이고, 쓸 때 나눠 복원 + NF4는 4-bit를 똑똑하게만 잡아 두세요.
4. QLoRA — 양자화 + LoRA 한 번에
Chapter 08 LoRA를 기억하시나요? 큰 사전(W0W_0W0​)은 그대로 두고, 작은 메모(LoRA) 만 새로 쓰는 방식이었습니다.
QLoRA는 여기에 “사전 자체도 가볍게” 가 더해집니다.
- 사전 W0W_0W0​: 4-bit로 압축해 두고, 건드리지 않음(동결)
- LoRA: 선명한 숫자(FP16/BF16) 로만 내 데이터에 맞게 학습
비유: 무거운 백과사전은 마이크로필름(4-bit) 으로 보관하고, 내 요약 스티커(LoRA) 만 선명한 펜으로 씁니다. 읽을 때만 필름을 펼쳐 선명한 페이지로 본 뒤, 스티커 내용을 더합니다.
한 줄: 압축된 사전이 만든 답 + LoRA가 더한 답. 수식은 수식 가이드에서 천천히 보면 됩니다.

왜 중요한지

1. 큰 모델을 더 많은 사람이 다루게
수십억 개 파라미터를 가진 모델(예: 7B)을 통째로 고정밀 학습하려면, GPU 메모리와 저장 공간 부담이 큽니다. 연구실·클라우드가 아니어도 내 데이터에 맞추고 싶다 는 요구는 계속 늘고 있습니다.
QLoRA는 백본을 압축·동결하고 어댑터만 학습해, 일반 GPU에서도 맞춤 학습을 상상하기 쉽게 만듭니다. Chapter 08 LoRA가 새로 배우는 양을 줄였다면, QLoRA는 이미 있는 사전 W0W_0W0​ 의 크기까지 줄여 그 간극을 메웁니다.
2. NF4·이중 양자화 — 많이 줄이되 덜 망가지게
그냥 4-bit로만 줄이면 가끔 품질이 크게 떨어집니다. NF4는 자주 나오는 숫자 구간에 맞춘 4-bit 라서, 막 줄이기만 한 4-bit보다 덜 무너지기 쉽습니다.
이중 양자화는 α(눈금) 목록까지 한 번 더 줄입니다. 레이어가 많으면 α도 많아져서, 작은 절약이 모여 체감됩니다.
3. 하나의 백본, 여러 어댑터
압축된 백본 하나와 작은 LoRA 어댑터를 나누면, 과제·데이터마다 다른 맞춤을 같은 큰 모델 위에 올리기 쉽습니다. 매번 7B 전체를 새로 저장할 필요 없이, 얇은 어댑터 파일만 바꿔 끼우는 그림을 그릴 수 있습니다.
Chapter 08에서 포스트잇(LoRA)만 갈아끼우기를 배웠다면, 이 장은 책장에 둘 백과사전 자체를 가볍게 만드는 쪽입니다. 두 아이디어가 합쳐져 QLoRA가 됩니다.
4. 왜 나눠서 보나 — 헷갈리지 않게
메모리: 압축·동결된 사전 + 학습 중인 LoRA + 한 번에 넣는 문장 수·길이까지 같이 봅니다. 사전만 줄였다고 끝이 아니고, 입력이 길면 중간 계산도 커질 수 있습니다.
계산: 저장은 작게, 실제로 곱하기 직전에 나눠 복원. 「작게 저장, 넓게 계산」이 습관입니다.
학습: 사전은 고정, LoRA만 바꿉니다. 맞춤이 부족하면 데이터·학습률·rank·4-bit vs 8-bit 순으로 보면 됩니다. 이렇게 나누면 Chapter 08 LoRA와 이 장 양자화가 어디서 이어지는지 보기 쉽습니다.

어떻게 쓰이는지

1단계: 압축된 백본을 불러오기
QLoRA를 시작할 때 가장 먼저 하는 일은, 이미 잘 학습된 큰 모델(W0W_0W0​) 을 가볍게 압축한 형태로 불러오는 것입니다. 가중치는 디스크·VRAM에 4-bit·NF4 같은 짧은 정수 코드로 들어 있고, 실제로 행렬곱을 할 때만 FP16/BF16처럼 더 넓은 숫자 표현으로 잠깐 풀어 씁니다.
비유: 도서관 전체 백과사전을 책장에 두지 않고 마이크로필름으로 보관해 두었다가, 읽을 페이지만 선명한 복사본으로 펼쳐 보는 것과 비슷합니다. 그래서 이 장에서 말하는 「저장은 작게, 계산은 안정적으로」 가 첫걸음이 됩니다.
2단계: LoRA 어댑터를 얹고 맞춤 학습하기
다음으로 사전 W0W_0W0​는 그대로 동결합니다. 4-bit로 묶인 부분은 보통 학습하지 않고, Chapter 08처럼 필요한 층에 작은 LoRA만 붙입니다. LoRA 쪽만 선명한 숫자(FP16/BF16) 로 학습합니다.
학습이 진행되는 동안 바뀌는 것은 LoRA뿐입니다. 모델이 내 데이터를 볼 때마다 답은 대략 「압축 사전이 만든 값 + LoRA가 더한 값」 입니다. Chapter 08의 고정 + 작은 덧셈 그림이 그대로이고, 이번에는 사전 자체도 가볍다는 점이 더해집니다.
3단계: 데이터와 다이얼을 맞추며 조율하기
맞춤이 잘 되려면 무엇을 가르칠지(데이터) 와 얼마나 세게·얇게 배울지(하이퍼파라미터) 를 함께 봅니다. 지시문·대화·FAQ처럼 과제에 맞는 예시를 준비하고, 학습률·반복 횟수, LoRA rank(어댑터 두께), 4-bit와 8-bit 중 어디까지 압축할지를 바꿔 보며 조절합니다.
여전히 GPU 메모리가 빠듯하면, 먼저 한 번에 넣는 문장 수(배치) 나 입력 길이를 줄이는 방법이 흔합니다. 응답 품질이 아쉬우면 백본을 통째로 풀기보다, 데이터·rank·학습률부터 점검하는 편이 자연스럽습니다.
4단계: 학습이 끝난 뒤 무엇이 남는지
학습이 끝나면 보통 압축된 백본 하나는 그대로 두고, 과제마다 작은 LoRA 어댑터만 따로 갖게 됩니다. 같은 7B급 모델이라도 의료·법률·사내 FAQ처럼 목적이 다르면 어댑터만 바꿔 끼우는 그림을 상상할 수 있습니다.
양자화 흐름은 max → α 정하기 → 곱해 반올림해 저장 → ÷α로 복원입니다. QLoRA는 그 위에 「4-bit·동결 W0W_0W0​ + FP16/BF16 LoRA만 학습」 을 얹은 조합입니다. 정리하면, 큰 사전은 한 번만 가볍게 들고, 맞춤은 얇은 노트(어댑터)로 여러 번 하는 방식이라고 보면 됩니다.

요약

이 장을 한 문장으로 말하면, 무거운 사전(W0W_0W0​) 은 4-bit(NF4)로 압축·동결하고, 작은 LoRA만 선명하게 맞추는 것이 QLoRA입니다.
Chapter 08 → 09: LoRA는 새로 배우는 양을, 양자화·QLoRA는 이미 있는 사전 크기까지 줄입니다.
핵심 네 가지 (쉬운 말)
1. 양자화 — 큰 소수를 짧은 정수로 저장했다가, 쓸 때 ÷α로 되돌림 (곱해서 반올림 → 나눠서 복원)
2. NF4·이중 양자화 — 4-bit를 똑똑하게 + 눈금(α) 표도 한 번 더 줄이기
3. QLoRA — 가벼운 사전 + LoRA · 사전 고정, LoRA만 학습
4. 구성 — 사전 하나 + 과제마다 LoRA 바꿔 끼우기
기억할 그림: 저장 작게 · 계산 전 복원 · LoRA만 학습.
흔한 오해: 4-bit 사전 통째로 다시 학습(×, 보통 고정) · INT4 = FP16 절반 메모리(×, 교육용 ~8배 차이). 이 그림만 있으면 수식 가이드와 연습 문제가 훨씬 편합니다.

문제 풀이를 위한 설명

양자화·QLoRA 문제를 풀 때는 먼저 「가벼운 사전 + LoRA 메모」 그림만 떠올리면 됩니다. Chapter 08 LoRA는 새로 배우는 양을, QLoRA는 사전 W0W_0W0​ 크기까지 줄입니다.
숫자 문제는 32÷4=8 같은 비트 배수와, 곱해서 저장 → 나눠 복원에서 나오는 28·127·24 를 연결하세요.
아래는 은행과 같은 형태의 예시입니다. 개념·판별부터 익혀 보세요.

예시 (개념형 · concept)
「QLoRA의 핵심에 가장 가까운 것은?
① W0W_0W0​ 전체 FP32 재학습
② 4-bit 압축 백본 + LoRA만 고정밀
③ 라벨 삭제」
→ 정답 2
왜? 백본은 동결하고 어댑터만 맞춥니다.

예시 (판별형 · ox)
「QLoRA에서 4-bit W0W_0W0​ 를 보통 통째로 FP16 미세조정한다。」
→ 보통 동결이므로 정답 0
① 세션에 나올 수 있는 숫자형 유형 예시 (은행과 같은 형태)
예시 (비트 배수 · vote) — FP32(32bit) → INT4(4bit) 교육용 배수? → 32÷4=32÷4=32÷4= 8
예시 (INT8 반올림 · vote) — α≈23.5\alpha \approx 23.5α≈23.5 일 때 round(1.2×23.5)\mathrm{round}(1.2 \times 23.5)round(1.2×23.5) → 28
예시 (양자화 스케일 · aggregate) — 벡터 max abs 5.45.45.4 → α≈round(127/5.4)=\alpha \approx \mathrm{round}(127/5.4)=α≈round(127/5.4)= 24
예시 (제곱 · config) — 242^424 에 가까운 정수? → 16
예시 (시나리오 · scenario)
「Chapter 08 LoRA만으로도 VRAM이 부족할 때 다음 레버?
① 라벨 삭제
② 4-bit QLoRA로 백본 압축
③ 어텐션 제거」
→ 정답 2
예시 (개념 · NF4)
「NF4에 가장 가까운 설명?
① RNN 활성화
② 4-bit, 분포 맞춤 코드
③ 옵티마이저 이름」
→ 정답 2
예시 (이중 양자화 · concept)
「Double quantization 이점?
① LoRA rank 자동 증가
② α 표 저장 비용 추가 절감
③ 배치 자동 증가」
→ 정답 2
예시 (O/X · 메모리)
「FP16 대비 INT4 는 대략 절반 메모리만 쓴다(교육용).」
→ 실제로는 훨씬 더 작음 → 정답 0 (교육용 ~8배 차이)
예시 (O/X · QLoRA)
「QLoRA는 양자화와 LoRA를 함께 쓴다.」
→ 정답 1
예시 (선택 · NF4 bit)
「NF4는 몇 bit 양자화에 가깝나?」
→ 4
예시 (선택 · INT8)
「INT8에서 흔한 최대 양수 코드?」
→ 127