
GPTQ: ACCURATE POST-TRAINING QUANTIZATION FOR GENERATIVE PRE-TRAINED TRANSFORMERS
OBQ의 경우, 현재 시점에서 가장 적은 quantization error를 유발하는 weight를 선택하여 quantization하는 greedy order를 사용한다.
그런데, OBQ의 greedy하게 Q하는 전략은 임의의(arbitrary) 순서로 Q하는 것과 큰 차이가 없음을 발견했다. (특히 large, heavily-parametrized layer의 경우)
그 이유는, OBQ의 greedy 방법은 초기에 Q error가 큰 weight 수를 줄일 수 있지만, 후반부에 이르면, 보상을 위해 조정할 수 있는 weight가 거의 남아 있지 않게 되어, 후반부에 Q되는 weight들은 더 큰 error를 발생시킬 수 있다.
결과적으로, 초기의 이점(개별 error가 큰 weight 수의 감소)이 후반부의 불리함 (더 큰 error를 가진 weight들)에 의해 상쇄된다.
어떤 fixed order도 꽤 잘 동작한다는 insight는 특히 large model에서 흥미로운 가능성을 갖는다.
"
기존 OBQ 방법은 의 각 row들을 independent하게, quantization error를 최소화하는 weight를 선택해 quantization한다.
반면, GPTQ에선 모든 row들을 동일한 order로 quantization 한다.

"
결과적으로, unquantized weights 와 가 모든 row에서 동일하다.
따라서, 각 column을 update할 때마다, 번만 update 하면 된다.
(기존 OBQ에선 각 weight를 quantiation 할 때마다,번 update 필요)
이를 통해, 전체적인 runtime을 에서
으로 줄일 수 있다.(by factor of )
update에 소요.
large model에 대해서, 이 효과는 수백~수천 배 커진다.
하지만, 이 알고리즘이 실제로 very large model에 실전에 적용해되기 위해선, 2가지 주요한 문제를 해결해야 한다.
핵심: "GPTQ는 여러 column들을 한 번에 batch로 처리하는 batch-update 방식을 도입했다."
문제
Step 1에서 제안한 방식을 그대로 구현하는 것은 상대적으로 낮은 compute-to-memory-access ratio를 갖기에 빠르지 않다.
착안
번째 column에 대한 최종 rounding decision은 오직 이 column에 대해 수행된 updates에만 영향을 받으므로, 이 시점에서 이후 column들에 대한 업데이트는 무관하다. 이를 통해 updates를 'lazily batch' updates 할 수 있게 되어, GPU 활용도를 크게 개선할 수 있다.
해결 방안
GPTQ는 한 번에 의 column에 알고리즘을 적용하며, updates를 해당 column들과 의 해당 블록으로 제한한다. (Figure 2)

Block이 완전히 처리된 후에, 아래에 제시된 Euqation (2)와 (3)의 multi-weight version을 사용해 전체 와 행렬에 대해 global updates를 수행한다.

: set of indices, : inverse matrix with the corresponding rows and columns removed
비록 이 전략이 이론적인 계산량을 줄이지는 않지만, 메모리 처리량 병목 현상(memory-throughput bottleneck)을 효과적으로 해결한다. 이는 실제로 매우 큰 모델에서 10배 정도의 속도 향상을 제공하며, 따라서 알고리즘의 핵심 구성 요소가 된다.
핵심: "GPTQ는 Cholesky 분해를 도입하여 수치적(numerical) 안정성 문제를 해결하고, 대규모 모델(large model)에 적용 가능한 알고리즘을 개발했다."
문제
수치적 부정확성(numerical inaccuracies)이 large 모델에서 주요 문제가 된다.
(특히, Step 2의 block updates를 함께 적용하는 경우 더욱더)
구체적으로, 행렬이 indefinite 해질 수 있고, 이로 인해 remaining weights들이 잘못된 방향으로 aggressive하게 update 되어, 해당 layer의 arbitrarily-bad quantization을 초래한다.
실전에서, model size가 커질수록 이 문제가 발생할 가능성이 증가한다. 수십억 개 이상의 parameter를 가진 model에선 몇몇 layer에서 이 문제가 거의 확실히 발생함을 관찰했다.
주요 issue는 반복적인 Equation (5)의 적용, 즉 반복적인 batch Hessian inverse update로 인한 것으로 보이며, 특히 matrix inversion을 통해 numerical error가 축적되는 것으로 보인다.
더 작은 모델의 경우, dampening을 적용하는 것, 즉 H의 대각 요소에 작은 상수 λ (우리는 항상 평균 대각 값의 1%를 선택합니다)를 추가하는 것이 수치적 문제를 피하기에 충분해 보인다.
그러나 더 큰 모델들은 더 robust하고 일반적인 접근 방식을 필요로 한다.
착안
해결 방안
Cholesky decomposition(분해) 도입
에서 필요한 q번째 행의 대각선 이후 요소들만 미리 계산 (선택적 계산)
최신 Cholesky kernel을 사용하여 계산 속도 향상
약간의 dampening (의 diagonal 요소에 작은 상수 추가)을 적용하여 추가적인 수치 안정성(numerical stability) 확보
이 접근 방식은 메모리 사용량을 크게 증가시키지 않으면서도 수치적 안정성을 확보하며, 대규모 모델에서도 robust하게 작동한다.

