익명 사용자
로그인하지 않음
토론
기여
계정 만들기
로그인
IT 위키
검색
신경망 양자화
편집하기
IT 위키
이름공간
문서
토론
더 보기
더 보기
문서 행위
읽기
편집
원본 편집
역사
경고:
로그인하지 않았습니다. 편집을 하면 IP 주소가 공개되게 됩니다.
로그인
하거나
계정을 생성하면
편집자가 사용자 이름으로 기록되고, 다른 장점도 있습니다.
스팸 방지 검사입니다. 이것을 입력하지
마세요
!
모델 양자화(模型量子化, Model Quantization)는 딥러닝 모델의 수치 표현 정밀도를 낮춰 메모리 사용량과 연산량을 줄이는 최적화 기법이다. 주로 대형 언어 모델(LLM)이나 모바일·엣지 디바이스에서 효율적인 추론을 위해 사용된다. ==개요== 딥러닝 모델은 일반적으로 32비트 부동소수점(float32)으로 학습되지만, 추론 시에는 16비트(float16), 8비트(int8), 4비트(int4) 등 더 낮은 정밀도의 형식으로 변환할 수 있다. 이러한 변환을 통해 모델의 크기를 줄이고 연산 속도를 향상시킬 수 있다. ==[[신경망 양자화 기법|양자화 기법]]== *'''후처리 양자화(Post-training Quantization)''': 별도의 학습 없이 훈련된 모델에 양자화 적용 **'''정적 양자화(Static Quantization)''': 학습 이후 전체 모델을 정적으로 양자화하는 방식 **'''동적 양자화(Dynamic Quantization)''': 실행 시점에 가중치나 활성값을 동적으로 양자화 *'''양자화 인식 학습(QAT, Quantization-Aware Training)''': 학습 단계에서 양자화를 고려하여 정확도 손실을 최소화 == 양자화 수준 == 아래 표는 비트 수(정밀도)에 따른 양자화의 단계적 비교를 보여준다. 비트 수가 줄어들수록: * 표현 가능한 숫자 개수가 줄어들고, * 모델 용량은 작아지며, * 속도는 빨라지는 대신 '''정확도는 점차 낮아진다.''' {| 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''' 구간이 가장 균형 잡힌 영역으로 많이 사용됨 === 극단적 양자화 === 양자화의 비트 수를 극단적으로 줄이면 '''Binary''' 또는 '''Ternary''' 형태의 모델이 된다. 이들은 모두 곱셈 연산이 필요 없는 신경망으로, ''multiplication-free DNN'' 구조라고도 불린다. '''Binary Quantization (이진 양자화)''' * 표현 가능한 값: {-1, +1} * 모든 가중치와 활성값이 1비트 부호만으로 표현됨 * 부호 연산(sign)만으로 곱셈 대체 가능 → 매우 빠른 추론 속도 * 모델 크기 약 1/32 수준으로 압축 가능 * 다만, 정밀도 손실이 커서 복잡한 모델에는 부적합 '''Ternary Quantization (삼진 양자화)''' * 표현 가능한 값: {-1, 0, +1} * 0이 포함되어 일부 가중치를 완전히 비활성화 가능 (희소성 확보) * Binary보다 정확도는 향상되지만 여전히 근사 표현에 의존 * 곱셈 대신 단순 부호 비교 및 0 판별만 수행 {| class="wikitable" ! 구분 !! 표현값 !! 비트 수 !! 장점 !! 단점 !! 주요 특징 |- | 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] {| class="wikitable" ! 구분 !! 범위 !! 중심 기준 !! 스케일 계산식 !! 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 모델 제공 ==같이 보기== *[[딥 러닝]] *[[대형 언어 모델]] *[[신경망 가지치기]] *[[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. ==각주== [[분류:인공지능]] [[분류:딥 러닝]]
요약:
IT 위키에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 라이선스로 배포된다는 점을 유의해 주세요(자세한 내용에 대해서는
IT 위키:저작권
문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요.
또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다.
저작권이 있는 내용을 허가 없이 저장하지 마세요!
취소
편집 도움말
(새 창에서 열림)
둘러보기
둘러보기
대문
최근 바뀜
광고
위키 도구
위키 도구
특수 문서 목록
문서 도구
문서 도구
사용자 문서 도구
더 보기
여기를 가리키는 문서
가리키는 글의 최근 바뀜
문서 정보
문서 기록