반갑습니다.
예전에 PEFT(Parameter Effictient Fine-Tuning)를 다룬 적이 있었죠.
그 중, QLoRA에 대해 설명할 때 Quantization에 대해서는 간단하게만 짚고 넘어갔던 기억이 있습니다.
이번 글에서는 Quantization에 대해 자세하게 알아보겠습니다.
숫자의 정밀도(Precision)을 낮추는 최적화 및 경량화 기법을 의미합니다.
의도한 숫자를 얼마나 정확하게 표현할 수 있는지에 대한 지표입니다.
를 나타낼 때
3.141592 .... 로 길어질 수록 정밀도가 상승합니다.
반면에 int로 나타내면
3
그냥 이렇게 나타나게 되겠죠.
이런 상황을 Precision이 낮다/오차가 높다 라고 표현합니다.
그럼 왜 이렇게 하느냐
Quantization을 진행하면 적은 메모리로 모델을 표현하고 계산 속도를 향상시킬 수 있습니다.
AI 모델에서의 Quantization의 목표는 원하는 자료형으로 최대한 오차 없이 바꾸기 입니다.
그 방법에 대해 자세히 알아가봅시다.
AI 모델을 그냥 불러오면 모든 파라미터는 FP32의 자료형을 갖습니다.

이렇게 생겨먹은 자료형이지요.
다른 자료형에 대해서도 알아봅시다.

10.9에 대해서 Int8로 Quantization을 생각해봅시다.
가장 직관적으로 생각나는 방법은 반올림입니다.
반올림을 수행하면 11이 되고, 오차도 0.1밖에 안되죠.
하지만 만약 수가 10.5라면, 오차는 0.5나 발생합니다.
또, 수가 300.5라면, 반올림을 진행하면 301이 되지만, Int8 자료형은 -128부터 127까지밖에 표현을 못합니다.
이쯤 반올림은 합리적인 방법이 아니구나 라고 생각이 들게 되는 것이지요.
그럼어뜩할까요
이럴 때 Quantization Mapping을 사용합니다.
높은 Precision 데이터를 낮은 Precision으로 대응시키는 Quantization 계산식을 의미합니다.
말이 좀 어렵군요 ..
예시를 통해 알아보겠습니다.
위에서 말씀드린 300.5라는 데이터를 -128 ~ 127사이의 값으로 매핑을 하는것입니다.
대략 127에 2.366정도를 곱하면 300.5 언저리의 수가 됩니다.
아하 그러면 기울기(Scale Factor)와 영점(Zero-Point)만 조절하면 모든 수를 표현할 수 있구나 !!
파라미터가 [300.5, 30, 20, 100, -300.5]가 있다면
Scale Factor와 zero-point를 지정했을 때
-128~127 사이의 값 * Scale Factor + Zero-Point로 모든 파라미터를 표현할 수 있습니다.
그렇다면 어떤 기준으로 Scale Factor와 Zero-Point를 정의할까요
두가지 방법이 있습니다.
0을 기준으로 변환 후 값들의 범위가 좌우 대칭이 되도록 변환합니다.
값이 대칭적이거나 0을 항상 0으로 보내야 할 때 사용합니다.
극단적인 값에 예민한 단점이 있습니다.
Absmax Quantization은 만약 값들 중 한 값이 비정상적으로 크거나 작다면 나머지 값의 양자와 결과가 0이 되기에 Clipping을 같이 사용합니다.
으로 계산됩니다.
0을 고려하지 않고 전체 범위를 균일하게 변환합니다.
ReLU의 경우, 양수 값만 사용하기에 이 방법이 오차가 더 적습니다.
기준점(0점)이 비정상적일 경우, 성능이 떨어질 수 있습니다.
로 계산됩니다.
이렇게 위의 두 가지 방법으로 Scale Factor와 Zero-Point를 정할 수 있습니다.
이렇게 정의한 상수들로 어떻게 Quantization, Dequantization을 할까요?
같은 식을 사용하면 쉽게 구할 수 있습니다.
즉, 만개의 파라미터가 있다면 높은 Precision의 Scale Factor과 Zero-Point 두 수가 있다면 모든 값을 오차를 최소화하는 방식으로 Quantization을 진행할 수 있습니다.
'
'
'
이로서 Quantization에 대해 원리와 함께 자세히 살펴봤습니다.
이번 글에서는 AI 모델의 파라미터를 기준으로 Quantization에 대해 설명했지만.. 사실 파일 압축에서도 많이 사용되는 방법입니다.
이 글을 읽고 어떤 흐름으로 압축/양자화가 되는지 알면 언젠가 도움이 될 듯 합니다.
감사합니다 !