양자화 일괄 처리, Cholesky decomposition
[Github]
[arXiv](Current version v2)
Abstract
효율적인 GPT 모델 가중치 양자화 방법인 GPTQ 제안
Background
[Optimal Brain Compression] (OBC, OBQ)
위의 두 논문에 대한 사전 지식이 있는 것을 전제로 작성했습니다.
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 분해를 취하는 것과 같고, 수치적으로 더 안정적이라고 한다.
어쨌든 Cholesky 커널을 이용하여 H-1에서 필요한 모든 정보를 미리 계산해 놓 수 있다.
(모든 행의 양자화 순서가 같고 같은 H를 공유하기 때문에)
The Full Algorithm