LLM 압축 기술 딥다이브 — 양자화, 가지치기, 증류까지

· # AI 개념
양자화 LLM 모델 압축 GPTQ AWQ FP8

RTX 4090을 사서 Llama 70B 모델을 돌려보려 했는데, 로딩 단계에서 “CUDA out of memory” 에러가 뜨는 순간의 절망감. 24GB VRAM이면 충분하다고 생각했는데, 정작 70B 모델은 FP16 기준으로도 140GB가 넘는 메모리를 요구한다.

그래서 등장한 것이 바로 모델 압축 기술이다. 140GB짜리 모델을 35GB로 줄여서 RTX 4090에서도 돌아가게 만드는 기술들. 하지만 단순히 “크기만 줄이면 된다”는 게 아니다. 각 압축 단계마다 정확히 무엇이 손실되고, 왜 그럼에도 불구하고 작동하는지 이해해야 한다.

숫자 표현의 과학: 부동소수점의 해부학

모든 압축 기술을 이해하려면 컴퓨터가 어떻게 실수를 저장하는지부터 알아야 한다.

FP32(32비트 부동소수점)는 IEEE 754 표준에 따라 이렇게 구성된다:

비트 구성역할범위/정밀도
1비트 부호양수/음수 결정±1
8비트 지수부숫자의 크기 범위±3.4 × 10³⁸
23비트 가수부소수점 정밀도약 7자리

이는 소수점 이하 7자리까지 정확하게 표현할 수 있다는 뜻이다. 하지만 신경망의 가중치가 정말 그런 정밀도를 필요로 할까?

FP32 → FP16: 첫 번째 혁명

FP16으로의 전환은 단순한 “절반으로 줄이기”가 아니다. 내부 구조가 근본적으로 바뀐다:

변화FP32FP16실제 영향
가수부23bit →10bit정밀도 7자리 → 3–4자리
지수부8bit →5bit범위 ±3.4×10³⁸ → ±65,504
표현 가능한 값약 40억 개약 65,000개해상도 대폭 감소

실제 영향을 보면:

  • 대부분의 LLM 추론: 성능 저하 거의 없음 (perplexity 차이 <1%)
  • 훈련 과정: gradient accumulation에서 underflow 문제 발생 가능
  • 극값 처리: ±65,504를 넘는 값은 오버플로우

이때 등장한 것이 BF16(Brain Floating Point 16)이다.

BF16의 혁신: 범위 vs 정밀도 트레이드오프

Google이 TPU를 위해 개발한 BF16은 다른 접근을 택했다:

형식지수부가수부장점단점
FP165bit10bit높은 정밀도좁은 범위
BF168bit7bitFP32와 동일 범위낮은 정밀도

BF16의 핵심은 “범위를 포기하지 않는다”는 것이다. FP32와 동일한 8비트 지수부를 유지해서 오버플로우 문제를 원천 차단했다. 대신 가수부를 7비트로 줄여 정밀도는 떨어지지만, 대부분의 딥러닝 워크로드에서는 이것만으로도 충분하다.

FP16 → INT8: 부동소수점에서 정수로

이제 진짜 도전이 시작된다. 부동소수점을 완전히 포기하고 정수로 넘어가는 것이다.

INT8은 단순하다: –128부터 127까지 총 256개의 정수만 사용한다. 하지만 이걸 제대로 하려면 양자화(quantization) 과정을 이해해야 한다.

양자화의 핵심: Scale Factor와 Zero Point

연속적인 부동소수점 값을 256개의 이산적인 정수로 매핑하는 공식:

quantized_value = round((original_value - zero_point) / scale_factor)

여기서:

  • scale_factor: 실제 값 범위를 256개 구간으로 나누는 비율
  • zero_point: 0.0이 정수 몇 번에 해당하는지 정하는 오프셋

대칭 양자화 vs 비대칭 양자화:

  • 대칭: zero_point = 0, 범위가 대칭적 (–127 to 127)
  • 비대칭: zero_point ≠ 0, 실제 데이터 분포에 맞춤 최적화

INT8의 실제 영향: 아직은 괜찮다

놀랍게도 대부분의 텍스트 생성 작업에서는 FP16과 거의 동일한 성능을 보인다. 하지만 세심하게 보면 차이가 나타나기 시작한다:

성능 유지 영역:

  • 일반적인 대화, 요약, 번역
  • 기본적인 상식 추론

미세한 저하 영역:

  • 복잡한 수학 문제 (GSM8K에서 1–3% 저하)
  • 논리적 추론 체인
  • 코딩 벤치마크 (HumanEval에서 2–5% 저하)

