논문 리뷰 / LLM / Post-Training Quantization / W8A8 / INT8 Inference / SmoothQuant
https://arxiv.org/abs/2211.10438
Guangxuan Xiao, Ji Lin, Mickael Seznec, Hao Wu, Julien Demouth, Song Han · MIT / NVIDIA
SmoothQuant: Accurate and Efficient Post-Training Quantization for Large Language Models
Large language models (LLMs) show excellent performance but are compute- and memory-intensive. Quantization can reduce memory and accelerate inference. However, existing methods cannot maintain accuracy and hardware efficiency at the same time. We propose
arxiv.org
LLM에서 activation outlier 때문에 어려웠던 W8A8 post-training quantization 문제를, activation의 양자화 난이도를 weight 쪽으로 수학적으로 등가 이동시켜 해결한 논문이다.
1. 왜 이 논문이 중요한가
대규모 언어모델은 성능이 뛰어나지만, 실제로 서빙하기에는 매우 비싸다. 모델 파라미터가 수십억에서 수천억 단위로 커지면 GPU memory, memory bandwidth, matrix multiplication latency가 모두 병목이 된다. 특히 LLM inference에서는 모델을 한 번 로드하는 데 필요한 메모리도 크고, autoregressive decoding 과정에서 반복적으로 수행되는 matrix multiplication 비용도 크다.
이 문제를 해결하기 위한 대표적인 방법이 quantization, 즉 양자화다. FP16이나 BF16으로 표현된 weight와 activation을 INT8 같은 낮은 bit-width로 바꾸면 메모리 사용량을 줄이고, 하드웨어가 제공하는 integer 연산을 활용해 inference를 빠르게 만들 수 있다. 이 중에서도 weight와 activation을 모두 8-bit로 바꾸는 W8A8 quantization은 memory saving과 speedup을 동시에 노릴 수 있어 실용적으로 매우 중요하다.
하지만 LLM에서 W8A8은 쉽지 않다. Weight만 INT8로 바꾸는 것은 비교적 안정적이지만, activation까지 INT8로 바꾸면 정확도가 크게 무너지는 경우가 많다. 핵심 원인은 activation outlier다. LLM의 activation에는 특정 channel에서 매우 큰 값이 지속적으로 나타나며, 이 outlier가 quantization scale을 지배한다. 그 결과 대부분의 일반적인 activation 값은 INT8 grid에서 낮은 해상도로 표현되어 정보 손실이 커진다.
SmoothQuant의 핵심 질문은 단순하면서도 날카롭다. “Activation은 양자화하기 어렵고 weight는 상대적으로 양자화하기 쉽다면, activation의 어려움을 weight로 옮길 수 없을까?” 논문은 activation channel을 작게 scaling하고, 그에 대응되는 weight channel을 반대로 크게 scaling하면 전체 linear layer의 floating-point 출력은 동일하게 유지된다는 점을 이용한다. 즉, 모델 function은 보존하면서 activation distribution을 더 quantization-friendly하게 만드는 것이다.

