Alterna · учебный материал

17.5 Приближённое хранение весов

Заменим множество точных значений меньшим набором кодов и масштабов. Это экономит память, но может внести ошибку восстановления.

Что в этом материале

Содержание и основные понятия

На предыдущей странице: несколько запросов используют общую вычислительную работу.
Заменим множество точных значений меньшим набором кодов и масштабов. Это экономит память, но может внести ошибку восстановления.
Первый запуск обрабатывает префикс. Каждый последующий добавляет одну позицию; K/V прошлых позиций можно сохранять. Выборка и сжатое хранение решают разные задачи.
Для изменения рисунка включитеJavaScript; расчёт и теория доступны далее.
Храним приближение на дискретной сетке
Symmetric per-tensor int8 quantization выбирает scale по максимальному модулю и округляет
x/s
в диапазон
[-127,127]
. Dequantization возвращает
sq
, обычно не равное исходному
x
. Zero представляется точно; один outlier растягивает шаг для всего tensor.
s
=
max
⁡
i
∣
x
i
∣
127
,
q
i
=
clip
⁡
(
round
⁡
(
x
i
/
s
)
,
−
127
,
127
)
,
x
^
i
=
s
q
i
.
s=\frac{\max_i|x_i|}{127},\quad
q_i=\operatorname{clip}(\operatorname{round}(x_i/s),-127,127),\quad
\hat x_i=sq_i.
s
=
127
max
i
​
∣
x
i
​
∣
​
,
q
i
​
=
clip
(
round
(
x
i
​
/
s
)
,
−
127
,
127
)
,
x
^
i
​
=
s
q
i
​
.
Per-channel scales уменьшают часть ошибки, но добавляют metadata и требования kernel. Weight-only, weight-activation и KV-cache quantization — разные contracts. SmoothQuant переносит трудность activation outliers эквивалентным rescaling; обычный fixture ниже
не является SmoothQuant
. F11.
Что показывает модель.
График показывает исходные значения, grid, codes и reconstruction error. Memory ledger обязан учитывать scales/zero-points/group metadata, а benchmark — фактически используемый kernel. Меньший файл без ускоренного kernel может не дать latency gain.
Граница применимости.
Малый max error одного tensor не доказывает сохранение end-task quality. Ошибки проходят через много layers; calibration data может не покрыть deployment distribution. «INT8» не определяет scheme полностью, а «4-bit model» не сообщает group size, compute dtype и quantized components.
values_17e=[-1.0,0.2,0.9]; scale_17e=max(map(abs,values_17e))/127
codes_17e=[max(-127,min(127,round(value/scale_17e))) for value in values_17e]
restored_17e=[code*scale_17e for code in codes_17e]
max_error_17e=max(abs(a-b) for a,b in zip(values_17e,restored_17e))
assert codes_17e==[-127,25,114] and max_error_17e<scale_17e/2
Код повторяет только что разобранные операции.
Полный проверяемыйPython-пример главы
доступен отдельным файлом; показанный короткий фрагмент не заменяет его реализацию.
Quantization показывает code, scale и reconstruction error.
Что хранится во время ответа. Как этот вопрос продолжает полученный результат?
Python-примеры главы 17
Академическая база →

Структурная карта учебников