728x90
* 아래 블로그를 보고 공부하며 작성했습니다.
https://gaussian37.github.io/dl-concept-quantization/#quantization-%EC%9D%B4%EB%9E%80-1
양자화란 모델의 파라미터를 lower bit로 표현함으로서 계산과 메모리 access 속도를 높이는 경량화 기법이다. 실수형 변수를 정수형 변수로 변환하는데, 보통 FP32 타입을 INT8 타입 형태로 변환하는 방법을 사용한다.
Weight Quantization
5가지 전제조건
- Inference Only
양자화는 inference에서만 사용한다. 양자화는 학습 속도를 빠르게 하기 위한 기술이 아니고, 학습이 끝난 모델을 작게 만들어서 추론 과정을 더 빠르고 효율적으로 만들어주는 기술이다. 따라서 학습 시간을 줄여주는 것과는 관련이 없다. (학습 단계에서는 양자화를 사용하지 않고 고정밀도의 데이터를 사용해서 진행된다.) - Not every layer can be quantized
모든 레이어에서 양자화를 적용할 수 있는 것은 아니다. 딥러닝 모델의 각 레이어는 저마다 역할과 계산 방식이 다르기에 양자화를 진행했을 때 정확도가 크게 떨어지는 레이어도 존재한다. 또한 Pythorch 같은 Framework에서 아직 모든 레이어를 양자화하는 기능을 제공하지는 않는다. 따라서 레이어 자체의 특수성으로 인해, 기술적으로 프레임워크가 지원해주느냐에 따라 양자화가 불가할 수 있다. - Not every model reacts the same way to quantization
모델은 여러 레이어의 조합으로 이루어져 있고, 레이어마다 양자화에 대한 반응이 다르기에 모델 별로 양자화 효과는 다양하게 나타날 수 있다. 어떤 모델은 양자화를 적용해도 정확도가 거의 떨어지지 않을 수 있지만, 어떤 모델은 오히려 반대로 정확도가 크게 떨어질 수 있다. - Most available implementations are CPU only
GPU는 보통 32비트의 고정밀도 연산을 잘 처리하도록 설계되어 있기에 GPU가 아닌 CPU에서만 양자화를 사용할 수 있다. 메모리와 계산 효율성을 높이기 위해 만들어졌지만 아직 CPU에서만 처리가 가능하다는 한계점이 있다.
양자화의 6가지 단계
- Model Fusion
여러 레이어를 하나의 연산 단위로 묶어주는 과정이다. 각각의 레이어에서 양자화를 진행하는 대신 레이어를 묶어서 한 번에 양자화를 진행하는 것이다. 각각의 양자화가 적용된 레이어를 거칠 때 정확도가 점차 감소하는데, 이에 비해 한 번에 양자화를 진행한 경우 정확도가 감소하는 정도가 더 적다. { CONV2D - BATCHNORM - RELU } 를 한 쌍으로 묶어서 한 번에 양자화를 진행하는 방법이 대표적이라고 한다. - Formula Definition
양자화 과정에서 숫자를 변환하는 수학적 공식을 정의하는 단계이다. 보통 FP32를 INT8로 변환한다.
1) Uniform Quantization (균일 양자화)
데이터 값을 일정 간격(스케일 s)로 나눠서 매핑
INT8의 고정 범위 [-128,127] 안에 모든 FP32 값을 매핑
2) Non-Uniform Quantization (비균일 양자화)
데이터 값이 특정 구간에 더 집중될 때 사용한다. 정수 값의 간격이 일정하지 않아 특수한 데이터 분포를 처리할 수 있다. - Hardware Deployment
하드웨어마다 양자화를 지원하는 방식이 다르기 때문에 양자화된 모델을 실행하려는 하드웨어의 특성에 맞게 조정하는 과정이다. 대표적으로 인텔 칩을 사용하는 경우에는 히스토그램 방식을 이용, ARM 칩을 이용하려는 경우 MinMax 방식을 사용한다. - Dataset Calibration
Data Calibration이란 양자화를 위해 데이터의 범위와 분포를 측정하여 최적의 양자화 파라미터(스케일, 제로포인트)를 결정하는 과정을 말한다. 이 단계를 통해 모델의 정확도를 최대한 유지하면서 INT8 같은 저정밀 연산으로 변환한다. - Weight Conversion
실제 Weight를 FP 에서 INT로 변환한다. - Dequantization
다시 INT를 FP로 변환한다.
잘 정리된 블로그
728x90
반응형
'엣지컴퓨팅' 카테고리의 다른 글
[논문 읽기] Evaluating Quantized Large Language Models (2) | 2024.12.02 |
---|---|
[논문 읽기] How Does Quantization Affect Multilingual LLMs? (1) | 2024.11.27 |
Llama3 한국어 요약 task 실습 (Colab) (12) | 2024.11.08 |
LLaMA2의 GQA 코드 살펴보기 (1) | 2024.10.30 |
[논문 읽기] LLaMA: Open and Efficient Foundation Language Models (4) | 2024.10.14 |