포스트 트레이닝 양자화 실전: GPTQ·AWQ·SmoothQuant 알고리즘 비교와 운영 선택 기준
요약
대형 언어 모델을 프로덕션에 배포할 때 첫 번째 장벽은 메모리다. Llama-3 70B를 BF16 그대로 올리면 약 140 GB VRAM이 필요하다. 포스트 트레이닝 양자화(Post-Training Quantization, PTQ)는 재학습 없이 가중치를 INT4나 INT8로 압축해 이 장벽을 크게 낮춘다. 70B 모델이 단일 80 GB GPU에 올라가고, 처리 속도도 함께 오른다.
현재 프로덕션에서 가장 많이 쓰이는 PTQ 알고리즘은 세 가지다. GPTQ는 헤시안(Hessian) 행렬로 각 가중치의 민감도를 측정해 열 단위로 양자화하며, INT4에서도 낮은 오차를 유지한다. AWQ(Activation-aware Weight Quantization)는 활성화 분포를 관찰해 실제로 중요한 상위 1% 가중치만 보호하고 나머지를 양자화해, vLLM의 Marlin 커널에서 FP16 대비 1.6배 처리량을 낸다. SmoothQuant는 활성화에 나타나는 이상치(outlier)를 수학적으로 가중치 쪽으로 이전해 가중치와 활성화 모두를 INT8로 낮추는 W8A8 추론을 가능하게 한다.
세 알고리즘은 같은 목표를 전혀 다른 수학적 경로로 달성한다. 어느 알고리즘을 선택하느냐는 하드웨어 환경, 서빙 프레임워크, 허용 가능한 정확도 손실에 따라 달라진다.
왜 재학습 없이 양자화가 가능한가
신경망 가중치 대부분은 분포가 좁고 정규 분포에 가깝다. FP16 값을 INT4로 줄이면 표현 가능한 값이 65,536개에서 16개로 줄어들지만, 가중치 대부분이 좁은 범위에 집중되어 있어 양자화 오차가 생각보다 작다.
반면 활성화 값은 다르다. Transformer 중간층의 활성화에는 특정 채널에서 갑자기 수백 배 커지는 이상치가 자주 나타난다. LLaMA 계열이나 GPT 계열에서 관찰되는 이 현상을 LLM.int8() 논문(Dettmers et al., 2022)은 "새로운 형태의 출현(emergence)"이라 표현했다. 이 이상치는 활성화를 INT8로 양자화할 때 오차를 크게 키운다.
이 관찰이 알고리즘 분기점이 된다. GPTQ와 AWQ는 활성화는 FP16으로 그대로 두고 가중치만 INT4로 낮추는 W4A16 전략을 택한다. SmoothQuant는 이상치 자체를 수학적으로 제거해 활성화까지 INT8로 낮추는 W8A8을 실현한다.
양자화 기본 공식
INT4 균일 양자화의 기본 형태는 다음과 같다.
Q(w) = round(w / s) × s
s = (w_max - w_min) / (2^b - 1)스케일 팩터 s를 어떻게 결정하고, 어느 단위로 적용하며, 오차를 어떻게 보정하느냐에 따라 GPTQ, AWQ, SmoothQuant가 갈린다.
GPTQ: 헤시안 기반 열단위 양자화
OBS 프레임워크에서 출발
GPTQ(Frantar et al., 2022)는 Optimal Brain Surgeon(OBS) 프레임워크에서 출발한다. OBS는 1990년대 신경망 프루닝 연구에서 나온 방법으로, 특정 가중치를 제거했을 때 손실 함수에 미치는 영향을 헤시안 행렬로 근사한다.
GPTQ는 이 아이디어를 양자화에 적용한다. 가중치 행렬 W에서 한 열을 양자화할 때 발생하는 오차를, 아직 양자화하지 않은 나머지 열의 가중치에 보정값으로 분배한다. 이 오차 역전파를 열 단위로 순차적으로 반복하면 전체 행렬 수준의 오차가 크게 줄어든다.
δW_F = -Q_err_q · (H_FF^{-1})^TH_FF^{-1}는 아직 처리되지 않은 가중치에 대한 역헤시안 행렬이고, Q_err_q는 방금 양자화한 열의 오차다.
실용적인 구현: Lazy Batch-Updates
순수 OBS는 계산 비용이 너무 크다. GPTQ는 두 가지 근사로 이를 해결한다.
첫째, 역헤시안 행렬을 한 번만 계산한다. Cholesky 분해를 사용해 수치 안정성을 확보하고 전체 양자화 과정에서 재사용한다. 둘째, 열을 한 번에 하나씩 처리하지 않고 128열씩 묶어(lazy batch-update) 처리해 GPU 활용률을 높인다. OPT-175B 같은 대규모 모델도 단일 A100에서 수 시간 내 양자화가 완료된다.
GPTQ의 특징
GPTQ의 강점은 넓은 모델 호환성이다. 거의 모든 decoder-only Transformer에 적용할 수 있고, AutoGPTQ 라이브러리를 통해 표준화된 파이프라인이 제공된다. INT4로 낮춰도 perplexity 손실이 1~2 포인트 수준에 머무는 경우가 많다.
한계는 처리량이다. GPTQ INT4 가중치는 메모리에서는 INT4로 저장되지만, 실제 계산 시에는 FP16으로 역양자화해 연산한다. 이 역양자화(dequantization) 단계가 처리량의 병목이 된다.
AWQ: 활성화 인식 가중치 양자화
핵심 통찰: 모든 가중치가 동등하지 않다
AWQ(Lin et al., 2023)의 출발점은 단순하지만 강력한 관찰이다. 가중치 행렬에서 어떤 가중치가 실제로 중요한지를 활성화의 크기로 판별할 수 있다는 것이다.
특정 입력 채널에 대응하는 활성화 값이 크다면, 그 채널에 연결된 가중치 열이 출력에 크게 기여한다. 이 가중치를 INT4로 거칠게 양자화하면 모델 품질이 크게 떨어진다. AWQ는 이 채널들을 "현저한(salient)" 가중치로 분류해 특별히 처리한다.
per-channel 스케일 최적화
AWQ는 "현저한" 가중치를 INT4로 그냥 두는 대신, 수학적 동치 변환으로 이 가중치의 양자화 오차를 줄인다. 스케일 팩터 s를 도입하면:
xw = (x / s) · (s · w)활성화 채널의 스케일 팩터 s를 크게 설정하면, 가중치 s·w가 넓은 범위를 가지게 되어 INT4 양자화 시 상대 오차가 줄어든다. 이 s 값을 교정 데이터셋의 활성화 분포를 기반으로 최적화하는 것이 AWQ의 핵심이다.
전체 가중치 중 상위 1%만 이 방식으로 보호하고, 나머지 99%는 일반 균일 양자화를 적용한다. 추가 FP16 저장이 필요 없어 메모리 오버헤드가 없다.
Marlin 커널과 처리량
AWQ의 진짜 강점은 추론 단계에서 나온다. vLLM은 AWQ와 함께 Marlin 커널을 사용한다. Marlin은 NVIDIA GPU에서 INT4 가중치와 FP16 활성화의 혼합 정밀도 GEMM을 고도로 최적화한 커널로, 역양자화와 행렬 곱을 파이프라인으로 융합한다.
vLLM 벤치마크에서 AWQ + Marlin은 Llama-3 70B 기준 FP16 대비 약 1.6배 처리량 향상을 달성했다. 같은 조건의 GPTQ INT4 대비에서도 유의미한 차이가 난다.
AWQ는 GPTQ보다 양자화 시간도 짧다. 헤시안 계산이 필요 없고 교정 데이터셋을 한 번만 순회하기 때문이다.
SmoothQuant: 활성화 이상치를 가중치로 이전
문제: 활성화의 이상치
GPTQ와 AWQ가 W4A16을 택한 이유는 활성화 이상치 때문이었다. SmoothQuant(Xiao et al., 2023)는 이 문제를 정면으로 해결해 W8A8 추론을 가능하게 한다.
Transformer 모델의 활성화를 관찰하면, 특정 토큰·채널 조합에서 값이 수백 배 커지는 이상치가 나타난다. 예를 들어 대부분 채널의 활성화가 ±1 범위에 있을 때, 특정 채널은 ±100을 넘기도 한다. 이 이상치가 존재하면 전체 텐서의 스케일 팩터가 이상치에 맞춰져 나머지 값의 해상도가 크게 떨어진다.
수학적 동치 변환: s 팩터
SmoothQuant의 핵심은 수학적 동치 변환이다. 행렬 곱 Y = XW에서:
Y = X · W = (X · diag(s)⁻¹) · (diag(s) · W)X̃ = X · diag(s)⁻¹, W̃ = diag(s) · W로 정의하면, 결과 Y는 변하지 않는다. s는 채널별 스무딩 팩터다.
s_j = max(|X_j|)^α / max(|W_j|)^(1-α)α는 0과 1 사이의 하이퍼파라미터로 얼마나 많은 "어려움"을 가중치로 이전할지 조절한다(기본값 0.5). 이 변환으로 X̃의 이상치가 사라지고, 두 텐서 모두 INT8로 양자화하기 훨씬 쉬운 형태가 된다.
W8A8의 이점: 정수 행렬 곱
INT8 × INT8 → INT32 행렬 곱은 현대 GPU의 정수 연산 유닛(INT8 tensor core)을 직접 활용할 수 있다. NVIDIA A100과 H100에서 INT8 GEMM은 FP16 대비 이론적으로 2배 처리량을 낼 수 있으며, 가중치와 활성화 모두 INT8이므로 KV 캐시와 활성화 메모리도 줄어든다. 배치 크기가 클수록 이 이점이 두드러진다.
스무딩 팩터 s는 사전에 계산해 가중치에 흡수시키므로, 추론 시 오버헤드가 없다. TensorRT-LLM과 vLLM의 FP8/INT8 백엔드에서 폭넓게 지원된다.
운영 환경별 선택 기준
단일 GPU, 최대 처리량이 목표
메모리 제약이 심하고 단일 A100/H100에서 최대한 빠른 추론을 원한다면 AWQ + Marlin이 현재 최선이다. vLLM을 서빙 프레임워크로 쓴다면 AutoAWQ로 양자화한 뒤 vLLM에 올리는 것이 가장 검증된 경로다.
from awq import AutoAWQForCausalLM
from transformers import AutoTokenizer
model_id = "meta-llama/Meta-Llama-3-70B-Instruct"
quant_path = "llama3-70b-awq"
model = AutoAWQForCausalLM.from_pretrained(model_id)
tokenizer = AutoTokenizer.from_pretrained(model_id)
quant_config = {
"zero_point": True,
"q_group_size": 128,
"w_bit": 4,
"version": "GEMM"
}
model.quantize(tokenizer, quant_config=quant_config)
model.save_quantized(quant_path)서빙 시에는 vllm serve llama3-70b-awq --quantization awq_marlin으로 Marlin 커널을 활성화한다.
대규모 배치 추론, H100 클러스터
동시 요청이 많고 H100 클러스터를 운영한다면 SmoothQuant(W8A8) 또는 FP8을 검토한다. H100은 FP8 텐서 코어를 지원하며, vLLM의 FP8 모드는 SmoothQuant의 수학적 이점을 FP8 정밀도로 구현한다. TensorRT-LLM을 쓰는 경우 SmoothQuant INT8이 폭넓게 지원된다.
범용 호환성, 비주류 모델
커스텀 아키텍처나 덜 검증된 모델을 다루는 경우 GPTQ가 가장 안전한 선택이다. AutoGPTQ와 vLLM의 GPTQ 지원은 성숙해 있고, 다양한 그룹 크기(group_size=32/64/128)와 비트 수(2/3/4/8)를 지원한다.
정확도가 최우선
양자화 이후에도 최대한 높은 정확도를 원한다면 INT4보다 INT8을 선택하거나, GPTQ의 경우 group_size=32로 줄여 더 세밀한 스케일링을 적용한다. 일부 벤치마크에서는 AWQ INT4가 GPTQ INT4보다 낮은 perplexity를 보이기도 한다. 모델별로 직접 벤치마크하는 것이 권장된다.
2026년 현재 생태계
세 알고리즘 모두 vLLM 0.27 이상에서 지원되며, HuggingFace Hub에는 주요 오픈 모델의 AWQ, GPTQ 양자화 버전이 공개되어 있다. GGUF 포맷의 llama.cpp는 독자적인 Q4_K_M 등의 양자화 방식을 사용하며 CPU 추론에 특화되어 있다.
FP8(E4M3)은 GPTQ/AWQ의 유력한 경쟁자로 부상했다. H100의 하드웨어 FP8 지원과 vLLM의 FP8 모드가 결합되면, 별도의 양자화 교정 없이 INT4에 가까운 메모리 절감과 INT8에 가까운 정확도를 얻을 수 있다. 이 시리즈의 137편에서 다룬 FP8 학습과 함께, FP8 추론도 점점 기본 경로가 되고 있다.
Open question: AWQ Marlin 커널의 처리량 수치는 특정 배치 크기·GPU 구성·시퀀스 길이에서 측정된 값이다. 실제 배포 환경에서는 배치 크기, 프롬프트 길이, GPU 세대에 따라 결과가 크게 달라질 수 있으므로 독립 벤치마크를 권장한다.
References
- GPTQ: Accurate Post-Training Quantization for Generative Pre-trained Transformers (Frantar et al., 2022)
- AWQ: Activation-aware Weight Quantization for LLM Compression and Acceleration (Lin et al., 2023)
- SmoothQuant: Accurate and Efficient Post-Training Quantization for Large Language Models (Xiao et al., 2023)
- Marlin: A Fast Kernel for LLM Inference (Frantar & Alistarh, 2024)
- LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale (Dettmers et al., 2022)
- AutoAWQ GitHub Repository
- AutoGPTQ GitHub Repository
- vLLM Quantization: Supported Hardware and Formats