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:

관련 인블로그 게시물

inblog에서 활용하기

inblog의 AI 초안 생성 백엔드는 작업 중요도에 따라 양자화된 모델과 네이티브 정밀도 모델을 나눠 사용합니다. 간단한 메타 필드 생성은 4비트 양자화 모델로 비용을 낮추고, 장문 기술 글의 사실 검증이나 다국어 번역처럼 품질이 중요한 지점에서는 8비트·16비트 모델로 라우팅해 양쪽 이점을 동시에 가져갑니다.