기존 LLM PTQ에서는 activation outlier 때문에 activation INT8 quantization이 어려웠다. SmoothQuant는 activation outlier를 weight 쪽으로 수학적으로 등가 이동시켜, weight와 activation을 모두 INT8로 양자화하는 W8A8 inference를 가능하게 만든다.
2. LLM 양자화에서 W8A8이 중요한 이유
LLM quantization은 크게 weight-only quantization과 weight-activation quantization으로 나눌 수 있다. Weight-only quantization은 weight를 INT8 또는 INT4 등으로 낮추고 activation은 FP16/BF16으로 유지한다. 이 방식은 모델 저장 메모리를 줄이는 데 효과적이지만, activation이 여전히 high precision이기 때문에 모든 compute-intensive matrix multiplication을 완전한 INT8 kernel로 실행하기 어렵다.
반면 W8A8 quantization은 weight와 activation을 모두 INT8로 표현한다. 이렇게 되면 Transformer block에서 가장 큰 연산량을 차지하는 linear layer와 attention BMM을 INT8 arithmetic으로 실행할 수 있다. 즉, 단순히 모델을 작게 저장하는 것을 넘어 실제 inference latency와 throughput을 개선할 수 있다.
| Weight | Activation | 장점 | 한계 | |
|---|---|---|---|---|
| Weight-only Quantization | INT8 / INT4 | FP16 / BF16 | 모델 저장 메모리 절감 | activation이 high precision이라 INT8 GEMM 이점 제한 |
| Naive W8A8 Quantization | INT8 | INT8 | memory와 latency 모두 개선 가능 | activation outlier 때문에 정확도 붕괴 가능 |
| SmoothQuant | INT8 | INT8 | activation outlier를 smoothing하여 W8A8 가능 | calibration과 migration strength 선택 필요 |
SmoothQuant가 중요한 이유는 단순히 “모델을 INT8로 줄였다”가 아니다. 더 정확히는 정확도와 하드웨어 효율성을 동시에 만족하는 LLM W8A8 PTQ 방법을 제시했다는 점에 있다. 기존 방법은 정확도를 유지하면 mixed precision overhead 때문에 느려지거나, 하드웨어 친화적으로 만들면 정확도가 무너지는 문제가 있었다. SmoothQuant는 이 trade-off를 activation smoothing으로 완화한다.
3. Quantization granularity: per-tensor, per-token, per-channel
SmoothQuant를 이해하려면 먼저 quantization granularity를 이해해야 한다. 같은 INT8 quantization이라도 scale을 tensor 전체에 하나만 쓰는지, token별로 쓰는지, channel별로 쓰는지에 따라 정확도와 구현 효율이 크게 달라진다.
Per-tensor quantization은 tensor 전체에 하나의 scale을 사용한다. 구현이 가장 단순하고 효율적이지만, outlier가 하나라도 있으면 전체 scale이 그 outlier에 맞춰진다. Per-token quantization은 activation의 token dimension마다 다른 scale을 사용한다. Per-channel quantization은 channel마다 다른 scale을 사용하므로 outlier channel 문제를 가장 잘 다룰 수 있지만, activation의 input-channel 방향 per-channel scaling은 일반적인 INT8 GEMM kernel과 잘 맞지 않는다.

원논문 Table 1은 activation quantization scheme별 정확도를 비교한다. Per-channel activation quantization은 FP16에 가까운 정확도를 유지하지만, INT8 GEMM kernel과 호환되기 어렵다. 이 지점이 SmoothQuant의 핵심 출발점이다. Activation outlier는 channel 단위로 나타나므로 per-channel activation quantization이 정확도 측면에서는 좋다. 하지만 하드웨어 효율이 낮다. SmoothQuant는 이 문제를 activation을 직접 per-channel quantization하지 않고, equivalent transformation으로 우회한다.

4. Activation outlier가 왜 문제인가
Uniform quantization에서는 일반적으로 tensor의 최대 절댓값을 기준으로 quantization scale을 정한다. 문제는 activation에 매우 큰 outlier가 존재할 때다. 일부 channel의 값만 비정상적으로 크면, scale이 그 outlier에 맞춰지고 대부분의 일반적인 값은 INT8의 매우 좁은 구간에 몰린다. 결국 8-bit를 쓰는 것처럼 보여도 실제로는 대부분의 값이 2~3개의 effective level만 사용하는 상황이 생긴다.
원논문 Figure 2는 이 직관을 보여준다. 원래 activation X에는 outlier가 있어 quantization range가 크게 늘어나고, non-outlier 값들은 낮은 effective bits로 표현된다. SmoothQuant는 이 scale variance를 activation에서 weight W로 이동시킨다. 그 결과 smoothed activation X̂와 adjusted weight Ŵ가 모두 quantization하기 쉬운 형태가 된다.

원논문 Figure 4는 OPT-13B의 특정 linear layer에서 input activation과 weight magnitude를 SmoothQuant 적용 전후로 시각화한다. 원래 activation에는 magnitude가 70을 넘는 매우 큰 channel이 존재하고, 한 activation channel 내부의 variance는 작다. Weight distribution은 상대적으로 flat하고 uniform하다. SmoothQuant를 적용하면 activation의 outlier는 크게 완화되고, 그 난이도는 weight로 이동한다. 하지만 이동 후에도 weight는 여전히 비교적 smooth하고 flat한 상태를 유지한다.

