AI Architecture 6. INT8 양자화(Quantization) 기초

지난 글에서 우리는 데이터 포맷(Number Format)의 차이가 하드웨어의 면적과 전력 소모에 미치는 영향을 확인했습니다. FP32는 INT8보다 하드웨어 입장에서 너무나 비싸고 무거운 존재였습니다. 이번에는 이 무거운 데이터를 줄이는 기술인 양자화(Quantization)에 대해 본격적으로 이야기하려 합니다.

많은 분들이 양자화를 단순히 모델 파일 용량을 줄여주는 압축 기술 정도로 생각합니다. 물론 용량이 줄어드는 건 맞습니다, 하지만 하드웨어 엔지니어가 양자화에 목숨을 거는 진짜 이유는 따로 있습니다. 바로 대역폭(Bandwidth)데이터 이동(Data Movement) 때문입니다.

이번 글에서는 FP32(32-bit Floating Point)가 INT8(8-bit Integer)로 변할 때, 칩 내부에서 어떤 물리적 이득이 발생하며, 그 대가로 우리는 무엇을 잃게 되는지(Trade-off)를 냉정하게 분석해 보겠습니다.

1. 대역폭(Bandwidth)의 변화: 도로를 4배로 넓히는 효과

시스템 성능을 제한하는 가장 큰 병목은 주로 메모리입니다(Memory Wall). 여러분이 최신 LPDDR5 메모리를 써서 초당 50GB의 데이터를 NPU로 보낼 수 있다고 가정해 봅시다.

  • FP32 사용 시: 파라미터 하나가 4 Byte(32 bits)입니다. 초당 전송 가능한 파라미터 수는 50{GB} / 4{B} = 12.5{Billion}개입니다.
  • INT8 사용 시: 파라미터 하나가 1 Byte(8 bits)입니다. 초당 전송 가능한 파라미터 수는 50 {GB} / 1{B} = 50{Billion}개입니다.

물리적인 메모리 속도를 높이지 않았음에도 불구하고, 데이터의 크기를 1/4로 줄임으로써 실질적인 데이터 전송량(Throughput)이 4배로 올라가는 효과를 얻습니다.

이는 단순히 속도만 빨라지는 것이 아닙니다. 칩 내부의 SRAM 용량 효율도 4배 좋아집니다. 4MB짜리 캐시에 FP32 모델은 100만 개의 파라미터밖에 못 담지만, INT8 모델은 400만 개의 파라미터를 담을 수 있습니다. 이는 값비싼 DRAM 접근 횟수를 획기적으로 줄여주어 전력 효율을 극대화합니다.

2. 양자화의 원리

그렇다면 실수는 어떻게 정수가 될까요? 가장 널리 쓰이는 방식은 Affine Quantization (Asymmetric Quantization)입니다.

xint=round(xfloatS)+Zx_{int} = \text{round} \left( \frac{x_{float}}{S} \right) + Z
xdequant=S×(xintZ)x_{dequant} = S \times (x_{int} – Z)
  • xfloat: 원래의 실수값 (입력)
  • S (Scale Factor): 실수의 구간을 정수 한 칸에 얼마나 담을지 결정하는 배율 (Step Size)
  • Z (Zero Point): 실수의 0점이 정수의 어디에 매핑될지 결정하는 오프셋
  • xint: 변환된 정수값 (INT8의 경우 -128 ~ 127 또는 0 ~ 255)

쉽게 비유하자면, 고해상도 아날로그 자(Ruler)의 눈금을 듬성듬성한 디지털 눈금으로 바꾸는 과정입니다. 이 과정에서 필연적으로 오차가 발생합니다.

Quantization
Quantization

3. Trade-off: 양자화 잡음 (Quantization Noise)

FP32를 INT8로 변환할 때 발생하는 오차를 Quantization Noise이라고 합니다.

32비트 부동소수점은 약 10-45 수준의 미세한 숫자 차이도 표현할 수 있습니다. 하지만 INT8은 표현할 수 있는 숫자가 고작 256개(28)뿐입니다. 예를 들어 0.1과 0.11이 양자화 후에는 똑같이 정수 10으로 매핑될 수도 있습니다.

이때 발생하는 정보의 손실은 모델의 정확도(Accuracy) 하락으로 이어집니다.

  • Rounding Error: 반올림하면서 생기는 오차.
  • Clipping Error: 표현 범위를 벗어난 큰 값(Outlier)을 강제로 최댓값/최솟값으로 자르면서 생기는 오차.

Architect’s Insight:

하드웨어 엔지니어는 항상 이 trade-off를 고민합니다. “정확도 1%를 희생하고 속도를 4배 올릴 것인가?”

다행히 딥러닝 모델은 노이즈에 대한 내성(Robustness)이 강합니다. 강아지 사진에 약간의 노이즈가 껴도 여전히 강아지로 인식하는 것처럼, 가중치에 약간의 양자화 잡음이 섞여도 최종 결과에는 큰 영향을 주지 않는 경우가 많습니다. 이것이 우리가 과감하게 FP32를 버릴 수 있는 근거입니다.

4. 동적 범위(Dynamic Range)와 교정(Calibration)

양자화의 핵심 기술은 어디서부터 어디까지를 256개로 쪼갤 것인가?를 정하는 것입니다. 이를 Calibration이라고 합니다.

  • Min-Max: 데이터의 최솟값과 최댓값을 기준으로 범위를 잡습니다. 구현이 쉽지만, 이상치(Outlier) 하나 때문에 전체 정밀도가 망가질 수 있습니다.
  • Entropy/Histogram: 데이터가 많이 몰려있는 구간을 중심으로 범위를 잡고, 나머지는 과감히 잘라버립니다(Clipping). 정보 손실을 최소화하는 스마트한 방식입니다.

하드웨어 가속기는 보통 이 Scale Factor(S)와 Zero Point(Z)를 레이어마다(Layer-wise) 혹은 채널마다(Channel-wise) 따로 관리하여 정밀도를 보존합니다.

5. 결론: 잃는 것보다 얻는 것이 많다

FP32에서 INT8로 가는 길은 잃는 것(정밀도)이 분명히 존재합니다. 하지만 그로 인해 얻는 하드웨어적 이득(대역폭 4배, 전력 효율 상승, 면적 절감)은 실로 막대합니다.

현대의 AI 반도체는 이제 단순한 INT8을 넘어 INT4, 심지어 1-bit(Binary) 양자화까지 도전하고 있습니다. 최소한의 비트 수로 지능을 표현하는 것, 그것이 바로 NPU 하드웨어 엔지니어의 궁극적인 지향점이기 때문입니다.

참고: Quantization for Neural Networks

Similar Posts