신경망 양자화: 두 판 사이의 차이
(새 문서: 모델 양자화(模型量子化, Model Quantization)는 딥러닝 모델의 수치 표현 정밀도를 낮춰 메모리 사용량과 연산량을 줄이는 최적화 기법이다. 주로 대형 언어 모델(LLM)이나 모바일·엣지 디바이스에서 효율적인 추론을 위해 사용된다. ==개요== 딥러닝 모델은 일반적으로 32비트 부동소수점(float32)으로 학습되지만, 추론 시에는 16비트(float16), 8비트(int8), 4비트(int4) 등 더 낮...) |
편집 요약 없음 |
||
| 148번째 줄: | 148번째 줄: | ||
*[[딥 러닝]] | *[[딥 러닝]] | ||
*[[대형 언어 모델]] | *[[대형 언어 모델]] | ||
*[[신경망 가지치기]] | |||
*[[llama.cpp]] | *[[llama.cpp]] | ||
==참고 문헌== | ==참고 문헌== | ||
*Jacob, B. et al. (2018). Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference. ''CVPR''. | *Jacob, B. et al. (2018). Quantization and Training of Neural Networks for Efficient Integer-Arithmetic-Only Inference. ''CVPR''. | ||
2025년 10월 9일 (목) 01:13 판
모델 양자화(模型量子化, Model Quantization)는 딥러닝 모델의 수치 표현 정밀도를 낮춰 메모리 사용량과 연산량을 줄이는 최적화 기법이다. 주로 대형 언어 모델(LLM)이나 모바일·엣지 디바이스에서 효율적인 추론을 위해 사용된다.
개요
딥러닝 모델은 일반적으로 32비트 부동소수점(float32)으로 학습되지만, 추론 시에는 16비트(float16), 8비트(int8), 4비트(int4) 등 더 낮은 정밀도의 형식으로 변환할 수 있다. 이러한 변환을 통해 모델의 크기를 줄이고 연산 속도를 향상시킬 수 있다.
양자화 기법
- 정적 양자화(Static Quantization): 학습 이후 전체 모델을 정적으로 양자화하는 방식
- 동적 양자화(Dynamic Quantization): 실행 시점에 가중치나 활성값을 동적으로 양자화
- 양자화 인식 학습(QAT, Quantization-Aware Training): 학습 단계에서 양자화를 고려하여 정확도 손실을 최소화
- 후처리 양자화(Post-training Quantization): 별도의 학습 없이 훈련된 모델에 양자화 적용
양자화 수준
아래 표는 비트 수(정밀도)에 따른 양자화의 단계적 비교를 보여준다. 비트 수가 줄어들수록:
- 표현 가능한 숫자 개수가 줄어들고,
- 모델 용량은 작아지며,
- 속도는 빨라지는 대신 정확도는 점차 낮아진다.
| 비트 수 | 표현 가능한 값의 개수 (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 일 때:
- 클리핑 (-L, L) = (-2, 2)
- Xc = [1.1, 2.0, -0.3, 0.8]
- 스케일 계산 s = 2L / (2^b - 2) = 4 / 6 = 0.667
- 정수화 Xint = round(Xc / s) = [2, 3, 0, 1]
- 복원 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.