|
|
| (같은 사용자의 중간 판 3개는 보이지 않습니다) |
| 1번째 줄: |
1번째 줄: |
| 모델 양자화(模型量子化, Model Quantization)는 딥러닝 모델의 수치 표현 정밀도를 낮춰 메모리 사용량과 연산량을 줄이는 최적화 기법이다. 주로 대형 언어 모델(LLM)이나 모바일·엣지 디바이스에서 효율적인 추론을 위해 사용된다.
| | #넘겨주기 [[신경망 양자화]] |
| ==개요==
| |
| 딥러닝 모델은 일반적으로 32비트 부동소수점(float32)으로 학습되지만, 추론 시에는 16비트(float16), 8비트(int8), 4비트(int4) 등 더 낮은 정밀도의 형식으로 변환할 수 있다. 이러한 변환을 통해 모델의 크기를 줄이고 연산 속도를 향상시킬 수 있다.
| |
| ==종류==
| |
| *'''정적 양자화(Static Quantization)''': 학습 이후 전체 모델을 정적으로 양자화하는 방식
| |
| *'''동적 양자화(Dynamic Quantization)''': 실행 시점에 가중치나 활성값을 동적으로 양자화
| |
| *'''양자화 인식 학습(QAT, Quantization-Aware Training)''': 학습 단계에서 양자화를 고려하여 정확도 손실을 최소화
| |
| *'''후처리 양자화(Post-training Quantization)''': 별도의 학습 없이 훈련된 모델에 양자화 적용
| |
| | |
| == 양자화 수준 ==
| |
| 아래 표는 비트 수(정밀도)에 따른 양자화의 단계적 비교를 보여준다. 비트 수가 줄어들수록:
| |
| | |
| * 표현 가능한 숫자 개수가 줄어들고,
| |
| * 모델 용량은 작아지며,
| |
| * 속도는 빨라지는 대신 '''정확도는 점차 낮아진다.'''
| |
| | |
| {| class="wikitable"
| |
| ! 비트 수 !! 표현 가능한 값의 개수 (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''' 구간이 가장 균형 잡힌 영역으로 많이 사용됨.
| |
| == 장단점 ==
| |
| '''장점'''
| |
| *'''모델 크기 감소''': 저장 공간 절감 및 모델 전송 속도 향상
| |
| *'''추론 속도 향상''': CPU 및 GPU에서 더 빠른 연산 가능
| |
| *'''메모리 사용량 감소''': 모바일 및 엣지 디바이스에 적합
| |
| '''단점'''
| |
| *'''정확도 손실''': 정밀도 감소로 인해 예측 정확도가 하락할 수 있음
| |
| *'''하드웨어 제약''': 일부 정밀도(예: int4)는 특정 하드웨어에서만 지원됨
| |
| *'''추가 튜닝 필요''': 양자화 적용 후 정확도 회복을 위한 조정이 요구될 수 있음
| |
| ==활용 사례==
| |
| *대형 언어 모델(LLM)의 로컬 추론(예: GGML, llama.cpp 등)
| |
| *온디바이스 AI 앱에서의 실시간 예측
| |
| *경량화된 AI 모델 배포를 위한 사전 처리 과정
| |
| ==도구 및 프레임워크==
| |
| *PyTorch: torch.quantization, bitsandbytes 등
| |
| *TensorFlow Lite: 정적/동적 양자화 지원
| |
| *ONNX Runtime: 양자화된 ONNX 모델 추론
| |
| *Hugging Face Transformers: 8bit, 4bit 모델 제공
| |
| ==같이 보기==
| |
| *[[딥 러닝]]
| |
| *[[대형 언어 모델]]
| |
| *[[llama.cpp]]
| |
| *[[후처리]]
| |
| *[[모바일 인공지능]]
| |
| ==참고 문헌==
| |
| *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.
| |
| ==각주==
| |
| [[분류:인공지능]]
| |
| [[분류:딥 러닝]]
| |