본문으로 건너뛰기
페이지 목차
이 페이지에서 검색

로컬 LLM

이 페이지에 묻기

로컬 LLM · 현재 차시와 목차 본문에서만 찾아 답합니다. 답을 지어내지 않고 해당하는 대목을 그대로 보여 주며, 여기에 없으면 없다고 알려 드립니다.

생성형 AI가 아니라 이 페이지 본문을 찾아 그대로 보여 주는 방식입니다. 외부로 나가는 요청이 없습니다.

LOCAL · LLM

로컬 LLM

생성 수정

로컬 모델 실행과 GPU·메모리 이해부터 서빙·RAG·도구 호출·업무형 앱 구현까지 차례로 살펴봅니다.

42개 문서 · 2일차 · 11 / 42

10차시 · LLM 양자화 원리

지도 위치 : 2일차 · ②모델 파일 층 — 가중치를 담는 방식 | 이전: 9차시 메모리 구조와 GPU 자원 | 다음: 11차시 8bit · 4bit 양자화 실습 키워드 : Quantization, PTQ · QAT, INT8 · INT4, 양자화 장단점

이 차시를 다 읽으면

  1. 양자화를 유와 종차로 정의하고, 파인튜닝 · RAG와 다른 축 이라는 것을 말할 수 있다.
  2. "넓은 범위의 숫자를 적은 단계로 근사한다"는 원리를 scale · 그룹 두 단어로 설명할 수 있다.
  3. PTQ와 QAT 를 "언제 양자화를 고려하는가" 축으로 가를 수 있다.
  4. bitsandbytes · GPTQ · AWQ · GGUF · FP8을 "언제, 누가 양자화하는가" 지도 위에 놓을 수 있다.
  5. "양자화하면 무조건 빨라진다"가 왜 틀렸는지, 품질은 무엇으로 판정 하는지 말할 수 있다.

0. 이 차시의 판별 축

#축왼쪽 (0)오른쪽 (1)이 축으로 갈리는 것큰 축 (README 5장)
1정밀도높음 (FP16 · BF16)낮음 (INT8 · INT4)가중치 크기 ↔ 품질정밀도 (파생 축, 부모 ①)
2언제 양자화를 고려하는가학습이 끝난 뒤 (PTQ)학습 중에 (QAT)빠르고 싸게 ↔ 품질 좋게누가 값을 정하는가 (파생 축)
3언제 양자화하는가로딩할 때 즉석으로미리 해 둔 파일을 받음bitsandbytes ↔ GPTQ · AWQ · GGUF① 디스크 ↔ 메모리 (메모리에 올릴 때 하나, 디스크 파일에 이미 되어 있나)
4무엇을 바꾸는가숫자를 담는 방식 (양자화)숫자의 값 자체 (파인튜닝)같은 지식을 가볍게 ↔ 새 능력을 넣음RAG ↔ 파인튜닝 축과 다른 축 ⚠️ (1.2절)

앞에서 이어집니다 — 앞에서 배운 가중치 계산식 파라미터 수 × 숫자 하나의 바이트 수(9차시 1.1)에서, 양자화는 오른쪽 항 × 바이트를 줄이는 일 입니다. 9차시 1.2 표의 아래 두 줄(INT8 · INT4)이 이번 차시의 주제입니다. 이번 차시는 그 줄들이 무엇을 뜻하는지(1절) , 어떻게 가능한지(원리, 2절) , 실제로는 어떤 방식들이 있는지(지도, 4절) 를 봅니다.


1. 정의와 경계

1.1 정의

양자화 (Quantization) — [모델 압축 기법]인데, [ 가중치(와 경우에 따라 활성값 · KV 캐시)를 더 적은 비트의 숫자로 근사해 담는다 ]는 점에서 가중치 개수 자체를 줄이는 가지치기(Pruning) · 작은 모델로 옮기는 증류(Distillation)와 구별된다.

README 2.2에서 정의 형식의 예로 든 그 정의입니다. 핵심은 파라미터 개수는 그대로 두고, 숫자 하나를 담는 칸만 작게 만든다 는 것입니다. 8B 모델에 적용하면 이렇게 됩니다.

형식숫자 하나8B 모델 가중치FP16 대비품질 손실 (경향)
FP16 / BF162바이트 (16비트 소수)≈ 16GB기준기준
INT81바이트 (8비트 정수)≈ 8GB1/2대개 작음
INT40.5바이트 (4비트 정수)≈ 4GB1/4과제에 따라 다름 — 평가셋으로 확인 (5.3절)

