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 |