1. 논문이 나온 배경
GPT-3나 OPT와 같은 대규모 생성형 트랜스포머 모델들은 복잡한 언어 모델링 작업에서 획기적인 성능을 보여주었지만, 동시에 극도로 높은 계산 비용과 저장 공간을 요구한다는 문제가 있었습니다. 특히 GPT-3-175B와 같은 최고 성능 모델의 경우 약 1,750억 개의 파라미터를 가지고 있으며, 이를 float16 형식으로 저장하면 326GB의 메모리가 필요합니다. 이는 최고급 단일 GPU의 용량을 초과하는 수준이기 때문에, 추론(inference)을 수행하기 위해서도 여러 개의 GPU를 사용하는 복잡하고 비용이 많이 드는 설정이 필요했습니다.
모델 압축 기술이 이러한 문제를 해결할 수 있는 표준적인 접근법이었지만, 수십억 개의 파라미터를 가진 모델에 적용하기에는 여러 한계가 있었습니다. 낮은 비트폭 양자화나 모델 프루닝과 같은 복잡한 방법들은 일반적으로 모델 재학습이 필요한데, 이는 수십억 파라미터 모델에서는 극도로 비용이 많이 듭니다.
한편, 재학습 없이 모델을 한 번에 압축하는 후학습 양자화(post-training quantization) 방법들이 매력적인 대안이 될 수 있었지만, 더 정확한 변형들은 복잡하고 수십억 개의 파라미터로 확장하기 어려웠습니다. 당시까지는 기본적인 round-to-nearest 양자화만이 GPT-175B 규모에 적용되었으며, 이는 8비트 가중치와 같은 낮은 압축률에서는 잘 작동했지만 더 높은 압축률에서는 정확도를 유지하지 못했습니다.
2. 어떤 것을 개선할 것인지
GPTQ는 대규모 언어 모델을 3비트 또는 4비트로 양자화하면서도 정확도 손실을 최소화하는 것을 목표로 합니다. 구체적으로, GPTQ는 1,750억 개의 파라미터를 가진 모델을 단일 GPU에서 약 4시간 만에 양자화할 수 있으며, 가중치당 3비트 또는 4비트로 압축하면서도 비압축 기준선 대비 무시할 수 있는 수준의 정확도 저하만을 보입니다.
기존의 round-to-nearest 방법 대비 GPTQ는 압축률을 두 배 이상 증가시키면서도 정확도를 유지할 수 있습니다. 또한 GPTQ는 가중치가 2비트 또는 삼진(ternary) 양자화 수준으로 압축되는 극단적인 양자화 체제에서도 합리적인 정확도를 제공할 수 있습니다.
실용적인 측면에서는, 처음으로 1,750억 파라미터 모델을 단일 GPU에서 생성형 추론을 위해 실행할 수 있게 하며, 고급 GPU(NVIDIA A100)를 사용할 때 약 3.25배, 비용 효율적인 GPU(NVIDIA A6000)를 사용할 때 4.5배의 FP16 대비 엔드투엔드 추론 속도 향상을 제공합니다.
3. 어떤 원리로 개선된 것인지
GPTQ는 Optimal Brain Quantization(OBQ)이라는 기존 방법에서 출발하여, 대규모 언어 모델에 적용할 수 있도록 세 가지 주요 수정을 가합니다.
Step 1: 임의 순서 통찰(Arbitrary Order Insight)
기존 OBQ 방법은 가중치를 탐욕적 순서로 양자화했습니다. 즉, 항상 현재 가장 적은 양자화 오차를 발생시키는 가중치를 선택했습니다. 그러나 GPTQ는 특히 크고 과파라미터화된 레이어에서 임의의 고정된 순서로 양자화해도 성능이 거의 비슷하다는 것을 발견했습니다. 이는 큰 개별 오차를 가진 양자화된 가중치의 수가 약간 적더라도, 이러한 가중치들이 프로세스 끝에서 양자화될 때는 보상을 위해 조정할 수 있는 미양자화 가중치가 거의 남아있지 않기 때문입니다.
이 통찰을 바탕으로 GPTQ는 모든 행의 가중치를 같은 순서로 양자화합니다. 결과적으로 미양자화 가중치 집합 F와 역 헤시안 행렬 $ H^{-1}_F $가 모든 행에 대해 항상 동일하게 됩니다. 이는 $ H^{-1}_F $의 업데이트를 가중치당 한 번이 아니라 열당 한 번만 수행하면 된다는 것을 의미합니다. 이를 통해 전체 런타임을 $ O(d_{row} · d³_{col}) $에서 $ O(max{d_{row} · d²_{col}, d³_{col}}) $로 줄이며, 이는 $ min{d_{row}, d_{col}} $ 배의 속도 향상을 의미합니다.
Step 2: 지연 배치 업데이트(Lazy Batch-Updates)
직접적인 구현은 계산 대 메모리 접근 비율이 상대적으로 낮기 때문에 실제로는 빠르지 않습니다. 예를 들어, 역 헤시안 업데이트는 잠재적으로 거대한 행렬의 모든 요소를 각 항목당 몇 개의 FLOP만 사용하여 업데이트해야 하는데, 이러한 연산은 현대 GPU의 방대한 계산 능력을 제대로 활용할 수 없고 훨씬 낮은 메모리 대역폭에 병목됩니다.
GPTQ는 이 문제를 다음과 같은 관찰로 해결합니다: 열 i에 대한 최종 반올림 결정은 해당 열에 대해 수행된 업데이트에만 영향을 받으며, 이후 열에 대한 업데이트는 이 시점에서 관련이 없습니다. 따라서 업데이트를 "지연 배치"로 묶어서 훨씬 더 나은 GPU 활용도를 달성할 수 있습니다. 구체적으로, 알고리즘을 한 번에 B=128개의 열에 적용하며, 업데이트를 해당 열과 대응하는 B×B 블록의 $ H^{-1} $에 국한시킵니다. 블록이 완전히 처리된 후에만 전체 $ H^{-1} $과 W 행렬의 전역 업데이트를 수행합니다. 이 전략은 이론적인 계산량을 줄이지는 않지만, 메모리 처리량 병목 현상을 효과적으로 해결하여 실제로 매우 큰 모델에 대해 1차수(order of magnitude)의 속도 향상을 제공합니다.
Step 3: Cholesky 재구성(Cholesky Reformulation)
마지막으로 해결해야 할 기술적 문제는 수치적 부정확성입니다. 이는 기존 모델의 규모에서, 특히 이전 단계에서 논의한 블록 업데이트와 결합될 때 주요 문제가 될 수 있습니다. 구체적으로, 행렬 $ H^{-1}_F $가 부정정(indefinite)이 되는 경우가 발생할 수 있는데, 이는 알고리즘이 남은 가중치를 잘못된 방향으로 공격적으로 업데이트하게 만들어 해당 레이어의 임의적으로 나쁜 양자화를 초래합니다. 실제로 이런 일이 발생할 확률은 모델 크기에 따라 증가하며, 수십억 개 이상의 파라미터를 가진 모델에서는 적어도 몇 개의 레이어에서 거의 확실히 발생합니다.
GPTQ는 이 문제를 Cholesky 분해를 사용하여 해결합니다. $ H^{-1} $로부터 필요한 유일한 정보는 q번째 행, 더 정확히는 대각선에서 시작하는 이 행의 요소들입니다. 따라서 더 수치적으로 안정적인 방법을 사용하여 이러한 모든 행을 미리 계산할 수 있습니다. 대칭적인 $ H^{-1} $에 대한 행 제거는 본질적으로 Cholesky 분해를 취하는 것과 동일하며, 단지 q번째 행을 $ ([H^{-1}_{F_q}]_{qq})^{\frac{1}{2}} $로 나누는 사소한 차이만 있습니다. 최신 Cholesky 커널을 활용하여 필요한 모든 $ H^{-1} $ 정보를 미리 계산할 수 있습니다. 경미한 감쇠(dampening, 평균 대각선 값의 1%에 해당하는 작은 상수를 대각선 요소에 추가)와 결합하면, 결과적인 방법은 거대한 모델에서 문제없이 실행할 수 있을 만큼 견고합니다.
4. 실험 결과 및 성능
4-1. 데이터셋 및 구조
교정(Calibration) 데이터: GPTQ는 C4 데이터셋에서 무작위로 선택된 128개의 2048 토큰 세그먼트를 사용합니다. C4는 무작위로 크롤링된 웹사이트의 발췌문으로 구성되어 일반적인 텍스트 데이터를 대표합니다. 중요한 점은 GPTQ가 어떤 작업별 데이터도 보지 않으며, 따라서 결과가 실제로 "제로샷"으로 유지된다는 것입니다.
평가 데이터셋:
- WikiText2: 언어 생성 작업을 위한 주요 평가 데이터셋으로, 전체 검증 세트를 두 개의 줄바꿈으로 구분하여 연결하고 2048 토큰의 비중첩 세그먼트로 분할하여 perplexity를 계산합니다.
- Penn Treebank (PTB): 또 다른 언어 모델링 벤치마크 데이터셋입니다.
- C4: 교정 데이터와 동일한 소스이지만, 완전히 제로샷은 아닙니다.
- LAMBADA: 제로샷 작업 평가를 위한 데이터셋으로, 광범위한 담화 맥락을 요구하는 단어 예측을 측정합니다.
- ARC (Easy/Challenge), PIQA, StoryCloze: 추가적인 제로샷 평가 작업들입니다.
소규모 모델 벤치마크: ResNet18, ResNet50 (컴퓨터 비전), BERT-base, OPT-125M (언어 모델)을 사용하여 기존 후학습 양자화 방법들과 비교합니다.
대규모 모델 패밀리:
- OPT 모델 패밀리: 125M, 350M, 1.3B, 2.7B, 6.7B, 13B, 30B, 66B, 175B 파라미터
- BLOOM 모델 패밀리: 560M, 1.1B, 1.7B, 3B, 7.1B, 176B 파라미터
4-2. 성능 평가 지표
Perplexity (PPL): 언어 생성 작업의 주요 평가 지표로, 낮을수록 좋습니다. Perplexity는 모델 양자화에 특히 민감한 것으로 알려져 있어 엄격한 평가 기준이 됩니다.
정확도 (Accuracy): 제로샷 작업에서 사용되며, LAMBADA와 같은 작업에서는 백분율로 측정됩니다.
런타임: 단일 NVIDIA A100 GPU에서 전체 모델 양자화에 걸리는 시간을 측정합니다.
지연 시간 (Latency): 토큰당 평균 생성 시간(밀리초)으로, 배치 크기 1에서 128 길이의 시퀀스를 생성할 때 측정합니다.
속도 향상 (Speedup): FP16 기준선 대비 양자화된 모델의 추론 속도 비율입니다.
주요 실험 결과
소규모 모델 비교: ResNet18과 ResNet50에서 GPTQ는 4비트에서 동등한 성능을, 3비트에서는 가장 정확한 방법들보다 약간 낮은 성능을 보였지만, AdaQuant와 같은 이전 PTQ 방법들보다는 상당히 우수한 성능을 보였습니다. BERT-base와 OPT-125M에서는 4비트에서 OBQ와 유사한 성능을, 3비트에서는 놀랍게도 약간 더 나은 성능을 보였습니다.
런타임 성능: GPTQ는 10억~30억 파라미터 모델을 수 분 내에, 175B 모델을 약 4시간 내에 양자화합니다. 비교를 위해, ZeroQuant-LKD는 13억 파라미터 모델에 3시간이 걸렸으며, 이를 선형적으로 외삽하면 175B 모델에는 수백 시간(몇 주)이 소요될 것으로 예상됩니다.
언어 생성 성능 - WikiText2 Perplexity:
- OPT-175B: FP16 기준선 8.34, 4비트 RTN 10.54, 4비트 GPTQ 8.37 (거의 무시할 수 있는 0.03 차이), 3비트 RTN 7,300 (붕괴), 3비트 GPTQ 8.68
- BLOOM-176B: FP16 기준선 8.11, 4비트 RTN 8.37, 4비트 GPTQ 8.21, 3비트 RTN 571 (붕괴), 3비트 GPTQ 8.64
GPTQ는 RTN 대비 상당한 차이로 우수한 성능을 보입니다. 예를 들어, 175B 모델에서 4비트 GPTQ는 0.03 perplexity만 손실하는 반면, RTN은 2.2포인트 떨어져 10배 작은 완전 정밀도 13B 모델보다 성능이 나빠집니다. 3비트에서 RTN은 완전히 붕괴하지만, GPTQ는 특히 더 큰 모델에서 합리적인 perplexity를 유지할 수 있습니다. 흥미로운 추세는 OPT-66B를 제외하고 더 큰 모델이 일반적으로 양자화하기 더 쉽다는 것입니다.
그룹화를 통한 추가 개선: 그룹 크기 1024 (약 0.02 추가 비트)를 사용하면 평균적으로 약 0.2의 perplexity 개선이 있고, 그룹 크기 128 (약 0.15 추가 비트)은 추가로 0.1의 개선을 제공하여 비압축 정확도에서 0.1~0.3만 떨어집니다.
실용적 속도 향상:
- 3비트 OPT-175B 모델은 약 63GB의 메모리를 차지하여 단일 80GB A100 GPU에 완전히 맞출 수 있습니다 (FP16은 5개의 80GB GPU 필요, LLM.int8()은 3개 필요).
- A100 GPU를 사용할 때, 3비트 OPT-175B는 FP16 버전(5개 GPU) 대비 토큰당 평균 시간이 약 3.25배 빠릅니다 (230ms → 71ms).
- 더 접근 가능한 A6000 GPU를 사용할 때는 589ms에서 130ms로, 4.5배의 지연 시간 감소를 보입니다.
제로샷 작업: LAMBADA에서 4비트에서는 RTN도 비교적 잘 작동하며, 3비트에서는 RTN이 붕괴하는 반면 GPTQ는 여전히 좋은 정확도를 제공합니다. OPT-175B의 LAMBADA 정확도는 FP16 75.59%, 4비트 GPTQ 76.80%, 3비트 GPTQ 76.19%를 보였습니다.
극단적 양자화: 그룹화를 사용하면 평균 약 2비트까지 합리적인 성능을 달성할 수 있습니다. 그룹 크기 128 (약 2.2비트)에서 perplexity 증가는 1.5포인트 미만이며, 그룹 크기 32 (약 2.6비트)에서는 0.6~0.7로, 이는 일반 3비트보다 약간만 나쁘고 실용적인 커널 구현에 흥미로울 수 있습니다. 그룹 크기 8로 줄이면 삼진(-1, 0, +1) 양자화를 적용할 수 있으며, OPT-175B에서 WikiText2 PPL 9.20을 달성하여 1포인트 미만의 감소를 보입니다.
5. 향후 실험 방향성 및 해결하지 못한 과제
GPTQ는 몇 가지 중요한 한계점을 가지고 있습니다.
- 계산 효율성: 현재 GPTQ는 감소된 메모리 이동을 통해 속도 향상을 얻지만 실제 곱셈에 대한 계산 감소로 이어지지는 않습니다. 이는 주류 아키텍처에서 혼합 정밀도 피연산자(예: FP16 x INT4)에 대한 하드웨어 지원이 부족하기 때문입니다. 향후 연구에서는 신중하게 설계된 GPU 커널을 통해 이를 달성할 수 있을 것으로 믿고 있습니다.
- 활성화 양자화: 현재 결과는 활성화 양자화를 포함하지 않습니다. 이는 타겟 시나리오에서 중요한 병목 현상이 아니기 때문이지만, 기존 기술을 사용하여 지원할 수 있습니다. 생성 작업에 초점을 맞추고 있어, 더 광범위한 응용 프로그램에는 활성화 양자화가 필요할 수 있습니다.
- 비생성 작업 및 대규모 배치: 현재 커널은 낮은 배치 크기에서 생성형 추론을 타겟으로 하며, 기본 행렬-벡터 곱이 메모리 제한적입니다. 비생성 및 대규모 배치 응용 프로그램의 경우 연산이 계산 제한적일 수 있어 커널이 직접 적용되지 않을 수 있습니다. 그러나 이러한 경우 곱셈 계산 전에 행렬을 압축 해제하는 것이 가능하며, 이는 상대적으로 무시할 수 있는 오버헤드를 발생시킵니다.
- 편향 효과 및 이차 지표: 연구는 perplexity와 같은 "선도적 정확도" 지표에 초점을 맞추었습니다. 압축이 이차 지표, 특히 편향 효과에 미치는 영향에 대한 철저한 연구가 필요하며, 이 작업을 통해 더 쉽게 수행할 수 있을 것입니다.
- 접근성과 책임: 이 작업은 극도로 정확한 언어 모델을 더 넓은 청중이 사용할 수 있게 만듭니다. 이는 좋은 면과 나쁜 면이 모두 있습니다. 시간이 지나면서 이러한 도구는 사용하고 배포하기가 훨씬 쉬워질 것이므로, 그들의 힘과 한계를 이해하는 것이 더욱 중요해집니다.
- 극단적 압축의 추가 탐구: 2비트 및 삼진 양자화의 초기 결과는 고무적이지만, 이러한 극단적인 압축 수준을 매우 큰 언어 모델에 적용하는 것에 대한 추가 연구가 필요합니다. FPGA와 같은 맞춤형 하드웨어에서 효율적인 구현을 위한 패턴 개발이 향후 방향이 될 수 있습니다.
전반적으로 GPTQ는 진정으로 대규모 언어 모델을 양자화하는 근사적 2차 방법을 제시하며, 공개적으로 사용 가능한 가장 큰 모델들을 3비트 및 4비트로 정확하게 압축할 수 있어 낮은 정확도 손실로 상당한 사용성 개선과 엔드투엔드 속도 향상을 가져옵니다. 저자들은 이 방법이 이러한 모델을 더 많은 연구자와 실무자가 접근할 수 있게 만들 것으로 기대하며, 향후 연구를 자극하고 이러한 모델을 더 넓은 청중이 사용할 수 있도록 하는 추가 단계가 될 수 있기를 희망합니다.