INT 는 정수(Integer)입니다. 소수점 있는 숫자(FP16)를 정해진 칸 수의 정수 로 바꿔 담는다는 뜻이고, 그 방법이 2절의 원리입니다. 실제 4bit 파일은 표의 값보다 10~20% 큽니다(2.2절).

이 노트에서는 형제 두 개를 이름으로 세워 경계를 분명히 합니다.

압축 기법무엇을 줄이나파라미터 수이 과정에서
양자화숫자 하나의 비트 수그대로 (8B는 8B)⭐ 10~12, 15차시
가지치기 (Pruning)덜 중요한 가중치 개수줄어듦다루지 않음
증류 (Distillation)큰 모델을 흉내 낸 작은 모델 을 새로 학습줄어듦 (다른 모델)다루지 않음 (모델 카드에 "distill"로 보임)

1.2 ⭐ 반례 — 양자화는 파인튜닝이 아닙니다

모델이 모르는 것을 알게 하는 방법은 크게 두 가지입니다(README 1.2에서 이 과정이 다루지 않는다고 한 두 가지).

  • RAG (검색 증강 생성) — [모델 활용 기법]인데, [ 질문과 관련된 문서를 찾아 프롬프트에 함께 넣어 준다 ]는 점에서 가중치를 건드리지 않는다. 모델 밖에서 지식을 가져온다.
  • 파인튜닝 (미세조정) — [모델 학습 방법]인데, [ 내 데이터로 가중치를 추가 학습시킨다 ]는 점에서 처음부터 학습하는 사전학습과 구별된다. 모델 안을 고친다.

이 둘은 "밖에서 찾는가, 안을 고치는가"라는 한 축의 양쪽입니다. 양자화는 그 축 어디에도 들어가지 않습니다. 새 지식을 넣는 일이 아니라, 이미 있는 지식을 담는 그릇을 바꾸는 일이기 때문입니다.

RAG파인튜닝 (QLoRA 포함)양자화
새 지식이 생기나그 요청 동안만⭕❌
가중치가 바뀌나❌⭕ (보조 가중치)⚠️ 값이 거칠어질 뿐 , 새로 배우지 않음
목적모르는 사실 알려주기말투 · 형식 · 도메인 감각같은 모델을 가볍게
결과원래 모델 이상일 수 있음원래 모델과 다르게원래 모델 이하 (최선이 "거의 같음")

⚠️ QLoRA가 헷갈리게 만듭니다.

  • LoRA — [파인튜닝 방법]인데, [ 원래 가중치는 얼려 두고 작은 보조 가중치만 추가로 학습한다 ]는 점에서 가중치 전체를 다시 학습하는 전체 파인튜닝과 구별된다.
  • QLoRA — 원래 가중치를 4비트로 양자화해서(Q) GPU에 올려 둔 채 LoRA를 학습하는 기법입니다. 4비트 형식으로는 2.3절의 NF4를 씁니다.

양자화가 메모리를 줄여 준 덕분에 한 장의 GPU에서 파인튜닝이 가능해졌지만, 배우는 일은 LoRA가 합니다. 양자화는 여기서도 그릇 역할만 합니다.


2. 원리 — 넓은 범위를 적은 단계로

2.1 자 하나로 근사하기

INT4는 숫자를 16단계 (2⁴)로만 표현합니다. FP16은 수만 단계입니다. 양자화는 원래 숫자들을 이 16칸짜리 자 위의 가장 가까운 눈금 으로 옮기는 일입니다.

원래 가중치 (FP16):   -0.82  -0.31   0.05   0.27   0.64   0.91
                        │      │      │      │      │      │
가장 큰 값 0.91을 정수 7에 맞춤 → 한 칸 = 0.91 ÷ 7 = 0.13   ← 이 칸 너비가 scale
                        ▼      ▼      ▼      ▼      ▼      ▼
저장하는 값 (INT4):      -6     -2      0      2      5      7     ← 4비트 정수 (-8 ~ 7)
되살린 값:             -0.78  -0.26   0.00   0.26   0.65   0.91   ← 정수 × scale
오차:                  0.04   0.05   0.05   0.01   0.01   0.00

(숫자는 원리를 보여주기 위한 예시입니다.)

단어뜻직관
scale정수 한 칸이 원래 값으로 얼마인가자의 눈금 간격
zero-point원래 값 0이 정수 몇 번 칸에 오는가자의 0점 위치 . 범위가 한쪽으로 치우쳤을 때 씀
역양자화 (dequantize)정수 × scale (+ 보정)으로 근사값을 되살림계산하기 직전에 다시 펼치기

