본문 바로가기
Model Lightening/Model Compression

AI 모델 양자화 기초 [1] - 왜 양자화가 필요한가

by Sangwoo Seo 2026. 2. 15.

왜 양자화가 필요한가?

딥러닝 모델의 크기는 기하급수적으로 증가하고 있습니다. 2018년 BERT-base는 110M 파라미터였지만, 2020년 GPT-3는 175B 파라미터, 2023년 등장한 GPT-4는 추정 1.7조 개가 넘는 파라미터를 가진 것으로 알려져 있습니다. 문제는 이런 모델들이 기본적으로 32비트 부동소수점(FP32) 형식으로 학습되고 저장된다는 점입니다.

1. 메모리 병목: 실제 숫자로 보는 문제의 심각성

FP32는 각 파라미터당 4바이트(32비트)를 차지합니다. 간단한 곱셈만으로도 문제의 규모가 드러납니다.

  • GPT-3 (175B 파라미터): 175 × 10^9 × 4 bytes = 700GB
  • LLaMA-2 70B: 70 × 10^9 × 4 bytes = 280GB
  • Stable Diffusion XL (3.5B): 3.5 × 10^9 × 4 bytes = 14GB

이게 단순히 모델 가중치만의 문제가 아닙니다. 추론 시에는 중간 활성화 값(intermediate activations)도 메모리에 저장해야 하기 때문에, 실제 필요한 메모리는 훨씬 더 큽니다. 예를 들어 Transformer 모델의 경우, batch size 1로 추론할 때도 모델 크기의 1.5~2배 메모리가 필요합니다.

중간 활성화 값(Intermediate Activations)이 메모리에 저장되는 이유

추론 과정을 단계별로 보면 이해가 쉽습니다. 간단한 3층 신경망을 예로 들어보겠습니다.

Input → Layer 1 → [Activation 1] → Layer 2 → [Activation 2] → Layer 3 → Output

 

결론적으로, 각 레이어의 출력은 다음 레이어의 입력이기 때문에 메모리에 저장해야 합니다. Layer 1이 계산을 끝내면 그 결과(Activation 1)를 메모리에 저장해야 Layer 2가 이 값을 입력으로 받고 Layer 2의 계산이 끝날 때까지 이 값이 필요합니다. Layer 2도 마찬가지로, 자신의 출력(Activation 2)을 메모리에 저장해야 Layer 3가 사용할 수 있습니다.

구체적인 예시: ResNet-50의 메모리 사용량

ResNet-50으로 224×224 이미지 1장을 추론한다고 가정해봅시다.

 

모델 파라미터 메모리:

  • 25M 파라미터 × 4 bytes = 100MB

중간 활성화 값 메모리 (batch size=1):

  • 입력 이미지: 224×224×3 × 4 bytes = 0.6MB
  • Conv1 출력: 112×112×64 × 4 bytes = 3.2MB
  • Layer1 출력: 56×56×256 × 4 bytes = 3.2MB
  • Layer2 출력: 28×28×512 × 4 bytes = 1.6MB
  • Layer3 출력: 14×14×1024 × 4 bytes = 0.8MB
  • Layer4 출력: 7×7×2048 × 4 bytes = 0.4MB
  • 합계: 약 10MB

총 메모리 = 100MB(파라미터) + 10MB(활성화) = 약 110MB, 이건 batch size가 1일 때입니다. batch size가 32라면?

  • 활성화 메모리: 10MB × 32 = 320MB
  • 총 메모리: 100MB + 320MB = 420MB

모델 크기의 4배가 넘는 메모리가 필요합니다.

더 극단적인 예: Transformer의 경우

GPT-3 (175B 파라미터)를 예로 들면, 

파라미터 메모리:

  • 175B × 4 bytes = 700GB

추론 시 활성화 메모리 (sequence length=2048, batch size=1):

  • Self-Attention 과정에서 Key, Value, Query 텐서 저장 필요
  • 각 레이어마다 Attention Score matrix: 2048×2048 저장
  • 96개 레이어 × 여러 중간 텐서 = 약 200~300GB

총 메모리 필요량: 700GB + 250GB = 약 950GB, 모델 크기의 1.35배 정도입니다.

왜 활성화 값을 바로 삭제하지 않는가?