5. SmoothQuant의 핵심 수식
Transformer의 linear layer는 기본적으로 activation X와 weight W의 matrix multiplication으로 표현된다. SmoothQuant는 activation channel에 smoothing factor를 적용하고, weight에는 그 반대 방향의 scaling을 적용한다. 이때 floating-point 연산 기준으로는 linear layer의 출력이 바뀌지 않는다.
여기서 s는 channel-wise smoothing factor다. Activation X는 s로 나누어 outlier magnitude를 줄이고, weight W는 s를 곱해 그 효과를 보상한다. 따라서 FP 연산에서는 원래 모델과 동일한 function을 계산한다. 하지만 INT8 quantization을 적용하면 두 표현의 quantization error가 달라진다. SmoothQuant는 activation quantization error를 줄이고 weight quantization error를 조금 늘리는 방향으로 모델을 재parameterization한다.
이 방식이 가능한 이유는 weight가 activation보다 양자화에 강하기 때문이다. Weight는 고정되어 있고, distribution을 사전에 정확히 알 수 있으며, per-channel weight quantization도 하드웨어 친화적으로 적용할 수 있다. 반면 activation은 입력에 따라 변하고 outlier가 심하기 때문에 양자화하기 어렵다. SmoothQuant는 이 비대칭성을 이용한다.
6. Smoothing factor와 migration strength α
SmoothQuant에서 중요한 hyperparameter는 migration strength α다. α는 activation의 quantization difficulty를 weight 쪽으로 얼마나 이동시킬지 결정한다. α가 너무 작으면 activation outlier가 충분히 줄어들지 않고, α가 너무 크면 weight magnitude가 커져 weight quantization이 어려워진다.
α=0이면 activation의 어려움을 거의 weight로 옮기지 않는다. α=1이면 activation의 어려움을 거의 전부 weight로 옮긴다. 원논문에서는 대부분의 OPT와 BLOOM 모델에서 α=0.5가 균형점으로 잘 작동한다고 설명한다. GLM-130B처럼 activation outlier가 더 심한 모델은 더 큰 α를 사용할 수 있다.

| 의미 | 예상 효과 | 주의점 | |
|---|---|---|---|
| α가 작음 | activation 난이도를 적게 이동 | weight quantization은 쉬움 | activation outlier가 남아 정확도 손실 가능 |
| α가 중간 | activation과 weight 사이의 난이도 균형 | 두 쪽 모두 quantization-friendly | 일반적으로 가장 안정적 |
| α가 큼 | activation 난이도를 많이 weight로 이동 | activation은 매우 smooth해짐 | weight quantization error 증가 가능 |
7. SmoothQuant는 어떤 연산을 INT8로 바꾸는가
LLM의 Transformer block에서 연산량의 대부분은 linear layer와 attention의 batched matrix multiplication에서 발생한다. SmoothQuant는 self-attention의 Q, K, V projection, output projection, feed-forward network의 linear layers, attention BMM 같은 compute-intensive operator를 INT8로 수행할 수 있도록 설계한다.
다만 모든 연산을 무조건 INT8로 바꾸는 것은 아니다. LayerNorm, Softmax, activation function, residual addition 같은 element-wise 연산은 상대적으로 가볍고 정확도에 민감할 수 있으므로 FP16으로 유지한다. 즉, SmoothQuant는 큰 연산은 INT8로, 가벼운 연산은 FP16으로 유지하는 precision mapping을 사용한다.

이 설계는 정확도와 효율성의 균형을 위한 선택이다. LLM inference에서 latency와 memory를 지배하는 부분은 대규모 matrix multiplication이다. 이 부분을 INT8로 바꾸면 효과가 크다. 반면 LayerNorm이나 Softmax는 전체 비용에서 차지하는 비중이 작고, 무리하게 INT8로 낮추면 정확도와 안정성 문제가 생길 수 있다.
8. Baseline과 SmoothQuant-O1/O2/O3
논문은 SmoothQuant를 여러 baseline과 비교한다. 비교 대상은 naive W8A8, ZeroQuant, LLM.int8(), Outlier Suppression 등이다. SmoothQuant는 quantization setting에 따라 O1, O2, O3 세 가지 효율 수준을 제시한다. O1에서 O3로 갈수록 더 coarse하고 static한 quantization을 사용하므로 latency 측면에서 유리하지만, 정확도 유지 난이도는 더 높아진다.