⭐ 저장할 것은 정수들 + scale 하나 입니다. 정수는 4비트, scale은 FP16 하나. 그래서 크기가 약 1/4이 됩니다.

2.2 그룹 단위 — 튀는 값 하나가 자 전체를 망친다

자 하나를 수십억 개 가중치 전체에 쓰면 문제가 생깁니다. 값 하나가 크게 튀면(outlier) 범위가 넓어지고, 눈금 간격이 커져서 나머지 작은 값들이 전부 0 근처 한두 칸에 뭉개집니다.

그래서 실제 방식들은 가중치를 작은 묶음(예: 32개, 64개, 128개) 으로 나눠 묶음마다 자를 따로 둡니다.

자를 두는 단위정확도추가 저장량
텐서 전체에 하나낮음 (튀는 값에 취약)거의 없음
행(채널)마다중간조금
그룹(수십~백여 개)마다높음scale이 그룹 수만큼 → 실제 비트가 4보다 약간 커짐

💡 그래서 "4비트 모델" 파일이 정확히 파라미터 × 0.5바이트보다 10~20% 크게 나옵니다. 12차시의 Q4_K_M 파일 크기를 볼 때 회수합니다. 9차시 계산에서는 0.5바이트로 어림하고, 정확한 값은 파일 크기로 확인 합니다.

2.3 왜 품질이 생각보다 덜 떨어지는가

  • LLM의 가중치는 대부분 0 근처에 몰린 종 모양 분포 입니다. 이 분포에 맞춰 눈금을 고르게 두지 않고 0 근처를 촘촘하게 둔 4비트 형식이 NF4(NormalFloat4)입니다. 1.2절 QLoRA와 11차시 bitsandbytes 4bit가 이 형식을 씁니다.
  • 각 오차는 작고 방향이 제각각이라 많은 층을 지나며 일부 상쇄 됩니다.
  • 그러나 비트가 너무 적으면(3비트 이하) 눈금이 8칸 이하가 되어 급격히 무너집니다. "조금씩 나빠지는" 것이 아니라 어느 선 아래에서 갑자기 나빠집니다.

3. PTQ와 QAT — 언제 양자화를 고려하는가

PTQ (Post-Training Quantization, 학습 후 양자화) — [양자화 방식]인데, [ 학습이 끝난 가중치를 그대로 받아 변환만 한다 ]는 점에서 QAT와 구별된다.

QAT (Quantization-Aware Training, 양자화 인식 학습) — [양자화 방식]인데, [ 학습(또는 추가 학습) 중에 양자화 오차를 미리 겪게 해 가중치가 거기에 적응하도록 한다 ]는 점에서 PTQ와 구별된다.

PTQQAT
필요한 것가중치 (+ 소량의 보정 데이터)학습 데이터 + 학습용 GPU
걸리는 시간분 ~ 시간학습 수준
품질 (같은 비트일 때)기준대체로 더 좋음
누가 하나나 또는 커뮤니티모델 개발사
이 과정에서⭐ 거의 전부 (11~12차시)모델 카드에 "QAT" 버전이 따로 있으면 골라 쓰기만

0절 축 2로 보면, QAT는 양자화를 학습이 정하는 쪽 으로 끌어온 것이고 PTQ는 사람이 실행 전에 정하는 쪽 입니다. 우리 같은 사용자는 거의 항상 PTQ 쪽에 섭니다.

💡 일부 개발사는 QAT로 만든 저비트 버전을 따로 배포합니다(예: Gemma 3의 QAT 배포판). 같은 크기 후보가 있으면 모델 카드에서 QAT 여부 를 확인할 가치가 있습니다.


4. ⭐ 방식의 지도 — 언제, 누가 양자화하는가

이름이 많아 보이지만 0절 축 3 하나로 정리됩니다.

                    로딩할 때 즉석으로                     미리 양자화된 파일을 받음
                    (원본 FP16 파일 필요)                  (양자화된 파일만 있으면 됨)
                          │                                        │
 Transformers 계열   bitsandbytes (8bit LLM.int8, 4bit NF4)    GPTQ · AWQ  ──→ vLLM에서 주로 (19, 23차시)
 llama.cpp 계열            —                                GGUF (Q8_0 ~ Q2_K) ──→ Ollama · llama.cpp (12차시)
 최신 GPU                 FP8 (엔진이 즉석 변환 가능)          FP8 체크포인트
