신경망 양자화: 두 판 사이의 차이

IT 위키
편집 요약 없음
편집 요약 없음
 
3번째 줄: 3번째 줄:
딥러닝 모델은 일반적으로 32비트 부동소수점(float32)으로 학습되지만, 추론 시에는 16비트(float16), 8비트(int8), 4비트(int4) 등 더 낮은 정밀도의 형식으로 변환할 수 있다. 이러한 변환을 통해 모델의 크기를 줄이고 연산 속도를 향상시킬 수 있다.
딥러닝 모델은 일반적으로 32비트 부동소수점(float32)으로 학습되지만, 추론 시에는 16비트(float16), 8비트(int8), 4비트(int4) 등 더 낮은 정밀도의 형식으로 변환할 수 있다. 이러한 변환을 통해 모델의 크기를 줄이고 연산 속도를 향상시킬 수 있다.
==[[신경망 양자화 기법|양자화 기법]]==
==[[신경망 양자화 기법|양자화 기법]]==
*'''정적 양자화(Static Quantization)''': 학습 이후 전체 모델을 정적으로 양자화하는 방식
*'''후처리 양자화(Post-training Quantization)''': 별도의 학습 없이 훈련된 모델에 양자화 적용
*'''동적 양자화(Dynamic Quantization)''': 실행 시점에 가중치나 활성값을 동적으로 양자화
**'''정적 양자화(Static Quantization)''': 학습 이후 전체 모델을 정적으로 양자화하는 방식
**'''동적 양자화(Dynamic Quantization)''': 실행 시점에 가중치나 활성값을 동적으로 양자화
*'''양자화 인식 학습(QAT, Quantization-Aware Training)''': 학습 단계에서 양자화를 고려하여 정확도 손실을 최소화
*'''양자화 인식 학습(QAT, Quantization-Aware Training)''': 학습 단계에서 양자화를 고려하여 정확도 손실을 최소화
*'''후처리 양자화(Post-training Quantization)''': 별도의 학습 없이 훈련된 모델에 양자화 적용


== 양자화 수준 ==
== 양자화 수준 ==

2025년 10월 23일 (목) 03:36 기준 최신판

모델 양자화(模型量子化, Model Quantization)는 딥러닝 모델의 수치 표현 정밀도를 낮춰 메모리 사용량과 연산량을 줄이는 최적화 기법이다. 주로 대형 언어 모델(LLM)이나 모바일·엣지 디바이스에서 효율적인 추론을 위해 사용된다.

개요[편집 | 원본 편집]

딥러닝 모델은 일반적으로 32비트 부동소수점(float32)으로 학습되지만, 추론 시에는 16비트(float16), 8비트(int8), 4비트(int4) 등 더 낮은 정밀도의 형식으로 변환할 수 있다. 이러한 변환을 통해 모델의 크기를 줄이고 연산 속도를 향상시킬 수 있다.

양자화 기법[편집 | 원본 편집]

  • 후처리 양자화(Post-training Quantization): 별도의 학습 없이 훈련된 모델에 양자화 적용
    • 정적 양자화(Static Quantization): 학습 이후 전체 모델을 정적으로 양자화하는 방식
    • 동적 양자화(Dynamic Quantization): 실행 시점에 가중치나 활성값을 동적으로 양자화
  • 양자화 인식 학습(QAT, Quantization-Aware Training): 학습 단계에서 양자화를 고려하여 정확도 손실을 최소화

양자화 수준[편집 | 원본 편집]

아래 표는 비트 수(정밀도)에 따른 양자화의 단계적 비교를 보여준다. 비트 수가 줄어들수록:

  • 표현 가능한 숫자 개수가 줄어들고,
  • 모델 용량은 작아지며,
  • 속도는 빨라지는 대신 정확도는 점차 낮아진다.
