본문 바로가기

논문 리뷰/etc.

GPTQ: Accurate Post-Training Quantization for Generative Pre-trained Transformers

양자화 일괄 처리, Cholesky decomposition

 

[Github]

[arXiv](Current version v2)

 

 

Abstract

효율적인 GPT 모델 가중치 양자화 방법인 GPTQ 제안

 

 

 

Background

[Optimal Brain Compression] (OBC, OBQ)

[WoodFisher]

위의 두 논문에 대한 사전 지식이 있는 것을 전제로 작성했습니다.

 

 

The GPTQ Algorithm

Step 1: Arbitrary Order Insight

OBQ에서는 양자화 오류를 기반으로 양자화 순서를 결정한다. 하지만 연구진은 실험적으로 대규모 모델에서는 고정된 양자화 순서와 OBQ의 방법이 거의 차이가 없다는 것을 알아냈다.

 

모든 행에서 가중치를 순서대로 양자화하면, 각 행에서 H-1이 항상 동일하기 때문에 행마다 계산할 필요가 없다.

  • H는 가중치의 실제 값에 의존하지 않고 레이어 input에만 의존한다.
  • OBQ와 달리 모든 행의 양자화 순서가 같다.

 

이 방법은 계산효율적이지만, 두 가지 문제가 있다.

 

Step 2: Lazy Batch-Updates

첫째, 결국 똑같이 거대한 행렬의 요소를 업데이트해야 하기 때문에 계산 대 메모리 액세스 비율을 고려하면 실제로 별로 빠르지 않다.

 

이 문제는 행의 각 인덱스에서 모든 열을 batch로 일괄처리 함으로써 해결할 수 있다. 이 방법은 계산량 자체를 줄이지는 않지만, 메모리 액세스의 병목 현상을 해결하여 엄청난 속도 향상을 제공한다.

 

Cholesky Reformulation

두 번째 문제는 수치의 부정확성이다. 2차 근사 오차와 추가적인 행렬 반전 등에서 누적된 수치 오류가 대규모 모델에서는 훨씬 크게 작용할 수 있다.

 

작은 모델의 경우 H의 대각에 작은 상수 λ를 추가하는 것으로 문제를 피할 수 있다. (선형 종속 제거)

 

큰 모델에서:

가중치 q를 양자화할 때 양자화되지 않은 가중치 집합 F에 대해 H-1에서 필요한 정보는 인덱스 q의 대각요소, 그리고 F와 관계된 2차 미분 정보이다.

 

실제로, 대칭인 H-1에 대한 요소 제거는 본질적으로 Cholesky 분해를 취하는 것과 같고, 수치적으로 더 안정적이라고 한다.

따봉 GPT야 고마워

 

어쨌든 Cholesky 커널을 이용하여 H-1에서 필요한 모든 정보를 미리 계산해 놓 수 있다.

(모든 행의 양자화 순서가 같고 같은 H를 공유하기 때문에)

 

 

The Full Algorithm