방식언제보정 데이터주 사용처한 줄 특징
bitsandbytes로딩 시 즉석불필요Transformers, QLoRA가장 간편. 속도용이 아니라 메모리 절약용 (11차시)
GPTQ사전소량 필요vLLM 등 서빙 엔진층마다 양자화 오차가 최소가 되도록 보정
AWQ사전소량 필요vLLM 등 서빙 엔진활성값을 보고 중요한 가중치를 보호
GGUF k-quant사전선택 (중요도 행렬)llama.cpp, Ollama한 파일 형식 + 다양한 비트 단계 (12차시)
FP8사전 또는 즉석방식에 따라vLLM (지원 GPU)정수가 아닌 8비트 부동소수점. GPU 세대 확인 필요

⚠️ 각 방식의 세부 옵션과 지원 GPU는 버전에 따라 자주 바뀝니다. 엔진 공식 문서의 양자화 페이지를 맥락으로 주고 AI에게 확인시키세요.

앞으로 다시 만납니다 — 11차시에서 bitsandbytes로 같은 모델을 FP16 · 8bit · 4bit로 올려 보고, 12차시에서 GGUF 파일 이름(Q4_K_M)을 읽고, 15차시에서 셋을 나란히 잽니다.


5. 장단점 — 그리고 흔한 착각

5.1 장단점 표

얻는 것잃는 것
메모리가중치 1/2 ~ 1/4 → 더 작은 GPU, 더 많은 KV 캐시 자리 (9차시 3절 첫째 항)—
속도Decode가 빨라질 수 있음 (읽을 바이트가 줄어서, 15차시)즉석 역양자화 비용 때문에 오히려 느려질 수 있음
품질—정밀도 손실. 8bit는 대개 작고, 4bit는 과제에 따라, 3bit 이하는 큼
운영파일이 작아 다운로드 · 반입이 쉬움 (1차시 4.2 폐쇄망)형식이 엔진마다 달라 엔진 선택을 묶음 (GGUF ↔ AWQ)

5.2 ⚠️ "양자화 = 무조건 빨라짐"이 아닙니다

경우속도이유
GGUF Q4를 llama.cpp에서대개 빨라짐저비트 전용 계산 경로가 있음
AWQ · GPTQ를 vLLM에서대개 빨라지거나 비슷전용 커널. 단, 동시 요청이 많을 때는 차이가 줄 수 있음
bitsandbytes 8bitFP16보다 느린 경우가 많음튀는 값을 따로 FP16으로 계산하는 등 즉석 처리 비용
원래 VRAM에 다 안 들어가던 모델극적으로 빨라짐CPU 오프로드가 사라짐 (12차시) — 양자화 덕이라기보다 예산 안으로 들어온 덕

CPU 오프로드 (offload) — [메모리 부족 대처 방식]인데, [ VRAM에 다 못 올린 층을 일반 메모리(RAM)에 두고 CPU가 계산하게 한다 ]는 점에서 모델 전체를 GPU에서 계산하는 방식과 구별된다. 돌아가기는 하지만 CPU와 RAM이 GPU보다 훨씬 느려 전체 속도가 크게 떨어집니다. 12차시에서 자세히 봅니다.

⭐ 양자화가 확실히 주는 것은 메모리 뿐입니다. 속도는 방식 · 엔진 · GPU 조합 이 정하므로 측정 (14, 15차시)으로만 말할 수 있습니다.

5.3 ⚠️ 품질 — 평균은 괜찮아도 우리 업무는 다를 수 있다

공개 벤치마크에서 "4bit도 FP16과 거의 같다"는 결과가 많습니다. 벤치마크 는 정해진 문제 묶음으로 모델 점수를 매긴 공개 시험입니다. 점수는 그 시험 문제들의 평균 이므로, 읽을 때는 두 가지를 물어야 합니다. "그 시험이 내 작업과 비슷한가?" , "내 데이터로 직접 써 봤는가?" 양자화에서는 이 질문이 특히 중요합니다. 평균은 괜찮아도 더 민감할 수 있는 영역이 있기 때문입니다.

민감할 수 있는 영역문의봇에서
한국어 (학습 데이터에서 비중이 작은 언어)존댓말 · 맞춤법이 어색해짐
숫자 · 고유명사주문번호 · 연락처 추출이 한 자리 틀림
엄격한 형식JSON 키 누락, 분류값 밖의 단어
긴 추론여러 조건을 따지는 답변 초안

⭐ 판정은 6차시에 만든 평가셋 으로 합니다. "4bit가 괜찮다더라"가 아니라 "우리 평가셋 50건에서 FP16 대비 분류 정확도 몇 %p, 주문번호 추출 몇 건 틀림" 이 결정의 근거입니다. 이 숫자는 15차시에서 직접 채웁니다.

5.4 비유 (기억 보조)