"Layer 1의 계산이 끝나면 Activation 1을 바로 삭제하면 되지 않나요?"라고 생각할 수 있습니다. 일부는 삭제할 수 있지만, 모든 활성화 값을 바로 삭제할 수 없는 이유가 있습니다.

 

1. Residual Connection (잔차 연결)

x → Layer 1 → a1 → Layer 2 → a2
                         ↓                         ↓
                        └──  (+)  ──┘ 여기서 a1이 다시 필요

 

ResNet 같은 구조에서는 이전 레이어의 출력을 나중에 다시 더해야 하므로, 그때까지 메모리에 보관해야 합니다.

 

2. Skip Connection

x → Layer 1 → a1 → Layer 2 → a2 → Layer 3
                         ↓                                      ↓
                        └───  (concat)  ──┘ 여기서 a1이 다시 필요!
 

U-Net 같은 구조는 초반 레이어의 출력을 후반 레이어와 결합하므로, 한참 동안 메모리에 유지해야 합니다.

 

3. Attention Mechanism

Input → Q, K, V 모두 계산
                         ↓
              Q, K, V를 모두 메모리에 저장해둔 상태에서 Attention(Q, K, V) 계산
 
Q, K, V를 순차적으로 계산한 후, 이 세 개를 동시에 사용해서 Attention을 계산해야 하므로, 모두 메모리에 저장되어 있어야 합니다.

양자화가 활성화 값 메모리에 미치는 영향

양자화의 장점은 모델 파라미터뿐만 아니라 추론 과정에서 생성되는 모든 중간 활성화 값에도 동일하게 적용된다는 점입니다.

 

FP32 → INT8 양자화를 하면:

  • 파라미터 메모리: 4분의 1로 감소
  • 활성화 값 메모리: 4분의 1로 감소

ResNet-50 예시를 다시 보면:

  • FP32: 100MB + 10MB = 110MB
  • INT8: 25MB + 2.5MB = 27.5MB (4분의 1)

GPT-3 예시:

  • FP32: 700GB + 250GB = 950GB
  • INT8: 175GB + 62.5GB = 237.5GB (4분의 1)

이렇게 메모리가 줄어든다면, 추론에 사용될 GPU 수도 줄일 수도 있다는 의미이기도 합니다.

현실 세계의 하드웨어 제약

이제 이 숫자들이 실제 하드웨어와 얼마나 동떨어져 있는지 보겠습니다.

 

클라우드 환경에서도 문제는 심각합니다. 가장 성능 좋은 NVIDIA A100 GPU는 80GB HBM2e 메모리를 탑재하고 있습니다. 그런데 GPT-3를 추론하려면 950GB가 필요하니, 최소 12개의 A100 GPU가 필요합니다. 비용으로 환산하면 시간당 수십만 원에 달하는 클라우드 비용이 발생하죠.

 

모바일 디바이스는 훨씬 더 제한적입니다. 최신 iPhone 15 Pro가 8GB RAM을 탑재하고 있지만, 운영체제와 다른 앱들이 사용하는 메모리를 제외하면 AI 모델에 할당할 수 있는 메모리는 3~4GB 수준입니다. Stable Diffusion XL은 파라미터만 14GB인데, 활성화 값까지 고려하면 약 20GB가 필요합니다. 현재 기술로는 모바일에서 실행 자체가 불가능한 것이죠.

 

엣지 디바이스는 더욱 열악합니다. IoT 디바이스나 임베디드 시스템에 많이 사용되는 Raspberry Pi 4는 4~8GB RAM을 가지고 있습니다. 중소형 모델조차 버거운 환경입니다.

2. 연산량 문제: 하드웨어가 선호하는 것

메모리만의 문제가 아닙니다. FP32 연산은 하드웨어 입장에서 매우 복잡한 작업입니다. 부동소수점 연산은 지수부와 가수부를 별도로 처리해야 하고, 정규화(normalization) 과정도 필요합니다. 반면 정수 연산은 단순한 덧셈과 곱셈만으로 충분합니다. 실제 하드웨어 성능을 비교해보면:

Google TPU v4:

  • INT8 연산: 275 TOPS (Tera Operations Per Second)
  • FP32 연산: 70 TFLOPS
  • 4배 차이

NVIDIA A100 GPU:

  • INT8 Tensor Core: 624 TOPS
  • FP32 Tensor Core: 156 TFLOPS
  • 4배 차이