Overview
smaller model들에 대해 GPTQ의 accuracy를 다른 (accurate-but-expensive) quantization 방법들과 비교하여 검증한다.
large model들에 대한 GPTQ의 runtime scaling을 실험한다.
BLOOM과 OPT model family 전체에 대한 3-bit 및 4-bit quantization 결과를 제시하며, 이는 challenging한 language generation task에서의 perplexity를 통해 평가된다.
weight들의 작은 block으로 granularity를 줄일 때 2-bit quantization에도 stable함을 보여준다.
perplexity 분석을 보완하기 위해, 결과로 얻어진 quantized model들을 일련의 standard zero-shot task에서도 평가한다.
공개적으로 사용 가능한 가장 큰(그리고 흥미로운) 두 model인 Bloom-176B와 OPT-175B에 초점을 맞추어 여러 task에 대해 상세한 evaluation을 수행한다. 이 model들에 대해, inference에 필요한 GPU 수를 줄이고 generative task에 대한 end-to-end speedup과 같은 practical improvement들을 제시한다.
Setup
GPTQ를 PyTorch (Paszke et al., 2019)로 구현하였고, BLOOM (Laurençon et al., 2022)과 OPT (Zhang et al., 2022) model family의 HuggingFace integration을 사용했다.
모든 model (1750억 parameter variant 포함)을 80GB memory를 가진 단일 NVIDIA A100 GPU를 사용하여 quantize했다.
GPTQ calibration data는 C4 dataset (Raffel et al., 2020)에서 무작위로 선택한 128개의 2048 token segment로 구성되었다. 이는 무작위로 크롤링된 웹사이트에서 발췌한 것으로, 일반적인 text data를 대표한다. 이는 GPTQ가 task-specific data를 전혀 보지 않았음을 의미하며, 따라서 우리의 결과가 실제로 "zero-shot"임을 강조한다.
LLM.int8() (Dettmers, 2022)와 유사하게 min-max grid에서 standard uniform per-row asymmetric quantization을 수행한다.
추가적인 evaluation 세부사항은 Appendix A.2.1에서 찾을 수 있다.
전체 compression 과정이 full precision model 실행에 필요한 것보다 훨씬 적은 GPU memory로 수행될 수 있도록 하기 위해 몇 가지 주의가 필요하다. 구체적으로, 우리는 항상 6개의 layer로 구성된 하나의 Transformer block을 한 번에 GPU memory에 load하고, 그 다음 layer-Hessian을 누적하고 quantization을 수행한다. 마지막으로, 현재 block input을 fully quantized block을 통해 다시 보내어 다음 block의 quantization을 위한 새로운 input을 생성한다. 따라서 quantization 과정은 full precision model의 layer input이 아니라 이미 부분적으로 quantize된 model의 실제 layer input에 대해 작동한다. 우리는 이 방법이 무시할 만한 추가 비용으로 눈에 띄는 개선을 가져온다는 것을 발견했다.
Baselines
primary baseline인 RTN은 정확히 동일한 asymmetric per-row grid에서 모든 weight들을 가장 가까운 quantized value로 rounding하는 것으로 구성된다.
GPTQ에서 사용되는 것과 정확히 동일하다.
이는 LLM.int8() 의 SOTA weight quantization과 정확히 일치한다.
이는 현재 매우 큰 language model의 quantization에 관한 모든 연구(LLM.int8(), ZeroQuant, nuQmm)에서 사용되는 method이다.
단순히 direct rounding을 수행하기 때문에 수십억 개의 parameter를 가진 network에 대해서도 runtime이 잘 scaling된다.
AdaRound(Nagel et al., 2020)나 BRECQ(Li et al., 2021)와 같은 더 accurate한 method들은 현재 수십억 개의 parameter를 가진 model들에 대해서는 너무 느리다. GPTQ 연구의 main focus가 이 지점이다.
GPTQ는 small model에 대해서는 이러한 method들과 competitive하면서도 OPT-175B와 같은 huge model로도 scaling 가능함을 보여준다.
ablation study 1: ResNet18과 ResNet50에 대해 GPTQ의 성능을 state-of-the-art post-training quantization (PTQ) method들과 비교.
실험 결과 (Table 1)