비트 수 표현 가능한 값의 개수 (2^b) 예시 표현 값 (대칭형, L=2 기준) 1B 파라미터 기준 모델 용량 (대략) 대표 사용 예시
2bit 4개 {-2.0, -0.67, +0.67, +2.0} 약 0.25 GB 테스트용, 초경량 모델
3bit 8개 {-2.0, -1.43, -0.86, -0.29, +0.29, +0.86, +1.43, +2.0} 약 0.38 GB 실험용, 경량 챗봇
4bit 16개 {-2.0, -1.71, -1.43, … , +1.43, +1.71, +2.0} 약 0.5 GB LLM 로컬 추론, llama.cpp 기본
5bit 32개 균등 32단계 (-L~+L) 약 0.63 GB 고정밀 경량 모델
8bit 256개 FP32 근사 수준 (-L~+L) 약 1.0 GB 일반적인 INT8 추론, TFLite/ONNX
16bit 65,536개 거의 float 수준 약 2.0 GB FP16 추론 (GPU)
32bit 약 4.3×10^9개 완전 부동소수점 약 4.0 GB FP32 학습 (기본)

예시: 3비트 양자화[편집 | 원본 편집]

가중치 X = [1.1, 2.4, -0.3, 0.8] 비트 수 b = 3, 범위 L = 2 일 때:

  1. 클리핑 (-L, L) = (-2, 2)
    • Xc = [1.1, 2.0, -0.3, 0.8]
  1. 스케일 계산 s = 2L / (2^b - 2) = 4 / 6 = 0.667
  2. 정수화 Xint = round(Xc / s) = [2, 3, 0, 1]
  3. 복원 Xq = s × Xint = [1.33, 2.0, 0.0, 0.67]

결과적으로, 원래의 실수 벡터가 3비트 정밀도의 8단계 정수 레벨로 근사되어 표현된다.

  • 0 근처의 작은 값들은 0으로 흡수되며, 이로 인해 일부 정보 손실(Quantization Error)이 발생하지만
  • 추론 속도와 메모리 사용량은 대폭 감소한다.

일반적 경향[편집 | 원본 편집]

  • 비트 수가 감소할수록 → 모델 크기 작아지고, 추론 속도 빨라짐
  • 비트 수가 증가할수록 → 정밀도와 정확도 향상, 메모리 사용량 증가
  • 실무에서는 4bit~8bit 구간이 가장 균형 잡힌 영역으로 많이 사용됨

극단적 양자화[편집 | 원본 편집]

양자화의 비트 수를 극단적으로 줄이면 Binary 또는 Ternary 형태의 모델이 된다. 이들은 모두 곱셈 연산이 필요 없는 신경망으로, multiplication-free DNN 구조라고도 불린다.

Binary Quantization (이진 양자화)

  • 표현 가능한 값: {-1, +1}
  • 모든 가중치와 활성값이 1비트 부호만으로 표현됨
  • 부호 연산(sign)만으로 곱셈 대체 가능 → 매우 빠른 추론 속도
  • 모델 크기 약 1/32 수준으로 압축 가능
  • 다만, 정밀도 손실이 커서 복잡한 모델에는 부적합

Ternary Quantization (삼진 양자화)

  • 표현 가능한 값: {-1, 0, +1}
  • 0이 포함되어 일부 가중치를 완전히 비활성화 가능 (희소성 확보)
  • Binary보다 정확도는 향상되지만 여전히 근사 표현에 의존
  • 곱셈 대신 단순 부호 비교 및 0 판별만 수행
구분 표현값 비트 수 장점 단점 주요 특징
Binary {-1, +1} 1bit 곱셈 제거, 초고속 정확도 낮음 완전 부호 기반 연산
Ternary {-1, 0, +1} 2bit 희소성, 약간의 정확도 향상 여전히 근사치 큼 일부 weight=0 가능

이러한 극단적 양자화는 일반적인 LLM보다는 경량 비전 모델, 임베디드 기기, 또는 저전력 환경에서의 실험용 신경망에 주로 사용된다.

대칭 양자화 vs 비대칭 양자화[편집 | 원본 편집]

양자화 방식은 스케일(scale)을 중심값 0 기준으로 잡느냐, 혹은 임의의 최소·최대값 기준으로 잡느냐에 따라 대칭형(Symmetric)비대칭형(Asymmetric) 으로 구분된다.