Apple M2 Neural Engine:

  • INT8 연산에 최적화
  • FP32 대비 약 8배 빠른 처리량

이 차이는 단순히 클럭 속도의 문제가 아닙니다. 같은 칩 면적, 같은 전력 예산 안에서 INT8 연산 유닛을 FP32보다 훨씬 더 많이 집적할 수 있기 때문입니다. 하드웨어 설계 자체가 정수 연산에 유리하게 되어 있는 것입니다.

3. 에너지 효율: 배터리가 중요한 세상

모바일이나 IoT 환경에서는 배터리 수명이 모든 것을 결정합니다. 연산 에너지 소비를 비교한 Horowitz 등의 2014년 연구에 따르면,

45nm 공정 기준 에너지 소비:

  • 32비트 FP 곱셈: 3.7 pJ (picojoule)
  • 8비트 INT 곱셈: 0.2 pJ
  • 18배 차이

메모리 접근 에너지:

  • 32비트 DRAM 읽기: 640 pJ
  • 8비트 DRAM 읽기: 160 pJ
  • 4배 차이

실제 시나리오로 환산하면, 스마트폰에서 이미지 분류 모델을 1000번 실행할 때:

  • FP32: 배터리 약 5% 소모
  • INT8: 배터리 약 1% 소모

이 차이가 누적되면 "하루 종일 쓸 수 있는 폰"과 "반나절만에 충전이 필요한 폰"으로 갈립니다.

구체적 사례: 실제 적용 결과

실제 벤치마크 결과를 보겠습니다.

 

BERT-base (110M 파라미터):

  • 모델 크기: 440MB → 110MB (75% 절감)
  • 추론 시간: 45ms → 18ms (CPU) (2.5배 향상)
  • 정확도: 92.8% → 92.2% (0.6%p 손실)

MobileNetV2 (3.5M 파라미터):

  • 모델 크기: 14MB → 3.5MB (75% 절감)
  • 추론 시간: 8ms → 3ms (모바일 NPU) (2.7배 향상)
  • Top-1 정확도: 72.0% → 71.8% (0.2%p 손실)

ResNet-50 (25M 파라미터):

  • 모델 크기: 98MB → 25MB (74% 절감)
  • 추론 시간: 22ms → 9ms (GPU) (2.4배 향상)
  • Top-1 정확도: 76.1% → 75.9% (0.2%p 손실)

패턴이 보입니다:

  • 모델 크기 4분의 1로 감소
  • 추론 속도 2~3배 향상
  • 정확도 손실 1% 미만

이것이 바로 양자화의 힘입니다. 지금까지 살펴본 것처럼, 현대 딥러닝 모델이 직면한 문제는 단순히 "모델이 크다"는 것만이 아닙니다.

 

메모리 측면에서는 모델 파라미터뿐만 아니라 추론 과정의 중간 활성화 값까지 합치면 실제 필요한 메모리는 모델 크기의 1.5~2배에 달합니다. GPT-3 같은 대규모 모델은 거의 1TB에 가까운 메모리가 필요한데, 이는 수십 개의 GPU를 동원해야 하는 수준입니다.

 

연산량 측면에서는 FP32 연산이 INT8 연산보다 4~8배 느리고, 하드웨어 설계 자체가 정수 연산에 유리하게 되어 있습니다. 같은 칩 면적과 전력으로 더 많은 INT8 연산 유닛을 집적할 수 있기 때문입니다.

 

에너지 효율 측면에서는 FP32 곱셈이 INT8 곱셈보다 18배나 많은 에너지를 소비하며, 메모리 접근까지 고려하면 그 차이는 더욱 커집니다. 이는 모바일과 엣지 환경에서 "실용적인 AI"와 "불가능한 AI"를 가르는 결정적 요인입니다.

 

하지만 실제 적용 사례를 보면, INT8 양자화는 모델 크기를 4분의 1로 줄이고, 추론 속도를 2~3배 향상시키면서도 정확도 손실은 1% 미만에 그칩니다. 그렇다면 어떻게 이런 일이 가능한 걸까요? 42억 개의 FP32 값을 256개의 INT8 값으로 매핑하면서도 성능을 유지할 수 있는 방법은 무엇일까요? 다음 글에서는 양자화의 본질, 즉 "연속적인 값을 이산적인 값으로 변환하는 과정"을 깊이 있게 살펴보겠습니다.