끄적/모델 최적화 및 경량화

Quantization 2 : Quantization Mapping 기법들

uvumbu 2024. 12. 27. 11:48

Quantization Mapping 기법들에 대해 알아보자.

 

 

Absmax Quantization

Scale factor에 해당하는 s와 Zero - point 에 해당하는 z만 구하면 모든 값들을 양자화 및 역양자화를 할 수 있다.

(X : 원본 값, X_quant : 양자화 결과, X_dequant : 역양자화 결과)

 

데이터에서 절댓값의 최댓값이 우리가 표현하려는 값으로 계산한다.

우리들의 목표는, 만약 int8이라면 -127 ~ 127의 범위가 되도록 하는 것이다.

(단, 0은 그대로 0이어야 한다.)

 

 

 

양자화를 끝낸 뒤, 결과를 확인해보면, 부동 소수 없이 모두 정수로 저장되어 있는 것을 확인할 수 있다.

 

이제 이 데이터들을 역양자화를 통해 복원을 할 수 있고, 약간의 오차가 있는 것도 확인할 수 있다.

 

 

예시

 

예시 데이터 : [1.23, 3.45, -5.67, -3.25, 0, 7.5, -2.12]

int8을 목표로 양자화

 

max |X| = 7.5

 

양자화된 데이터 : [20, 58, -96, -55, 0, 127, -36]

 

Dequantize 계산:

 

X_dequant  = s x (X_quant - z)

 

여기서 z는 0이므로

X_dequant = s x (X_quant )

 

복원 후 데이터 : [1.18, 3.43, -5.67, -3.25, 0, 127, -2.13]

 

 

저장할 데이터는 다음과 같다.

양자화된 데이터, Scale factor, Zero - point

(여담으로 양자화된 데이터는 int8로 저장하더라도, 나머지  Scale factor와 Zero - point는 복원에 아주 중요한 부분이기에 정밀도가 높은 값으로 저장해야 한다.)

 

 

 

 

Zero-point Quantization

앞서 한 것과는 다르게 비대칭적으로 진행한다.

최대값과 최소값이 양자화된 데이터에서 최대와 최소가 된다.

최대값을 이용해 -Max ~ Max 의 범위를 갖던 Absmax Quantization와는 달리 빈 공간이 적어질 것이다.

 

s= 높은 정밀도의 전체 거리 / 낮은 정밀도의 전체거리

 

int8을 목표로 한다고 가정하면 다음과 같다.

 

( max X - min X ) / 255

 

 

z의 경우 다음과 같다.

z = q_min - round( minX / s )

 

int8을 목표로 한다고 가정하면 다음과 같다.

z = -128 - round( minX / s )

 

 

비교

기법 기준 대칭 주 사용처 한계
Absmax Quantization 절댓값의 최대 대칭 0이 중요한 경우 극단적인 값에 예민하다.
Zero-point Quantization 최대와 최소 차이 비대칭 0이 중요하지 않은 경우 기준점이 비정상적일 경우 성능 저하 우려가 있다.

 


Clipping

극단적인 값의 영향을 줄이기 위한 기술이다.

최대 범위를 [-5, 5]로 지정한다면, 극단적으로 높거나 낮은 값을 그 최대 범위로 바꿔줄 수 있다.

ex : 범위 : [-5, 5] , 극단적인 값: 92 >> 5 

여기서 좋은 범위를 찾기 위한 과정을 calibration이라고 한다.

 

 


 

 

 

 

 

'끄적 > 모델 최적화 및 경량화' 카테고리의 다른 글

데이터 병렬화  (1) 2024.12.31
PEFT 1 : 개요  (0) 2024.12.27
Quantization 1 : 개요  (0) 2024.12.26
KD 4 : Imitation Learning  (3) 2024.12.26
KD 3 : Feature - based KD  (0) 2024.12.26