여기서 중요한 차이는 LLM.int8()과 SmoothQuant의 처리 방식이다. LLM.int8()은 activation outlier를 FP16 mixed precision path로 따로 처리한다. 정확도는 유지할 수 있지만 mixed precision decomposition 때문에 latency overhead가 발생할 수 있다. SmoothQuant는 outlier를 별도 path로 분리하지 않고, activation outlier를 weight로 이동시켜 W8A8 INT8 GEMM을 직접 활용할 수 있게 한다.
9. OPT-175B 결과: Naive W8A8은 무너지고 SmoothQuant는 유지된다
SmoothQuant의 핵심 실험 중 하나는 OPT-175B에 대한 결과다. 원논문 Table 3은 SmoothQuant가 가장 공격적이고 효율적인 O3 setting에서도 OPT-175B의 정확도를 유지한다는 점을 보여준다. 반면 naive W8A8, ZeroQuant, Outlier Suppression은 LAMBADA accuracy가 0%에 가까워지거나 WikiText perplexity가 극단적으로 악화되는 등 사실상 성능이 무너진다.
이 결과는 LLM에서 activation quantization을 제대로 다루지 않으면 모델이 거의 random 수준으로 붕괴할 수 있음을 보여준다. 동시에 SmoothQuant의 activation-to-weight difficulty migration이 초대형 모델에서도 효과적임을 보여준다.

10. 서로 다른 LLM family에서도 작동하는가
논문은 SmoothQuant가 OPT에만 특화된 방법인지 확인하기 위해 BLOOM-176B와 GLM-130B에서도 실험한다. 원논문 Table 4는 SmoothQuant가 100B 이상의 공개 LLM들에서도 W8A8 quantization 후 정확도를 유지함을 보여준다.
다만 모델마다 quantization difficulty는 다르다. BLOOM-176B는 OPT-175B보다 상대적으로 양자화가 쉬운 모델로 나타나고, GLM-130B는 activation outlier 문제가 더 심해 어려운 모델로 나타난다. 그럼에도 SmoothQuant-O1/O2/O3는 baseline보다 안정적인 결과를 보인다.

11. 모델 크기가 달라져도 안정적인가
SmoothQuant는 175B 같은 초대형 모델뿐 아니라 더 작은 OPT 계열 모델들에서도 작동한다. 원논문 Figure 7은 OPT 모델 scale별로 SmoothQuant-O3가 정확도를 유지하는지 보여준다. 결과적으로 SmoothQuant-O3는 여러 scale의 OPT 모델에서 FP16 baseline에 가까운 accuracy를 유지한다.
이는 SmoothQuant가 특정 모델 크기 하나에만 우연히 맞는 방법이 아니라는 점을 보여준다. LLM activation outlier는 모델 scale이 커질수록 더 심각해질 수 있지만, SmoothQuant의 channel-wise smoothing은 다양한 scale에서 일관되게 효과를 보인다.

12. Instruction-tuned LLM, LLaMA, 최신 LLM에서도 적용 가능한가
원논문 v7에는 instruction-tuned model과 LLaMA 계열, 그리고 더 최근 모델들에 대한 결과도 포함되어 있다. Table 5는 OPT-IML-30B instruction-tuned model에 대한 결과다. Naive W8A8, ZeroQuant, Outlier Suppression은 성능이 크게 무너지지만, SmoothQuant-O3는 FP16에 가까운 LAMBADA accuracy와 WikiText perplexity를 유지한다.

Table 6은 LLaMA 모델에서의 W8A8 SmoothQuant 결과다. LLaMA 모델은 OPT나 BLOOM보다 activation outlier 문제가 상대적으로 덜 심한 것으로 관찰되지만, SmoothQuant는 LLaMA 7B, 13B, 30B, 65B에서도 WikiText-2 perplexity 기준으로 작은 성능 저하만 보인다.

Table 7은 Llama-2, Falcon, Mistral, Mixtral 모델에 대한 결과다. 논문은 SmoothQuant가 다양한 architecture의 최신 모델에서도 최소한의 loss로 W8A8 quantization을 가능하게 한다고 보고한다. 이 결과는 SmoothQuant가 OPT/BLOOM/GLM에만 국한되지 않는 일반적인 PTQ 방법임을 보여준다.