대칭 양자화 (Symmetric Quantization)[편집 | 원본 편집]

  • 클리핑 범위: (-L, L)
  • 0을 중심으로 양쪽이 대칭
  • 스케일 계산: s = 2L / (2^b - 2)
  • 정수 변환: x_int = round(x / s)
  • 복원: x_q = s × x_int
  • 0이 항상 정수 표현 내에 존재하므로 계산 단순
  • 주로 가중치(weight) 양자화에 사용됨

예시: 실수 X = [1.1, 2.4, -0.3, 0.8], 비트 수 b=3, L=2 → 스케일 s = 4 / 6 = 0.667 → 정수화 Xint = [2, 3, 0, 1] → 복원 Xq = [1.33, 2.0, 0.0, 0.67]

비대칭 양자화 (Asymmetric Quantization)[편집 | 원본 편집]

  • 클리핑 범위: (Lmin, Lmax)
  • 데이터 분포가 0 기준으로 비대칭일 때 사용 (예: ReLU 이후 활성값)
  • 스케일 계산: s = (Lmax - Lmin) / (2^b - 1)
  • 정수 변환: x_int = round((x - Lmin) / s)
  • 복원: x_q = s × x_int + Lmin
  • 0이 반드시 정수로 표현되지 않으며, zero point(제로포인트) 관리가 필요
  • 주로 활성값(activation) 양자화에 사용됨

예시: X = [1.1, 2.4, -0.3, 0.8], Lmax=2, Lmin=-0.5, b=3 → s = (2 - (-0.5)) / 7 = 0.357 → x_int = [4, 7, 1, 4] → x_q = [0.93, 2.0, -0.14, 0.93]

구분 범위 중심 기준 스케일 계산식 0의 표현 여부 주요 사용처
대칭형 (-L, L) 0 중심 2L / (2^b - 2) 항상 존재 가중치
비대칭형 (Lmin, Lmax) 데이터 분포 중심 (Lmax - Lmin)/(2^b - 1) 존재하지 않을 수도 있음 활성값

요약하면,

  • 대칭형은 계산이 단순하고 하드웨어 구현이 용이하지만 음수·양수 분포를 가정한다.
  • 비대칭형은 실제 데이터 분포를 더 잘 반영하지만, 스케일과 제로포인트를 함께 관리해야 한다.

장단점[편집 | 원본 편집]

장점

  • 모델 크기 감소: 저장 공간 절감 및 모델 전송 속도 향상
  • 추론 속도 향상: CPU 및 GPU에서 더 빠른 연산 가능
  • 메모리 사용량 감소: 모바일 및 엣지 디바이스에 적합

단점

  • 정확도 손실: 정밀도 감소로 인해 예측 정확도가 하락할 수 있음
  • 하드웨어 제약: 일부 정밀도(예: int4)는 특정 하드웨어에서만 지원됨
  • 추가 튜닝 필요: 양자화 적용 후 정확도 회복을 위한 조정이 요구될 수 있음

활용 사례[편집 | 원본 편집]

  • 대형 언어 모델(LLM)의 로컬 추론(예: GGML, llama.cpp 등)
  • 온디바이스 AI 앱에서의 실시간 예측
  • 경량화된 AI 모델 배포를 위한 사전 처리 과정

도구 및 프레임워크[편집 | 원본 편집]

  • PyTorch: torch.quantization, bitsandbytes 등
  • TensorFlow Lite: 정적/동적 양자화 지원
  • ONNX Runtime: 양자화된 ONNX 모델 추론
  • Hugging Face Transformers: 8bit, 4bit 모델 제공

같이 보기[편집 | 원본 편집]

참고 문헌[편집 | 원본 편집]

  • Jacob, B. et al. (2018). Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference. CVPR.
  • Zhang, S. et al. (2020). Accelerating Deep Learning Inference via Quantization. arXiv preprint.
  • Hugging Face. (2023). 8-bit and 4-bit quantization in Transformers.

각주[편집 | 원본 편집]