Outlier 문제: SmoothQuant의 등장 이유

INT8 양자화의 가장 큰 적은 “outlier 활성화값”이다.

LLM의 일부 채널에서는 정상 범위보다 100배 이상 큰 활성화값이 나타난다. 예를 들어:

  • 대부분 활성화: –1.0 to 1.0 범위
  • Outlier 채널: –150.0 또는 200.0 같은 극값

이런 극값 때문에 전체 scale_factor가 망가진다. 200.0 하나 때문에 –200 to 200 범위로 양자화하면, 대부분의 –1 to 1 값들이 –1, 0, 1로만 표현되어 정보 손실이 극심해진다.

SmoothQuant의 해결책:

  1. 활성화의 극값을 가중치로 이동: 수학적으로 동등한 변환을 통해 활성화를 “평활화”
  2. 가중치는 쉽게 양자화: 가중치 분포는 보통 균등하게 분포되어 있어 양자화하기 쉬움
  3. 결과: 활성화와 가중치 모두 INT8로 깔끔하게 양자화 가능

실제로 SmoothQuant를 쓰면 FP16 대비 perplexity 증가가 1% 미만으로 유지된다.

INT8 → INT4: 극한의 영역

이제 정말 극한에 도달한다. 16개 값 (-8 to 7)으로 모든 가중치를 표현해야 한다.

Group Quantization: 필수 생존 기술

INT4에서는 group quantization이 거의 필수다. 전체 가중치를 하나의 scale_factor로 양자화하면 정보 손실이 너무 심하기 때문이다.

작동 원리:

  • 가중치를 128개씩 그룹으로 나눔
  • 각 그룹마다 별도의 scale_factor 계산
  • 총 메모리: 4bit × weights + scale_factors

예시로 4096개 가중치가 있다면:

  • 32개 그룹 (4096 ÷ 128)
  • 4096 × 4bit + 32 × 16bit = 16,384 + 512 = 16,896 bits
  • 단순 INT4: 4096 × 4bit = 16,384 bits
  • 오버헤드: 약 3% (품질 향상 대비 무시할 수준)

INT4의 현실적 영향: 드디어 체감되기 시작

INT4부터는 성능 저하가 명확하게 나타난다:

벤치마크FP16INT8INT4저하율
WikiText Perplexity5.365.415.68+6%
MMLU76.2%75.8%73.1%–4%
GSM8K84.3%82.7%78.9%–6.4%
HumanEval45.7%44.1%39.2%–14.2%

특히 두드러지는 저하 영역:

  • 수학적 정확성: 소수점 계산, 큰 수 연산
  • 희귀 토큰: 전문 용어, 외국어, 기술 용어
  • 긴 컨텍스트 일관성: 4k+ 토큰에서 문맥 유지력 감소
  • 코딩: 복잡한 알고리즘, 정확한 문법 구조

그럼에도 사용하는 이유:

  • 메모리 절약이 압도적: 70B 모델이 140GB → 35GB
  • 대부분의 실용적 작업에서는 여전히 충분한 품질
  • 추론 속도 향상: 메모리 대역폭 병목 완화로 25–40% 더 빠름

고급 압축 기법들의 기술적 깊이

GPTQ: Hessian 기반 최적화의 마법

GPTQ는 Optimal Brain Quantization (OBQ)을 대규모 언어모델로 확장한 기법이다.

핵심 아이디어:

  1. Hessian 행렬: 각 가중치가 손실함수에 미치는 2차 도함수 영향 계산
  2. layer-wise 처리: 한 번에 한 레이어씩, 메모리 효율적으로 처리
  3. 오차 보상: 한 가중치를 양자화할 때 생기는 오차를 다른 가중치들에 분산

수학적 접근:

H^(-1) * gradient_error → 다른 가중치들로 오차 분산

결과적으로 “가장 중요하지 않은” 가중치부터 순차적으로 양자화하면서 전체 모델 성능 손실을 최소화한다.

벤치마크 성능:

  • Llama 70B GPTQ-INT4: perplexity 5.54 (FP16 대비 +3.4%)
  • 추론 속도: FP16 대비 2.6배 개선 (Marlin 커널 적용 시)

AWQ: 활성화 기반 가중치 중요도

AWQ는 완전히 다른 철학을 가진다: “실제 데이터가 흘러갈 때 중요한 가중치를 찾자”

