---
title: "SmoothQuant: Accurate and Efficient Post-Training Quantization for Large Language Models"
title_ru: "SmoothQuant: Точная и эффективная PTQ для LLM через сглаживание активаций"
authors: [Xiao, Lin, Seznec, Wu, Demouth, Han]
year: 2023
venue: "ICML"
venue_tier: "A*"
doi: "2211.10438"
tags: [quantization, ptq, w8a8, activation_quantization, smoothing, transformers]
relevance_to_smartrep: 2
direction: "🅲"
---

# SmoothQuant: W8A8 квантизация через сглаживание активаций

## TL;DR (≤3 предложения)

SmoothQuant решает проблему квантизации активаций трансформеров: активации имеют "выбросные" каналы с огромным масштабом, которые деградируют при INT8. SmoothQuant переносит "сложность квантизации" от активаций к весам через математически эквивалентное per-channel масштабирование: $Y = (X \text{diag}(s)^{-1}) \cdot (\text{diag}(s)W)$. Позволяет достичь W8A8 (и активации, и веса в INT8) без потери качества.

## Проблема

W8A16 (веса INT8, активации FP16) работает хорошо. W8A8 (оба INT8) деградирует из-за outlier-каналов в активациях трансформеров — нельзя просто взять min/max range. Outliers существуют в фиксированных каналах (systematic) — можно компенсировать статически.

## Гипотеза / вклад

- **Migration of quantization difficulty:** умножить активации на $1/s$ (уменьшить outliers) и веса на $s$ (компенсировать) — математически эквивалентная трансформация, но квантизировать обе стороны теперь легче.
- **Per-channel static scaling:** $s_j = \max(|X_j|)^\alpha / \max(|W_j|)^{1-\alpha}$, $\alpha \in [0.5, 1.0]$ — баланс между "гладкостью" активаций и весов.
- **Hardware-friendly W8A8:** оба операнда INT8 → полное использование INT8 hardware (Tensor Cores, NPU).

## Метод

Исходное матмул: $Y = XW$.

После трансформации: $Y = \hat{X}\hat{W}$, где $\hat{X} = X \cdot \text{diag}(s)^{-1}$, $\hat{W} = \text{diag}(s) \cdot W$.

Квантизируем $\hat{X}$ и $\hat{W}$ независимо в INT8 — теперь outliers убраны из активаций.

Scaling factor $s$ определяется из calibration data статически — не нужен при инференсе.

## Датасеты

| Модель | Задача | W8A8 (baseline) | W8A8 SmoothQuant |
|---|---|---|---|
| OPT-6.7B | WikiText-2 PPL | 14.8 | 10.93 (vs FP16: 10.86) |
| LLaMA-7B | WikiText-2 PPL | 8.23 | 5.73 (vs FP16: 5.68) |
| Throughput | GPU A100 | 1× | 1.56× vs FP16 |

## Сравнение с SOTA

Первый W8A8 метод с качеством близким к FP16 для LLM. 1.56× throughput vs FP16 на A100.

## Ограничения / слабости

- Ориентирован на LLM — для CV трансформеров outlier паттерны отличаются.
- Calibration data нужен (небольшой).
- W8A8 в 2× размер vs W4A8 — компромисс accuracy/size.

## Релевантность SmartRep

- **W8A8 для ViT-backbone 🅲:** ViTPose, MotionBERT, TinyViT — трансформеры с аналогичными outlier-активациями. SmoothQuant принцип прямо применим для W8A8 PTQ.
- **NPU utilization:** Qualcomm AI Hub и Apple ANE оптимально работают с INT8 для обеих операндов — SmoothQuant включает это преимущество.
- **Практический результат:** SmoothQuant-MotionBERT = W8A8, 2× меньше памяти, 1.5× быстрее vs FP16 на NPU — важный инженерный результат для SmartRep paper.

## Gap для нас

SmoothQuant не применялся к temporal CV моделям. **Ниша SmartRep:** SmoothQuant для скелетных трансформеров (MotionBERT, SkeletonMAE) — характеризация outlier-каналов в skeleton temporal attention и оптимальный $\alpha$ для смягчения.

## Код / данные

- Repo: github.com/mit-han-lab/smoothquant
- Pretrained: нет

## Цитата (BibTeX)

```bibtex
@inproceedings{xiao2023smoothquant,
  title={SmoothQuant: Accurate and Efficient Post-Training Quantization for Large Language Models},
  author={Xiao, Guangxuan and Lin, Ji and Seznec, Mickael and Wu, Hao and Demouth, Julien and Han, Song},
  booktitle={International Conference on Machine Learning},
  year={2023}
}
```
