AWQ: Activation-aware Weight Quantization for LLM Compression and Accelertaion
ref : AWQ: Activation-aware Weight Quantization for LLM Compression and Accelertaion
Intorduction
- transformer를 기반으로 하는 LLM은 근래 많은 사용을 겸하고 있지만 데이터셋 자체의 방대한 크기와 용량으로 인해 Edge Device에서의 사용이 어려운 상태이다.
- 이에 대안으로 Low-bit Quantization 을 수행하여 사용한다.
- QAT : high training cost로 인해서 사용하기 어렵다
- PTQ : 수행하는 경우 Accuracy degradation이 너무 크게 발생하여 효과가 부족하다.
- GPTQ : GPTQ의 경우 ==2계의 정보를 사용==해서 최대한 양자화 에러를 해소하려고 한다.
- 하지만 이 또한 generalist model에서는 문제가 발생할 수 있다.
- distorting learned feature
- over-fit calibration issue
AWQ: Activation-aware Weight Quantization
2.1 Improving LLM Quantization by Preserving 1% Salient Weight
- 하지만 이 또한 generalist model에서는 문제가 발생할 수 있다.
- LLM의 filter 의 모든 weight가 동등하게 중요도를 가지고 있는 것이 아님에 중점을 두었다.
- 중요한 weight 를 salient weight라고 칭하며 이 salient weight 는 quantization을 배제한 채(remaining at FP16)로 그대로 사용한다.
- 그렇다면 salient weight 인지 어떻게 판단할 것인가?
- activation magnitude가 큰 경우
- L~2~-norm의 값이 큰 경우
→ 2번의 경우 성능(quantizatized performance)에 불리하다.
따라서 주로 1번의 방법을 선택해서 중요도를 나타낸다.
한계점
- FP16으로 quantization하지 않는 것이 아니라 다른 방법으로 보존하는 방법을 알면 좋음
2.2 Protecting Salient Weights by Activation-aware Scaling
- quantization error 를 줄이는 방법으로 per-channel scaling 를 사용하면 hw inefficiency issue를 줄일 수 있다. $ Q(w) = \Delta\cdot Round(w/\Delta), \Delta = max(|w|)/2^{N-1} $ 의 기존 수식에서 weight 에 ==scale factor s==를 곱하고 input activation을 s로 나누어 준다. 그러면 아래와 같은 수식을 유도할 수 있다.
$ Q(w\cdot s)\cdot x/s = \Delta’\cdot Round(ws/\Delta) \cdot x \cdot 1/s $
- 이 때 $\Delta’$는 quantizatio scaler로 기존의 $\Delta$와 차이점은 weight 의 하나의 element만 s 를 곱한 다음 사용한다는 차이가 있다.
- 즉, 미미한 차이를 가지므로 $\Delta’ = \Delta$를 만족한다.
- 결국 scale factor s 를 곱하기 전과 비교한 상대오차는 $\Delta’ / \Delta \cdot 1/s$ 로 표현할 수 있다.
- s > 1 을 선택한다면 오차가 작아지는 것을 확인할 수 있다.
- 그렇다면 s가 크면 무조건 오차가 작아지니까 좋은 것이 아닐까?
- 정작 s 가 너무 커지게 되면 $\Delta’$ 가 같이 증가하게 되고 2에서 말한 $\Delta’ = \Delta$ 이 성립할 수 없어진다.
- 따라서 적당한 s 를 선택하는 것이 좋다.
How to set adequate s
- idea: s를 이용하는 식을 통해 미분해서 구하자
- s에 관한 식이 미분 불가능한 성질을 가지고 있어서 해당 방법은 사용할 수 없다.
→ approx. gradient 방법을 선택해서 수행한다.
$
s = sx^\alpha, \alpha^* = arg min L(sx^\alpha)
$
이 식에서 $\alpha$를 찾기 위해서 fast-grid search 라는 방법을 사용하여 구한다.
또한, Clipping method를 통해서 MSE error를 줄일 수 있다.
- clipping 수행 시 $\Delta’$를 줄일 수 있으므로 위의 3번 식에서 분자가 줄어든다.
Advantages
- clipping 수행 시 $\Delta’$를 줄일 수 있으므로 위의 3번 식에서 분자가 줄어든다.
- regression이나 back propagation을 사용하지 않는다.
- calibration set에 의존성이 매우 낮다.
- average magnitude per channel 을 사용하므로
- 이를 통해서 over-fitting의 문제도 해결할 수 있다.
- 최종적으로 quantization 함에 있어 데이터양이 적어도 가능하다.
Opinion
op) ==salient weight를 fp16이 아닌 비교적 높은 precision의 방법으로 quantization 하는 것은 어떨까?==
그렇게 하려면 salient weight를 감지하고 변환하는 알고리즘 필요할 것