13. Speedup과 memory saving
SmoothQuant는 정확도 보존만 목표로 하지 않는다. 핵심은 실제 inference system에서 빠르게 실행되는 것이다. 논문은 PyTorch HuggingFace 구현과 FasterTransformer 구현 두 가지 backend에서 SmoothQuant를 평가한다.
원논문 Figure 8은 PyTorch 구현에서 SmoothQuant-O3의 latency와 memory 사용량을 보여준다. SmoothQuant는 OPT 모델에서 최대 1.51배 speedup과 1.96배 memory saving을 달성한다. 반면 LLM.int8()은 mixed-precision representation overhead 때문에 FP16보다 느려지는 경우가 많다.

원논문 Figure 9는 FasterTransformer 구현에서의 latency와 memory 사용량을 보여준다. 작은 모델에서는 SmoothQuant-O3가 FP16 대비 latency를 최대 1.56배 줄이고, 큰 모델에서는 절반 수의 GPU만 사용해도 비슷하거나 더 빠른 inference가 가능하다. Memory footprint 역시 FP16 대비 거의 절반으로 감소한다.

원논문 Table 8은 autoregressive decoding stage에서의 성능을 보여준다. SmoothQuant는 context stage뿐 아니라 decoding stage에서도 per-token decoding latency를 줄이고 memory footprint를 크게 낮춘다. 이는 실제 LLM serving에서 매우 중요하다. LLM은 prompt를 한 번 처리한 뒤 token을 하나씩 생성하므로, decoding stage latency가 사용자 경험에 직접적으로 영향을 준다.

14. 530B 모델 single-node serving 가능성
SmoothQuant의 실용적 의미가 가장 크게 드러나는 부분은 MT-NLG 530B 실험이다. 530B parameter 모델은 FP16으로 서빙하려면 막대한 GPU memory가 필요하다. SmoothQuant는 이 모델을 W8A8로 양자화해 정확도 손실을 거의 유지하면서 memory 사용량을 절반 수준으로 줄인다.
원논문 Table 9는 MT-NLG 530B를 W8A8로 양자화했을 때의 정확도 결과다. LAMBADA, HellaSwag, PIQA, WinoGrande 평균 성능이 FP16 대비 거의 동일하게 유지된다. 이는 SmoothQuant가 100B급을 넘어 500B급 모델에서도 동작한다는 점을 보여준다.

원논문 Table 10은 MT-NLG 530B serving에서 FP16과 INT8의 latency, memory, GPU 수를 비교한다. SmoothQuant는 FP16 serving에서 16 GPU가 필요하던 설정을 INT8에서는 8 GPU로 줄여, 8×A100 80GB 단일 node에서 530B 모델을 서빙할 수 있음을 보여준다.

15. Quantization scheme과 migration strength ablation
원논문 Table 11은 quantization scheme별 GPU latency를 비교한다. O1에서 O3로 갈수록 quantization granularity가 coarse해지고 dynamic에서 static으로 바뀌기 때문에 latency가 낮아진다. SmoothQuant는 모든 setting에서 FP16보다 낮은 latency를 보이며, LLM.int8()은 대부분 느리다.

원논문 Figure 10은 migration strength α에 따른 성능 변화를 보여준다. α가 너무 작으면 activation이 여전히 양자화하기 어렵고, α가 너무 크면 weight가 양자화하기 어려워진다. 따라서 중간 sweet spot에서 activation과 weight 모두 쉽게 양자화된다.

