데이터 양을 4분의 1로 줄여도 답이 크게 변하지 않는 이유는 무엇일까? LLM의 4비트 양자화 원리
요약
본 글은 LLM 가중치를 4비트로 양자화해도 성능 저하가 크지 않은 이유를 설명합니다. 핵심은 모델의 '활성화값'이 추론 시 높은 정밀도를 유지하며, 성능에 필수적인 극단적 이상치(outlier)는 전체 차원의 극히 일부(약 0.1%)에 집중되어 있기 때문입니다.
핵심 포인트
- 양자화는 파일에 저장된 가중치(weight)만 처리한다.
- 추론 중 계산되는 활성화값은 높은 정밀도를 유지한다.
- 성능에 필수적인 이상치는 전체 차원의 극히 일부에 집중된다.
- 그룹 단위 양자화와 혼합 정밀도가 피해를 막는다.
안녕하세요! satto workspace에서 소프트웨어 엔지니어로 일하고 있는 타무라입니다.
지난 글에서는 로컬 LLM에서의 양자화(Quantization) 기본적인 메커니즘과 배포되는 GGUF 파일 선택법을 정리했습니다.
배포되는 대부분의 LLM은 '가중치(weight)'라고 불리는 수치를 하나당 16비트로 가지고 있습니다.
이것을 양자화하여 4비트로 낮추면, 단순 계산으로 파일 용량은 4분의 1로 줄어듭니다.
여기서 순수한 의문이 생기지 않으신가요?
'65,536가지나 표현할 수 있는 정밀한 수치를 겨우 16가지로 반올림하는데도 AI는 여전히 똑똑하게 일본어를 말할 수 있는 건 왜일까?'
'데이터 양을 4분의 1로 줄이면 보통은 말이 안 되는 상태가 되지 않을까?'
이 글에서는 이 '왜 4비트여도 지능이 망가지지 않는가'라는 의문을, 어려운 수식을 사용하지 않고 직관적인 비유와 실제 배포 파일의 내용을 보면서 풀어보겠습니다.
이 글에서 알게 되는 것들
- 4비트로 반올림한다는 것이 무엇을 하는 것인지, 왜 오차가 발생하는지
- 순수하게 반올림하면 전체가 망가져 버리는 이유 (이상치(outlier)의 피해)
- 성능에 필수적인 이상치는 추론 중 수치의 극히 일부(약 0.1%)에 집중되어 있다는 사실
- 피해를 막는 '그룹 단위 양자화(Group Size)' 메커니즘
- 배포 파일(GGUF)에서 요점을 4비트보다 정밀한 형태로 남기는 '혼합 정밀도(Mixed Precision)'의 실제
가장 높은 눈금(7)을 피아노의 350kg에 맞추는 수밖에 없습니다.
350kg을 7로 나누면, 눈금 하나당 폭은 50kg이 됩니다.
눈금 7: 350kg (피아노)
눈금 6: 300kg
...
...
가장 무거운 여행 가방도 23kg에 불과하므로, 눈금 하나 분(50kg)의 절반에도 미치지 못합니다.
그 결과, 999개의 여행 가방은 모두 '눈금 0', 즉 전표상으로는 0kg으로 기록되어 버립니다.
12kg의 짐도 21kg의 짐도 기록상으로는 같은 '0'이 되어버리고, 짐 각각의 무게 차이가 완전히 사라져 버리는 것입니다.
이것이 LLM 내부에서 발생하는 이상치(outlier)의 연쇄 피해 현상입니다.
단지 극단적으로 큰 수치가 하나만 있어도 전체 배율이 그 값에 끌려가고, 주변의 대다수 정상적인 수치들이 0 근처로 압축되어 버리는 것입니다.
부서지지 않는 이유 ①: 가장 큰 이상치가 나오는 '활성화값(activation value)'은 4bit로 하지 않는다
'저렇게 극단적인 이상치가 있다면, 4bit로 줄이는 건 불가능하지 않을까?'라고 생각하실 겁니다.
여기서 먼저 알아야 할 것은, 로컬 LLM에서 자주 사용되는 4bit 양자화(llama.cpp의 Q4_K나, GPTQ, AWQ 등)가 반올림하는 것은 파일에 저장된 가중치(weight) 뿐이라는 점입니다.
추론 중에 계산되는 활성화값은 4bit로 반올림하지 않고, 더 높은 정밀도를 유지한 채 다룹니다.
그리고 LLM 내부에서 가장 극단적인 이상치가 나타나는 곳은 이 반올림하지 않은 활성화값 쪽입니다.
이것을 보여준 것이 2022년에 발표된 LLM.int8()이라는 유명 논문입니다.
이 논문은 모델의 크기가 약 6.7B(약 67억 파라미터)를 넘어서면, 추론 중 활성화값의 극히 일부 차원(dimension)에 극단적인 이상치가 집중되어 나타나는 현상을 밝혀냈습니다.
나아가, 그 이상치가 모델의 성능에 필수적인 역할을 수행하고 있다는 것 또한 명확히 했습니다.
논문에서는 다음과 같은 대조 실험이 진행되었습니다.
- 이상치가 나온 차원(전체의 겨우 0.1% 정도)을 강제로 0으로 설정해 보기
→ 모델 예측의 나쁨을 나타내는 지표(perplexity)가 600%에서 1000%나 악화 - 무작위로 선택한 일반적인 차원을 같은 수만큼 0으로 설정해 보기
→ 지표 악화는 겨우 0.1% 정도에 그쳐, 거의 손상 없음
LLM 속을 흐르는 수치들은 모두가 동등하게 중요하지 않습니다.
극히 일부의 이상치가 모델 성능을 크게 좌우하고 있습니다.
LLM.int8()은 가중치와 활성화값 모두를 8bit로 반올림하는 방식입니다.
8bit에서도 이상치에 배율을 맞추면 다른 값이 압축되어 버리기 때문에, 이상치를 특별 취급할 방안이 필요했습니다.
앞서의 짐 예시로 말하자면, 피아노 한 대에 맞춰 모든 짐을 대형 화물로 처리하는 것이 아니라, 피아노만 별도의 창구에서 다루는 것입니다.
논문에서는 이상치가 나오는 0.1% 정도의 차원만 16bit로 계산하고, 나머지 99.9%를 8bit로 계산함으로써, 성능을 거의 떨어뜨리지 않고도 처리할 수 있음을 보여주었습니다.
반면, llama.cpp의 Q4_K나 GPTQ, AWQ는 이상치가 나타나는 활성화값을 4bit로 반올림하지 않습니다.
GPTQ와 AWQ는 활성화값을 16bit 그대로 계산합니다.
llama.cpp는 계산 도중에 활성화값을 8bit로 하지만, 32개 단위의 작은 묶음으로 배율을 부여하기 때문에, 이상치의 영향은 그 단위 안에 국한됩니다.
부서지지 않는 이유 ②: 연쇄 피해를 막는 '그룹 단위' 양자화
여기까지는 활성화값의 이상치에 대한 이야기였습니다.
한편, 4bit로 반올림하는 가중치 쪽에도 이상치는 존재합니다.
다만, 로컬 LLM에서 자주 사용되는 4bit 가중치 양자화에서는 LLM.int8()처럼 이상치만 16bit로 별도 처리하는 것은 일반적이지 않습니다.
이상치를 포함하여 전부를 4bit로 만든 후, 피해를 줄이는 방안을 여러 겹으로 쌓고 있습니다.
여행 가방 예시에서는, 피아노 한 대 때문에 999개의 여행 가방이 0kg으로 압축되어 버렸습니다.
이를 막으려면 어떻게 해야 할까요?
가중치 양자화에서 자주 사용되는 것은, 피아노만 별도 처리하는 방법이 아니라, 모두를 4bit로 유지한 채 눈금 폭만 바꾸는 방법입니다.
정답은 간단합니다.
1,000개를 하나의 눈금으로 묶어 측정하는 것을 그만두고, 수십 개 단위의 '그룹'으로 나누면 됩니다.
이것이 실제 양자화에서 사용되는 **그룹 단위 양자화(Group-wise Quantization)**라는 메커니즘입니다.
하나의 그룹에 포함되는 가중치(Weight)의 개수를 **그룹 사이즈(Group Size)**라고 부릅니다.
[그룹 A] 짐 1 ~ 32 (일반 여행용 캐리어만 있는 경우: 10kg ~ 23kg)
→ 눈금판의 가장 위를 23kg에 맞추고, 눈금 하나당 약 3kg 간격으로 기록한다
[그룹 B] 짐 33 ~ 64 (피아노가 섞여 있는 그룹)
...
전체 가중치 행렬에서 하나의 배율을 사용하는 것이 아니라, 32개나 128개와 같은 단위로 나누어 그룹별로 배율(Scale)을 부여합니다.
이렇게 하면 피아노가 있는 그룹만 눈금 간격이 거칠어지지만, 다른 그룹은 세밀한 눈금으로 정밀하게 수치를 남길 수 있습니다.
피아노를 포함한 모든 것이 4bit로 유지되며, 변하는 것은 그룹별 눈금 폭(간격)뿐입니다.
GPTQ나 AWQ에서 배포되는 많은 4bit 모델들은 '그룹 사이즈 128'을 사용합니다.
llama.cpp의 Q4_K는 32개씩 작은 그룹마다 배율을 가지는 형식입니다.
둘 다 그룹 단위 양자화(Group-wise Quantization)를 통해 이상치(Outlier)의 영향을 작은 상자 안에 가두고 있습니다.
다만, 그룹별 배율도 함께 저장해야 하므로 실제 데이터량은 정확히 4bit가 되지는 않습니다.
예를 들어 Q4_K는 가중치 하나당 약 4.5bit이며, 16bit 대비 축소율은 4분의 1보다는 다소 여유로운 약 3.5분의 1입니다.
중요한 가중치를 구분하여 반올림 방식을 고안하다
그룹 단위 양자화에 더해, '어떤 가중치가 중요한지'를 파악하여 보호하는 기법도 있습니다.
2023년에 발표된 AWQ 논문은 활성화 값(Activation)이 크게 흐르는 약 1%의 가중치만 보호해도 반올림으로 인한 성능 저하를 크게 줄일 수 있음을 보여주었습니다.
활성화 값이 큰 곳에 곱해지는 가중치일수록, 반올림 오차가 답에 영향을 주기 쉽기 때문입니다.
llama.cpp의 양자화에도 샘플 문장을 실제로 통과시켜 가중치별 중요도를 측정하고, 중요한 가중치일수록 반올림 오차가 작아지도록 양자화하는 **imatrix (importance matrix)**라는 메커니즘이 있습니다.
망가지지 않는 이유 ③: '핵심 부분'은 4bit로 남기지 않는다 (혼합 정밀도)
나아가, 현대의 양자화에는 또 하나의 방어책이 있습니다.
그것은 **
출력층의 역할도 겸하고 있습니다.
입구와 출구를 모두 담당하는 이 핵심 부분은 4bit보다 정밀도가 높은 6bit로 유지됩니다.
이 모델에서는 임베딩 레이어(embedding layer)가 크기 때문에, 파라미터 수로 따지면 약 20%가 6bit를 차지합니다.
또한, 페이지 상단의 'Metadata' 표에는 quantize.imatrix.file라는 항목이 있어, 앞서 소개한 imatrix를 사용하여 양자화되었음도 확인할 수 있습니다.
초대형 모델에서도 동일한 설계 사상
이 '핵심 부분만 아낌없이 남긴다'는 생각은 최신 거대 오픈 모델에서도 전혀 다르지 않습니다.
2026년 7월에 공개된 Kimi K3라는 모델은 약 2.8조 개의 파라미터를 가진 세계 최대급 오픈 모델입니다.
이 모델은 배포 시점부터 가중치(weight)의 대부분이 4bit (MXFP4)로 되어 있습니다.
Kimi K3는 MoE (Mixture of Experts, 전문가 혼합) 구조의 모델입니다.
MoE 레이어마다 896개의 라우팅된 전문가(routed experts)와 2개의 공유 전문가(shared experts)를 가지고 있으며, 라우팅된 전문가는 토큰당 16개만 선택되어 사용됩니다.
반면, 공유 전문가는 선택 여부와 관계없이 모든 토큰을 반드시 처리합니다.
기술 보고서와 배포 파일 설정(config.json)을 보면 내용은 다음과 같습니다.
| 컴포넌트 | 채택된 형식 | 역할 |
|---|---|---|
| 라우팅된 전문가 (토큰당 선택되는 전문가) | 4bit (MXFP4) | 파라미터의 대부분을 차지하며, 토큰당 일부만 사용됨 |
| 어텐션 및 공유 전문가 (모든 토큰이 통과하는 전문가), 출력층 등 | 16bit (BF16) | 모든 토큰이 반드시 통과하는 핵심 부분 |
파라미터의 대부분을 차지하는 라우팅된 전문가는 과감하게 4bit로 압축하여 데이터 용량을 크게 줄이는 동시에, 모든 토큰이 통과하는 핵심 부분은 4bit로 남기지 않았습니다.
기술 보고서에서는 이 핵심 부분을 '더 높은 정밀도(higher precision)'로 유지한다고 설명하고 있으며, 배포 파일에서는 16bit (BF16)으로 저장되어 있습니다.
MXFP4 역시 32개씩 그룹으로 배율을 공유하는 형식으로, 지금까지 본 그룹 단위 양자화와 같은 발상입니다.
다만, Kimi K3는 이전 사례들과 제작 방식에 한 가지 차이점이 있습니다.
학습을 마친 모델을 나중에 4bit로 반올림한 것이 아니라, 사전 학습 후의 마무리 학습(SFT 및 강화 학습) 전체를 통해 4bit로 작동하는 것을 전제로 단련했습니다.
이를 **QAT (Quantization-Aware Training, 양자화 대응 학습)**이라고 부릅니다.
모델이 처음부터 거친 눈금에 익숙한 상태로 완성되기 때문에, 나중에 반올림하는 방식보다 성능 저하를 억제하기 쉽다는 특징이 있습니다.
참고로 Kimi K3는 활성화 값(activation value)도 8bit (MXFP8)으로 처리할 것을 전제로 하고 있습니다.
파일 이름에 Q4_K가 붙은 GGUF나 공식적으로 MXFP4 (4bit) 양자화된 것으로 배포되는 Kimi K3 모두를 4bit로 만든 것은 아닙니다.
진정으로 중요한 부분은 4bit로 남기지 않은 곳이 있다는 점이며, 이것이 AI가 무너지지 않는 큰 비결입니다.
요약
서두에서는 16bit 가중치를 4bit로 하면 단순 계산으로 데이터 용량이 4분의 1이 된다고 했습니다.
실제로는 그룹별 배율을 함께 저장하는 부분과, 핵심 부분을 4bit보다 정밀도가 높은 형식으로 남기는 부분 때문에 데이터 용량이 늘어납니다.
기사에서 본 Llama 3.2 1B의 Q4_K_S는 16bit일 때 약 2.5GB에 비해 776MB입니다.
Kimi K3도 모든 것을 16bit로 했을 경우 약 5.6TB에 비해 배포 파일은 약 1.6TB입니다.
둘 다 실제 데이터 용량은 3분의 1 정도가 됩니다.
4분의 1에 미치지 못하는 부분은, 답변을 무너뜨리지 않기 위한 데 사용되는 데이터라고 할 수도 있습니다.
가중치의 데이터 용량을 3분의 1 정도로 줄여도 LLM의 답변이 크게 변하지 않는 이유는 마법이 아니었습니다.
합리적인 세 가지 노력의 축적입니다.
- 이상치(Outlier)가 발생하는 부분을 반올림하지 않았다: 성능에 필수적인 이상치는 활성화 값의 극히 일부(약 0.1%)에 집중되어 있으며, 가중치만 양자화하는 방식으로는 이 부분을 4bit로 처리하지 않았습니다.
- 그룹 단위로 격리했다: 가중치를 작은 그룹으로 나누고 배율을 부여함으로써 이상치로 인한 연쇄 피해를 국소화하고, 중요한 가중치는 반올림 방식을 고안하여 보호했습니다 (AWQ, imatrix).
- 핵심 부분은 4bit보다 정밀도가 높은 형태로 남겼다: 임베딩 레이어(embedding layer)나 출력 레이어(output layer), 모든 토큰이 통과하는 핵심 부분 등 판단에 직결되는 레이어는 4bit로 처리하지 않고 5bit, 6bit, 16bit 등으로 유지했습니다 (혼합 정밀도/Mixed Precision).
다만, 영향이 완전히 사라지는 것은 아닙니다.
일반적으로 매개변수(parameter) 수가 적은 모델일수록 4bit로 양자화했을 때의 성능 저하가 더 눈에 잘 띕니다.
양자화된 모델을 Ollama나 llama.cpp에서 구동할 때는, '이 모델은 4bit라고 이름을 달고 있지만, 어디를 중요하게 보호하고 있을까?'라는 시각으로 살펴보시면 좋습니다.
방대한 매개변수를 제한된 메모리로 구동하기 위한 엔지니어들의 놀라운 노력이 느껴질 것입니다.
참고 문헌
- Dettmers et al., LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale, NeurIPS 2022
- Frantar et al., GPTQ: Accurate Post-Training Quantization for Generative Pre-trained Transformers, ICLR 2023
- Lin et al., AWQ: Activation-aware Weight Quantization for LLM Compression and Acceleration, MLSys 2024
- Rouhani et al., Microscaling Data Formats for Deep Learning, arXiv 2023 (MXFP4 등 MX 형식)
- Jiang et al., Mixtral of Experts, arXiv 2024 (MoE의 전문가 선택 방식 분석)
- Kimi Team, Kimi K3: Open Frontier Intelligence, arXiv 2026 (MXFP4의 QAT 및 높은 정밀도로 유지하는 부분 구성)
- llama.cpp PR #1684: k-quants (
Q4_K구조와 중간 계산에 사용되는Q8_K) - llama.cpp tools/imatrix (importance matrix 메커니즘) - Unsloth Llama-3.2-1B-Instruct-GGUF (Hugging Face GGUF 뷰어)
- Unsloth Llama-3.2-1B-Instruct의 config.json (
tie_word_embeddings설정) - Moonshot AI, Kimi K3 모델 카드 (배포 파일의config.json에 따른 양자화 대상)
토론(Discussion)

AI 자동 생성 콘텐츠
본 콘텐츠는 Zenn ML의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기