alterna ai
ALTERNA AI / ГЛАВА 10 · 02

10.2 Размер записи и точность

На предыдущей странице: как записать число конечным числом битов.

Два формата могут занимать одинаковые два байта, но по-разному делить их между диапазоном и точностью.

Числа имеют конечную точность; их нужно хранить и переносить. Матричные блоки дают много независимой работы, но память и организация групп также влияют на результат.

Меньше битов — не одно и то же упрощение

FP16 имеет5exponent и10fraction bits, BF16 —8и7. BF16 сохраняет широкий exponent range, но возле1имеет более редкую сетку: шаг2^-7=.0078125 против2^-10=.0009765625 уFP16. Одинаковые16бит хранения не дают одинаковую точность. H02.

Округление nearest ties-to-even выбирает ближайшее представимое число, а при точной середине — вариант с чётным младшим битом. ДляFP16 значение1+2^-11 находится посередине между1и1+2^-10 и округляется к1. Значение1+3·2^-11 округляется к1+2·2^-10.

Минимальный положительный subnormal FP16 —2^-24, максимальное конечное —65504. Наш codec поддерживает gradual underflow. В H02 описаны конкретные TPU с flush-to-zero для BF16: это особенность исполнения, не поведение нашего абстрактного хранилища.

FP8 — семейство. Здесь реализован E5M2 с IEEE-like special values. E4M3 из H03 иначе расходует special encodings; нельзя просто сократить поля и объявить результат E4M3FN. Для INT8 в лаборатории явно выбран symmetric quantizer q=clamp(round(x/scale),−127,127), восстановление q·scale. Он не floating point и требует масштаба.

Исследовать. Сравните.1,1.0005,70000и очень малое значение. Разделите rounding error, underflow и overflow. Экономия байтов весов не означает, что accumulation тоже выполняется в том же формате: mixed precision часто сочетает низкую точность inputs с более точным аккумулятором.

import struct
half=lambda x:struct.unpack('>e',struct.pack('>e',x))[0]
assert half(1+2**-11)==1
assert half(1+3*2**-11)==1+2**-9
assert half(2**-24)==2**-24

Код повторяет только что разобранные операции. Полный проверяемыйPython-пример главы доступен отдельным файлом; показанный короткий фрагмент не заменяет его реализацию.

FP16:1/5/10;BF16:1/8/7. Codec хранения не определяет все особенности исполнения.

Много похожих действий одновременно. Как этот вопрос продолжает полученный результат?

Python-примеры главы 10 Академическая база →