사진 해상도를 낮추는 것과 같은 종류입니다. 풍경 사진은 거의 티가 안 나지만, 작은 글씨(주문번호)가 찍힌 사진 은 읽을 수 없게 될 수 있습니다. 그래서 "우리 사진"으로 확인해야 합니다. 그리고 해상도를 낮춘다고 사진에 없던 것이 생기지는 않습니다 (1.2절, 파인튜닝이 아님).


6. 실습 — 맡기고 검수하기

이 차시는 원리 차시라 실습은 지도를 내 환경에 맞춰 채우는 조사 입니다. 실제 로딩은 11차시에서 합니다.

지시

목표: Qwen3-8B를 우리 환경(RTX 4090 24GB, Linux)에서 쓸 수 있는 양자화 버전을 조사한다.
맥락: Hugging Face의 Qwen/Qwen3-8B 모델 페이지와, 거기서 링크된 양자화 버전(GGUF, AWQ, FP8 등),
      ollama.com의 qwen3 태그 목록을 직접 열어서 확인해. 기억으로 쓰지 마.
작업: 실제로 존재하는 저장소/태그만 표로 정리.
보고 형식:
| 방식 | 저장소 이름 또는 Ollama 태그 | 비트 | 파일 크기(페이지 표기 그대로) | 누가 배포(공식/커뮤니티) | 어떤 엔진에서 쓰나 | 주소 |
확인하지 못한 칸은 "확인 필요". 추측으로 채우지 마.

받을 증거

  • 각 행의 주소 (Hugging Face 저장소, ollama.com 태그 페이지)
  • 파일 크기는 페이지에 적힌 값 그대로

내가 직접 볼 것

볼 것왜 내가 보는가
주소를 열어 저장소 · 태그가 실제로 있는지AI는 그럴듯한 저장소 이름을 지어내는 경우가 있습니다
공식 배포인지 커뮤니티 배포인지커뮤니티 양자화는 품질 · 라이선스 표기가 제각각. 폐쇄망 반입 승인에도 영향
4bit 파일 크기가 8.2B × 0.5바이트 ≈ 4.1GB보다 얼마나 큰지2.2절 그룹 scale만큼의 추가 저장량. 9차시 예산식에 넣을 실제 숫자
표에 3bit 이하 가 있다면5.3절 — 후보에서 일단 제외하고 평가셋으로만 재검토

부록 A. 스스로 확인하기

#질문답이 있는 곳
1양자화를 유와 종차로 정의하면? 가지치기 · 증류와 무엇이 다른가?1.1
2양자화와 파인튜닝 · RAG는 같은 축인가? QLoRA는 어디에 놓이는가?1.2
3scale과 zero-point를 자에 빗대면?2.1
4왜 그룹마다 scale을 따로 두는가? 그 대가는?2.2
54bit에서 3bit로 갈 때 품질이 어떻게 변하는가?2.3
6PTQ와 QAT를 가르는 기준은? 우리는 주로 어느 쪽인가?3
7bitsandbytes와 GPTQ · AWQ · GGUF는 어떤 축으로 갈리는가?4
8양자화가 확실히 주는 것과, 측정해야만 알 수 있는 것은?5.2
9문의봇에서 양자화에 민감할 수 있는 부분과 판정 방법은?5.3

부록 B. 자주 하는 실수

실수바로잡기
"양자화하면 모델이 더 똑똑해지거나 우리 데이터를 배운다"❌ 같은 모델을 거칠게 담을 뿐. 지식 추가는 RAG · 파인튜닝
"양자화하면 무조건 빨라진다"❌ 확실한 건 메모리 . bitsandbytes 8bit는 대개 더 느림
"4bit 모델 = 파라미터 × 0.5바이트"⚠️ 그룹 scale 등으로 10~20% 더 큼 . 파일 크기로 확인
"벤치마크에서 괜찮다니 우리도 괜찮다"❌ 한국어 · 숫자 · 형식이 더 민감할 수 있음. 평가셋으로 판정
"비트는 낮을수록 효율적"⚠️ 3bit 이하는 급격히 무너짐
"QLoRA = 양자화"❌ 양자화(Q) + 파인튜닝(LoRA). 배우는 건 LoRA

부록 C. NotebookLM 복습 프롬프트

이 10차시 노트만 근거로 6문제를 내줘. 비전공자 기준으로.
"양자화는 파인튜닝이 아니다", "scale과 그룹", "PTQ vs QAT", "양자화=무조건 빨라짐이 아닌 이유"는 반드시 포함해줘.
답은 내가 답한 다음에 채점하고, 틀린 이유를 노트의 절 번호를 근거로 설명해줘.