Эффективные методы реализации моделей ИИ
Занятие 07 · MNIST на sim8 v3
Квантование (quantization) — разделение величины на дискретное число малых частей.
| Виды | Про что это? | |
|---|---|---|
| Структура | Scalar / Vector | Кодируем числа по одному или группой? |
| Сетка | Uniform / Non-uniform | Равномерные шаги или переменные? |
| Гранулярность scale | per-tensor / per-channel / per-group / per-token / per-element | Сколько значений делят один scale? |
Равномерная (uniform)
$$Q(x) = \text{clamp}\!\left(\text{round}\!\left(\frac{x}{s}\right) + z,\; 0,\; 2^b{-}1\right)$$
$$\hat{x} = s \cdot (Q(x) - z)$$
Неравномерная (non-uniform)
Сетка сгущается в областях, где значений больше — обычно у нуля.
Float-форматы — логарифмическая сетка: мелкие числа представлены точнее.
Векторная квантизация
Квантуем не отдельные числа, а группы (векторы) целиком.
k-means: найти $2^b$ центроидов из данных, хранить индексы ($b$ бит) + таблицу центров.
MXFP — Microscaling
Группа из $k$ элементов делит один общий scale (shared exponent).
Каждый элемент хранится в узком float (FP8, FP6, FP4), а scale — в более широком формате (E8M0).
Blackwell (B200), Huawei Ascend A5 — нативная поддержка MXFP.
Outlier'ы
Outlier'ы растягивают диапазон
$[0.1,\; 0.3,\; 0.2,\; 0.4,\; 0.15,\; 0.25,\; 0.35,\; 47.0]$
range = 46.9 → scale ≈ 0.184
Числа 0.1–0.4 → уровни 0–2
Результат
Один outlier убил точность для 7 из 8 чисел.
Ошибка 50–100% для нормальных значений
Чем особенная?
Линейный слой
$$\mathbf{y} = \sigma(\mathbf{W}\mathbf{x} + \mathbf{b})$$
$\mathbf{W} \in \mathbb{R}^{m \times n}$ — веса, $\mathbf{x}$ — активации (вход), $\mathbf{b}$ — смещение
Что квантовать?
PTQ
Post-Training Quantization
QAT
Quantization-Aware Training
SmoothQuant
Разобрать SmoothQuant
Xiao et al., 2023 — Abstract + Section 3
Ключевая формула
$$Y = (X \cdot \text{diag}(s)^{-1}) \cdot (\text{diag}(s) \cdot W)$$