GEO

양자화

양자화(Quantization)는 LLM의 가중치를 고정밀 부동소수(주로 16비트 bfloat·float)에서 저정밀 정수·부동소수(8비트·4비트·때로는 2비트)로 변환해, 작은 품질 손실 대신 메모리 풋프린트를 줄이고 추론을 빠르게 하는 과정입니다. 현대 오픈소스 배포 — llama.cpp·Ollama·vLLM·GPTQ·AWQ — 는 거의 전부 양자화된 모델 위에서 돌아갑니다.

양자화(Quantization)는 LLM의 가중치를 고정밀 부동소수(주로 16비트 bfloat·float)에서 저정밀 정수·부동소수(8비트·4비트·때로는 2비트)로 변환해, 작은 품질 손실 대신 메모리 풋프린트를 줄이고 추론을 빠르게 하는 과정입니다. 현대 오픈소스 배포 — llama.cpp·Ollama·vLLM·GPTQ·AWQ — 는 거의 전부 양자화된 모델 위에서 돌아갑니다.

왜 중요한가

네이티브 16비트의 70B 모델은 ~140 GB GPU 메모리를 요구합니다 — 소비자급 카드 한 장으로는 닿을 수 없습니다. 같은 모델의 4비트 양자화는 ~35 GB만 쓰고 소비자 GPU 두 장, 워크스테이션 카드 한 장, 심지어 Mac Studio에도 들어갑니다. 로컬 LLM을 실용적으로 만든 것이 바로 양자화입니다: Llama 3 70B·Mixtral 8×22B·DeepSeek-V3가 3,000달러대 하드웨어에서 돌아가는 것은 양자화 덕분입니다. 빌더에게는 "셀프 호스팅할 여유가 없다"와 "자체 모델을 서빙할 수 있다"의 차이입니다.

작동 원리

정밀도 수준:

  • FP32(32비트 부동소수): 훈련 기본. 가중치당 4바이트. 추론에 거의 안 씀.
  • FP16 / BF16(16비트): 추론 기본. 가중치당 2바이트.
  • INT8(8비트 정수): 메모리 절반, 품질 거의 동일.
  • INT4 / FP4(4비트): 메모리 1/4, 품질 손실 작음(벤치마크에서 보통 1~3%).
  • INT2(2비트): 메모리 1/8, 대부분 과제에서 품질 손실이 눈에 띔.

양자화 절차:

  1. 캘리브레이션: 작은 데이터셋에 모델을 돌려 활성값 범위를 관찰.
  2. 스케일·제로포인트 계산: 각 가중치 텐서에 대해 원래 범위를 정수 범위로 매핑하는 스케일 팩터 계산.
  3. 가중치 변환: 각 가중치를 정수로 저장하고 그룹·채널별 스케일 팩터를 부수로 저장.
  4. 추론 시 역양자화: 연산 직전에 가중치를 부동소수로 다시 확장해 행렬 곱에 사용.

양자화 기법

RTN(Round to Nearest): 가장 단순. 가장 가까운 양자화 값으로 반올림. 빠르지만 품질 낮음.

GPTQ: 재구성 오류를 최소화하는 그룹 단위 사후 훈련 양자화. 4비트 오픈소스 표준.

AWQ(Activation-aware Weight Quantization): 큰 활성값을 다루는 가중치를 보존하고 나머지를 더 공격적으로 양자화. 4비트 LLM에 매우 인기.

GGUF(Q4_K_M·Q5_K_M 등): llama.cpp의 블록 단위 양자화 포맷 계열. K_M 변형이 크기·정확도 균형. Q4_K_M이 로컬 추론 기본 포맷.

SmoothQuant: 활성값 이상치를 가중치로 옮겨 둘 다 깨끗이 양자화. 큰 모델에서도 정확도 손실 없이 INT8을 가능케 함.

QAT(Quantization-Aware Training): 양자화를 훈련 루프 안에 넣어 학습. 품질 최상이지만 재훈련 필요.

FP8: H100·H200 GPU가 하드웨어 네이티브로 지원하는 8비트 부동소수. 훈련·추론에서 INT8보다 빠름.

트레이드오프

품질 vs 압축: 정밀도가 낮을수록 모델이 더 많이 저하됩니다. 8비트는 거의 공짜, 4비트는 좋은 기본값, 2비트는 눈에 띄게 상합니다.

과제 민감도: 수학·코드·장문 추론은 챗·요약보다 양자화에 더 민감합니다.

속도 vs 메모리: 양자화는 메모리를 절약하지만, 연산이 넉넉한 GPU에서는 추론이 항상 빨라지진 않습니다. 메모리 바운드 하드웨어(소비자 GPU·Apple Silicon)에서는 큰 속도 향상.

캘리브레이션 데이터 품질: 나쁜 캘리브레이션은 양자화 모델을 조용히 망칩니다. 대표 프롬프트를 사용합니다.

언제 어느 것을 쓰는가

소비자 GPU(8~24 GB): 4비트 GGUF(Q4_K_M) 또는 AWQ.

H100·H200: SmoothQuant와 함께 FP8 또는 INT8.

엣지·모바일: 공격적 4비트 또는 2비트 GGUF, 품질 손실 수용.

리서치 벤치마킹: FP16·BF16을 기준선으로 유지, 양자화는 배포 비교 용도로만.

고위험 프로덕션: 8비트 또는 16비트. 한계 비용이 품질 보장의 가치가 있음.

흔한 실수

정밀도를 명시하지 않고 벤치마크 비교: 양자화 모델의 MMLU 점수는 같은 모델의 FP16 점수와 직접 비교 불가.

퍼플렉서티 드리프트 무시: 벤치마크가 괜찮아 보여도 양자화가 특정 스킬(특히 수학)을 저하시킬 수 있습니다. 실제 워크로드로 테스트.

너무 빠르게 공격적 양자화: FP16에서 INT2로 바로 점프하면 품질이 어디서 무너졌는지 보이지 않습니다.

낡은 캘리브레이션 데이터: 영어로만 캘리브레이션한 모델은 한국어 프롬프트에서 품질을 잃습니다.

엔드투엔드 지연 미측정: 양자화는 메모리 로드와 연산 모두에 영향. 처리량이 개선되지 않는 경우는 병목이 다른 곳이기 때문입니다.

Sources:

관련 인블로그 게시물