16. LLM.int8()과 SmoothQuant의 차이
SmoothQuant를 이해할 때 LLM.int8()과 비교하면 차이가 더 명확하다. LLM.int8()은 activation outlier를 별도의 FP16 path로 처리한다. 이 방식은 정확도 보존에는 효과적이지만, mixed precision decomposition이 필요하기 때문에 일반적인 INT8 GEMM만으로 처리하기 어렵고 latency overhead가 발생할 수 있다.
SmoothQuant는 다른 전략을 택한다. Outlier를 별도 path로 분리하지 않고, activation outlier를 weight로 이동시켜 activation 자체를 smooth하게 만든다. 따라서 compute-heavy matrix multiplication을 INT8-friendly한 형태로 실행할 수 있다.
| Outlier 처리 방식 | 정확도 | Hardware efficiency | 핵심 차이 | |
|---|---|---|---|---|
| LLM.int8() | outlier를 FP16 mixed precision path로 분리 | 높음 | mixed path overhead 가능 | outlier를 따로 보존 |
| SmoothQuant | activation outlier를 weight로 등가 이동 | 높음 | INT8 GEMM 활용 가능 | outlier를 smoothing하여 W8A8 가능 |
17. 논문을 읽으면서 생기는 의문과 해소 과정
이 논문을 읽으면서 가장 먼저 생기는 의문은 “activation outlier를 그냥 clipping하면 안 되는가?”이다. 단순 clipping은 outlier의 영향을 줄일 수 있지만, outlier 자체가 모델 성능에 중요한 정보를 담고 있을 수 있다. 무작정 잘라내면 정확도 손실이 발생한다. SmoothQuant는 outlier를 제거하지 않는다. Activation에서는 작게 만들고, 그만큼 weight에 반영해 원래 function을 유지한다.
두 번째 의문은 “activation을 줄이면 weight가 커지는데, weight quantization이 망가지지 않는가?”이다. SmoothQuant의 핵심 관찰은 weight가 activation보다 양자화에 훨씬 강하다는 점이다. Weight는 고정되어 있고 distribution을 사전에 정확히 알 수 있으며, activation보다 quantization scale 관리가 쉽다. 따라서 activation의 어려움을 weight로 일부 옮겨도 전체 quantization error는 줄어든다.
세 번째 의문은 “이 transformation이 모델 출력을 바꾸는 것 아닌가?”이다. FP 연산 기준에서는 바꾸지 않는다. XW와 (X/s)(sW)는 동일하다. 다만 INT8 quantization을 적용한 뒤에는 두 표현의 quantization error가 달라진다. SmoothQuant는 모델의 function을 바꾸는 것이 아니라, quantization-friendly한 equivalent representation으로 바꾸는 방법이다.
네 번째 의문은 “정확도는 유지되더라도 실제로 빨라지는가?”이다. SmoothQuant의 중요한 장점은 hardware-friendly하다는 점이다. Mixed precision outlier path를 사용하지 않고 compute-heavy operator를 INT8 arithmetic으로 처리할 수 있으므로, PyTorch와 FasterTransformer 구현에서 실제 speedup과 memory saving으로 이어진다.
다섯 번째 의문은 “SmoothQuant가 모든 low-bit quantization 문제를 해결하는가?”이다. 답은 아니다. 원논문은 주로 W8A8에 초점을 맞춘다. W4A4나 더 공격적인 activation quantization에서는 quantization error가 훨씬 커질 수 있으며, rotation, low-rank correction, group-wise quantization, mixed precision 등 추가 기법이 필요할 수 있다. 따라서 SmoothQuant는 LLM W8A8 PTQ의 대표적인 기준점으로 이해하는 것이 적절하다.
18. SmoothQuant의 강점
- Training-free PTQ다. 모델을 다시 학습하지 않고 calibration과 equivalent transformation만으로 적용할 수 있다.
- W8A8 quantization을 가능하게 한다. Weight뿐 아니라 activation도 INT8로 양자화해 INT8 GEMM을 활용할 수 있다.
- Activation outlier 문제를 정면으로 해결한다. LLM quantization의 핵심 병목인 activation outlier를 channel-wise smoothing으로 완화한다.
- 수학적으로 등가인 transformation을 사용한다. FP 기준 모델 function을 바꾸지 않고 quantization-friendly한 representation으로 바꾼다.
- Hardware efficiency가 좋다. Outlier를 별도 FP16 path로 처리하지 않고 일반 INT8 matrix multiplication으로 실행할 수 있다.
- 초대형 모델에 적용 가능하다. OPT-175B, BLOOM-176B, GLM-130B, MT-NLG 530B 등 대규모 LLM에서 적용 가능성을 보였다.
19. 한계
첫 번째 한계는 α 선택 문제다. SmoothQuant는 migration strength α에 따라 activation과 weight 사이의 difficulty migration 정도가 달라진다. 원논문에서는 비교적 안정적인 sweet spot을 보이지만, 실제 모델과 task에 따라 α calibration이 필요할 수 있다.
두 번째 한계는 calibration data 의존성이다. SmoothQuant는 training-free이지만 calibration-free는 아니다. Activation channel maximum을 측정하기 위해 representative text sample이 필요하다. Calibration distribution이 실제 inference distribution과 다르면 smoothing factor가 최적이 아닐 수 있다.
세 번째 한계는 8-bit 중심이라는 점이다. SmoothQuant는 W8A8에서 강력하지만, 4-bit 이하 aggressive quantization에서는 추가적인 error compensation이 필요할 수 있다. 특히 activation까지 4-bit로 낮추는 것은 W8A8보다 훨씬 어려운 문제다.
네 번째 한계는 실제 speedup이 hardware와 kernel 구현에 의존한다는 점이다. SmoothQuant가 INT8-friendly한 구조를 제공하더라도, 실제 latency 개선은 GPU architecture, INT8 kernel quality, batch size, sequence length, serving framework에 따라 달라진다.
다섯 번째로, SmoothQuant는 모델 architecture 자체를 줄이는 방법은 아니다. Parameter 수는 그대로이고 precision을 낮추는 방식이다. 따라서 pruning, distillation, sparsity, MoE routing 최적화와는 다른 축의 효율화 방법이다.
20. 후속 연구 관점에서의 의미
SmoothQuant는 LLM quantization 연구에서 중요한 기준점이 되었다. 특히 activation outlier를 어떻게 다룰 것인가라는 문제를 명확하게 제시했고, outlier를 제거하거나 high precision으로 분리하는 대신 weight로 migration하는 관점을 도입했다.
이후 여러 PTQ 연구는 SmoothQuant의 문제의식과 연결된다. 예를 들어 activation smoothing, rotation-based quantization, outlier channel 분산, group-wise quantization, adaptive scaling, low-bit weight-only quantization 등이 모두 LLM의 outlier와 quantization difficulty를 어떻게 다룰지에 대한 후속 흐름으로 볼 수 있다.
또한 SmoothQuant는 알고리즘과 시스템의 균형이 중요하다는 점을 보여준다. Quantization 논문은 metric만 좋아서는 부족하다. 실제로 빠르게 돌릴 수 있는 kernel-friendly한 구조여야 한다. SmoothQuant는 정확도, memory, latency, serving framework 통합을 모두 고려한 대표적인 LLM inference 최적화 연구다.
| 블로그 정리표 4 | 핵심 질문 | SmoothQuant와의 연결 |
|---|---|---|
| Low-bit PTQ | W4A16, W4A8, W4A4에서도 정확도를 유지할 수 있는가? | activation smoothing 관점이 더 낮은 bit-width로 확장될 수 있음 |
| Rotation-based Quantization | activation outlier를 rotation으로 분산할 수 있는가? | distribution을 quantization-friendly하게 변환한다는 관점 공유 |
| Serving Integration | TensorRT-LLM, ONNX Runtime, vLLM 등에 어떻게 통합할 것인가? | hardware-friendly W8A8 kernel 활용이 핵심 |
| Adaptive Smoothing | layer별·channel별 α를 자동 조정할 수 있는가? | SmoothQuant의 α selection 문제를 개선하는 방향 |
21. 구현 관점
SmoothQuant를 구현할 때 가장 중요한 것은 calibration이다. Representative text sample을 모델에 통과시키면서 각 linear layer 입력 activation의 channel-wise maximum absolute value를 수집한다. 이 통계가 smoothing factor s를 계산하는 데 사용된다.
다음으로 weight smoothing을 offline으로 수행한다. 각 linear layer의 weight에 channel-wise scaling을 적용해 smoothed weight를 만든다. 그런 다음 activation은 runtime에서 smooth한 distribution을 갖도록 처리하고, weight는 미리 smoothing된 상태로 INT8 quantization한다.
실제 구현에서는 tensor shape와 channel 방향을 정확히 맞추는 것이 중요하다. Linear layer에서 activation의 input channel과 weight의 대응 dimension이 맞아야 한다. 또한 inference kernel이 어떤 quantization granularity를 효율적으로 지원하는지도 함께 고려해야 한다.
| 해야 할 일 | 주의할 점 | |
|---|---|---|
| Calibration | 대표 text sample로 activation channel max 측정 | 실제 사용 데이터와 distribution 차이가 크면 성능 저하 가능 |
| Scale computation | activation max, weight max, α로 smoothing factor 계산 | α 값에 따라 activation/weight error trade-off가 달라짐 |
| Weight smoothing | diag(s)W를 offline으로 계산해 weight에 fold | layer별 shape와 channel 방향을 정확히 맞춰야 함 |
| INT8 inference | INT8 GEMM kernel로 matrix multiplication 수행 | 실제 speedup은 hardware와 serving framework에 의존 |
22. SmoothQuant를 직관적으로 이해하기
SmoothQuant는 “어려운 문제를 더 쉬운 쪽으로 옮기는 방법”으로 이해할 수 있다. Activation outlier 때문에 activation quantization이 어렵다. Weight는 상대적으로 quantization이 쉽다. 그러면 activation의 큰 값을 줄이고, 그만큼 weight의 값을 키워서 전체 연산 결과는 유지한다.
예를 들어 어떤 activation channel이 100처럼 매우 큰 값을 가지고 있어 INT8 scale을 망가뜨린다고 하자. SmoothQuant는 이 channel을 10으로 줄인다. 대신 해당 channel과 곱해지는 weight를 10배 키운다. Floating-point 연산 결과는 동일하다. 하지만 activation의 outlier는 줄어들었기 때문에 activation quantization이 쉬워진다. Weight는 커졌지만 weight는 activation보다 양자화에 강하므로 전체 손실은 줄어든다.
SmoothQuant는 “activation이 들고 있던 너무 큰 짐을 weight에게 나눠 들게 하는 방법”에 가깝다. Activation은 가벼워져 INT8로 표현하기 쉬워지고, weight는 조금 무거워지지만 그 정도는 감당할 수 있다.
23. 최종 정리
SmoothQuant: Accurate and Efficient Post-Training Quantization for Large Language Models는 LLM에서 W8A8 post-training quantization을 가능하게 만든 중요한 논문이다. LLM activation에는 특정 channel의 outlier가 존재하고, 이 outlier 때문에 activation INT8 quantization이 어렵다. SmoothQuant는 activation outlier를 직접 제거하지 않고, activation의 magnitude를 줄인 뒤 weight에 반대로 scaling을 적용해 전체 matrix multiplication 결과를 보존한다.
논문을 읽기 전에는 “왜 LLM은 일반적인 INT8 PTQ가 잘 안 되는가?”, “activation outlier를 clipping하면 안 되는가?”, “activation을 scaling하면 모델 출력이 바뀌지 않는가?”, “정확도는 유지되더라도 실제로 hardware에서 빨라지는가?” 같은 의문이 생긴다. SmoothQuant는 이 질문들에 대해 비교적 명확한 답을 준다. Activation outlier가 핵심 병목이고, 이를 weight 쪽으로 수학적으로 등가 이동시키면 FP function은 유지하면서 quantization error를 줄일 수 있다. 또한 W8A8 INT8 GEMM을 활용할 수 있기 때문에 hardware efficiency도 확보할 수 있다.
개인적으로 이 논문의 가장 좋은 점은 문제를 매우 현실적으로 바라본다는 점이다. LLM quantization은 단순히 낮은 bit로 값을 표현하는 문제가 아니다. 정확도, calibration, kernel efficiency, memory footprint, serving framework 통합까지 모두 고려해야 한다. SmoothQuant는 activation outlier라는 모델 내부 현상을 정확히 짚고, 이를 hardware-friendly한 방식으로 해결한다.
물론 SmoothQuant가 모든 양자화 문제를 해결하는 것은 아니다. α 선택, calibration data, 4-bit 이하 low-bit quantization, layer-wise sensitivity 같은 문제는 여전히 남아 있다. 그럼에도 SmoothQuant는 LLM W8A8 PTQ의 대표적인 기준점이며, LLM을 실제 서비스 환경에서 더 저렴하고 빠르게 배포하기 위한 핵심 연구 중 하나로 볼 수 있다.
SmoothQuant는 LLM activation outlier를 weight 쪽으로 수학적으로 등가 이동시켜 activation을 smooth하게 만들고, 이를 통해 정확도 손실을 거의 유지하면서 W8A8 INT8 inference를 가능하게 한 post-training quantization 논문이다.
원문 링크: https://arxiv.org/abs/2211.10438
코드 링크: https://github.com/mit-han-lab/smoothquant