ablation study 2: 두 개의 smaller language model인 BERT-base (Devlin et al., 2019)와 OPT-125M에 대해 full greedy OBQ method와 비교
실험 결과 (Appendix Table 8)

전반적으로, GPTQ는 smaller model에 대해 state-of-the-art post-training method들과 competitive한 성능을 보이면서도, ≈ 1시간이 아닌 < 1분만 소요된다. 이를 통해 much larger model로의 scaling이 가능해진다.

arge-scale study는 전체 OPT와 BLOOM model family를 3-bit와 4-bit로 compress하는 것으로 시작.
그 후 이 model들을 WikiText2 (Merity et al., 2016) (Figure 1, Table 3,4), Penn Treebank (PTB) (Marcus et al., 1994), C4 (Raffel et al., 2020) (둘 다 Appendix A.3에 있음)를 포함한 여러 language task에서 evaluate한다.
이러한 perplexity-based task에 focus를 두는데, 이는 model quantization에 particularly sensitive한 것으로 알려져 있기 때문이다 (ZeroQuant, (Yao et al., 2022))
실험 결과(Table 3)

실험 결과(Table 4)

실험 결과(Figure 1)

175B Parameter Model

Practical Speedups
OPT-175B model에 practical appication study.
GPU memory cost
Latency
LLM.int8()은 FP16 baseline과 동일한 runtime을 가짐.
문제
해결
실험 결과 (Table 6)

우리의 focus는 language generation이지만, quantized model의 performance를 몇 가지 popular zero-shot task에서도 evaluate한다.
LAMBADA (Paperno et al., 2016), ARC (Easy and Challenge) (Boratko et al., 2018), PIQA (Tata & Patel, 2003)에서 평가한다.
실험 결과

Additional Tricks
지금까지의 실험은 vanilla row-wise quantization에 focus했지만, GPTQ가 본질적으로 어떤 quantization grid 선택과도 compatible함을 강조한다.
예를 들어, GPTQ는 standard grouping (QSGD(Alistarh et al.), 2017; nuQmm(Park et al., 2022))과 쉽게 combine될 수 있다. 즉, g개의 consecutive weight group에 independent quantization 하는 것이다.
실험 결과


grouping은 extreme quantization, 즉 평균적으로 component당 약 2-bit로 reasonable performance를 achieve하는 것을 가능하게 한다.
Table 7은 가장 큰 model들을 varying group-size로 2-bit로 quantize할 때 WikiText2에서의 결과를 보여준다.

group size를 8로 reduce하면, ternary (-1, 0, +1) quantization 적용 가능.
SUMMARY
LIMITATIONS
1. 기술적 측면에서, 메모리 이동 감소를 통해 속도 향상을 얻지만, 실제 연산량(computation) 자체를 줄이지는 않는다.
이들은 future work를 위한 direction이며, 이것이 carefully-designed GPU kernel과 다음의 existing technique를 통해 achieve될 수 있다고 믿는다.