작동 과정:

  1. Calibration dataset로 실제 추론 실행
  2. 각 채널의 activation magnitude 분석
  3. Salient weight 식별: 높은 활성화와 연결된 가중치들
  4. 혼합 정밀도: 중요한 가중치만 FP16, 나머지는 INT4

수식:

importance_score = mean(|activation_values|) * weight_variance

AWQ vs GPTQ 실제 성능 비교:

기법MMLUGSM8KHumanEvalARC-C평균 품질 유지율
AWQ73.4%79.2%39.8%68.1%95%
GPTQ72.8%77.6%38.4%66.9%90%

AWQ가 일관되게 더 나은 품질을 보이며, 특히 GSM8K, ARC-Challenge 같은 reasoning 태스크에서 격차가 크다.

FP8 vs INT8: 하드웨어 네이티브의 위력

FP8의 구조 (E4M3 format):

  • 1비트 부호 + 4비트 지수 + 3비트 가수
  • 표현 범위: –448 to 448
  • 정밀도: 약 3자리

INT8과의 성능 비교 (H100 기준):

메트릭FP8INT8향상율
Perplexity5.415.45FP8 우위
추론 속도1,247 tok/s1,182 tok/s+5.5%
메모리 효율성동일동일동일
구현 복잡도낮음보통FP8 우위

놀라운 점은 FP8이 INT8보다 perplexity가 더 낮다는 것이다. 부동소수점 표현이 여전히 가중치 분포에 더 적합하다는 증거다.

극한 압축: INT3, INT2, 그리고 BitNet

3비트와 2비트의 현실

INT3 (8개 값): 일부 연구에서 시도되고 있지만, 대부분의 벤치마크에서 10–20% 성능 저하 INT2 (4개 값): 실험적 수준, 실용성 매우 낮음

BitNet: 극단적 압축의 새로운 패러다임

BitNet 1.58b는 처음부터 극도로 압축된 가중치로 훈련하는 접근이다:

  • 가중치: –1, 0, 1 (1.58bit per weight)
  • 활성화: INT8 유지
  • 훈련부터 이 제약 조건 적용

결과적으로 후처리 양자화보다 훨씬 나은 성능을 보이지만, 완전히 새로운 아키텍처와 훈련 과정이 필요하다.

실전 벤치마크: 무엇을 선택할 것인가

종합 성능 비교표

기법메모리 절약PerplexityMMLUGSM8KHumanEval추론 속도구현 난이도
FP160%5.3676.2%84.3%45.7%1.0x
FP850%5.3476.0%83.9%45.2%1.3x⭐⭐ (H100 필수)
AWQ-INT475%5.5273.4%79.2%39.8%2.8x⭐⭐⭐
GPTQ-INT475%5.6872.8%77.6%38.4%2.6x⭐⭐⭐
GGUF Q4_K_M75%5.6173.0%78.1%39.1%2.2x⭐⭐

실제 모델로 이해하기: Qwen 3.5-397B

이론만 보면 감이 안 올 수 있으니, 최신 모델 하나를 예로 들어보자. Hugging Face에 올라온 Qwen 3.5-397B-A17B를 보면 이런 파일들이 있다:

  • Qwen3.5-397B-A17B — 원본 BF16
  • Qwen3.5-397B-A17B-FP8 — FP8 양자화
  • Qwen3.5-397B-A17B-GGUF — GGUF 다양한 양자화

이 모델은 MoE 구조로 총 파라미터 397B, 활성 파라미터 17B이다. “397B인데 17B만 쓴다”는 건, 토큰 하나를 처리할 때 397B 중 17B 파라미터만 실제로 활성화된다는 뜻이다. 하지만 메모리에는 397B 전부 올라가야 한다. 쓰이지 않는 파라미터도 “언제 활성화될지 모르니까” 대기시켜야 하기 때문이다.

양자화 수준모델 크기필요 메모리돌릴 수 있는 환경
BF16 (원본)~807GB810GB+ VRAMH100 × 10대 이상
FP8~400GB420GB+ VRAMH100 × 5대
INT4 (Q4_K_M)~214GB256GB+M3 Ultra Mac 또는 H100 × 3대
INT3 (Q3_K_M)~170GB192GB+M3 Ultra Mac (192GB)
INT2 (Q2_K)~130GB150GB+고용량 RAM 서버

여기서 보이는 것처럼, 원본 807GB짜리 모델이 INT4로 214GB까지 줄어든다. 4분의 1도 안 되는 크기인데, 이게 바로 양자화의 힘이다.

그런데 왜 정확히 4분의 1이 아닐까? 397B × 4bit ÷ 8 = 약 199GB인데 214GB인 이유는 Dynamic Quantization 때문이다. Unsloth의 Dynamic 2.0 같은 기법은 중요한 레이어는 8bit나 16bit로 유지하고, 덜 중요한 레이어만 4bit로 압축한다. 이 혼합 비트 전략이 순수 4bit보다 품질을 크게 올려준다.

FP8 버전은 정확히 절반인 ~400GB다. FP8은 per-tensor 또는 per-channel scale만 저장하면 되고, group quantization 같은 추가 메타데이터가 없어서 오버헤드가 거의 없다. H100이 FP8을 네이티브 지원하기 때문에 추론 속도도 BF16과 비슷하거나 더 빠르다.

실전에서의 의미: 개인이 이 모델을 돌리고 싶다면, 최소 INT4(Q4_K_M)로 256GB 메모리가 필요하다. RTX 4090(24GB)으로는 절대 불가능하고, Apple M3 Ultra(192GB 통합 메모리)라면 INT3까지 가능하다. MoE 오프로딩을 쓰면 24GB GPU + 256GB RAM 조합으로도 가능하지만, 토큰 생성 속도는 느려진다.

이처럼 같은 모델이라도 양자화 수준에 따라 필요한 하드웨어가 완전히 달라진다. 이것이 양자화 기술이 “이론적 관심사”가 아닌 “실용적 필수 기술”인 이유다.

GPU별 최적 선택 가이드

RTX 4090 (24GB):

  • 1순위: GGUF Q4_K_M (안정성, 호환성)
  • 2순위: AWQ-INT4 (성능 우선)
  • 예상 성능: Llama 70B 기준 15–25 tok/s

H100 (80GB):

  • 1순위: FP8 (가능하면)
  • 2순위: FP16 (최고 품질 필요시)
  • 예상 성능: 50–100+ tok/s

Apple Silicon (32GB+ 통합 메모리):

  • 유일한 선택: GGUF
  • 예상 성능: 3–8 tok/s (CPU)

미래 전망: 압축 기술의 진화

하드웨어 진화

  • FP4 네이티브 지원: 차세대 GPU에서 4비트 부동소수점 직접 지원 예상
  • 혼합 정밀도 가속기: 레이어별로 다른 precision을 효율적으로 처리

알고리즘 진화

  • Adaptive quantization: 입력에 따라 동적으로 precision 조정
  • Neural architecture co-design: 양자화를 염두에 둔 새로운 모델 아키텍처

실용성 진화

  • One-click quantization: 사용자가 복잡한 설정 없이 자동으로 최적 압축
  • Quality-speed 자동 균형: 태스크별 요구사항에 맞춘 자동 압축

개인적인 생각

LLM 압축 기술을 깊이 파보면서 가장 놀라운 점은 “수학적 우아함과 실용적 효과의 완벽한 조화”였다.

32비트에서 4비트로 8분의 1로 줄이면서도 대부분의 작업에서 차이를 느끼기 어렵다는 것은, 신경망의 redundancy가 생각보다 훨씬 크다는 증거다. 하지만 동시에 outlier 처리, group quantization, activation-aware weighting 같은 정교한 기법들이 필요하다는 것은, 단순무식한 압축으로는 한계가 있다는 뜻이기도 하다.

현실적인 관점에서 보면:

  • 산업 현장: FP8 (H100) 또는 AWQ가 스탠다드가 될 것
  • 개인 사용자: GGUF가 여전히 가장 접근성 좋은 선택
  • 연구 분야: BitNet 같은 극단적 접근이 새로운 돌파구 제공

가장 흥미로운 미래 시나리오“1-bit 네이티브 하드웨어”다. BitNet이 증명했듯이, 처음부터 극도 압축을 염두에 두고 설계하면 놀라운 효율성을 얻을 수 있다. 만약 GPU 벤더들이 1-bit 또는 2-bit 연산을 하드웨어에서 직접 지원한다면, 지금의 압축 기술들은 완전히 새로운 차원으로 진화할 것이다.

결국 압축 기술의 핵심은 “포기할 것과 지킬 것의 지혜로운 선택”이다. 소수점 7째 자리 정밀도는 포기해도 되지만, reasoning 능력은 지켜야 한다. 메모리는 8분의 1로 줄여도 되지만, 핵심 성능은 95% 이상 유지해야 한다.

이런 섬세한 균형감각이야말로 LLM 압축 기술이 단순한 “크기 줄이기”를 넘어선 진정한 엔지니어링 예술이라고 생각하는 이유다.

이 글이 도움됐다면 눌러주세요