Журнал · Rit.work

BF16 и FP16 расходятся даже при жадном декодировании

Смена формата вычислений может изменить ответ LLM без смены модели, запроса и GPU, а выборочный пересчёт выходного слоя частично возвращает стабильность.

Rit.work
Студия разработки
23 сентября 2026 г.3 мин чтения

Материал подготовлен автоматически по первоисточникам: ссылки на них — в конце статьи.

Один и тот же запрос к одной и той же LLM может дать разные ответы на одном GPU, даже когда генерация всегда выбирает самый вероятный следующий токен. В нерецензированном препринте, числа для которого получили сами авторы, при смене BF16 на FP16 разошлись ответы для 49–100% запросов. Формат вычислений поэтому стоит считать частью поведения модели, а не прозрачной настройкой производительности.

Почему одного различившегося токена достаточно

Жадное декодирование на каждом шаге выбирает токен с наибольшей числовой оценкой и не добавляет случайность. Поэтому его часто считают детерминированным: одинаковые модель и запрос должны давать одну последовательность.

BF16 и FP16 хранят промежуточные значения с ограниченной точностью и округляют их по-разному. Пока один кандидат заметно опережает другой, это не меняет выбор. Если две наибольшие оценки близки, небольшое расхождение в вычислениях может переставить кандидатов местами.

После первой замены модель продолжает генерацию уже с другим контекстом. Следующие вычисления получают другой вход, поэтому локальное расхождение часто превращается в полностью отличающуюся последовательность. Детерминирован сам выбор максимума, но не обязательно числа, среди которых он выбирает.

Накопленная ошибка в предшествующих выходному слою 22 слоях сама по себе не отделяла шаги, где токен менялся, от шагов без замены. Лучше результат объясняло соотношение двух величин: разрыва между оценками ведущих кандидатов и того, насколько округление сдвигало эти оценки относительно друг друга.

Это различие указывает и на место для вмешательства. Пересчитывать всю модель с более высокой точностью не обязательно, а более широкий переход на FP32 в экспериментах даже ухудшал совпадение. Важен не общий объём более точных вычислений, а их влияние на пару кандидатов возле границы выбора.

FP32 нужен только при малом разрыве между кандидатами

Лучший из проверенных недорогих способов повторно вычисляет в FP32 только выходной слой модели и только на неоднозначных шагах. Условием служит малый разрыв между двумя ведущими оценками. На уверенных шагах модель продолжает работать в исходном формате.

На A10G такой пересчёт повысил долю полностью совпадающих ответов между форматами на 22–36 процентных пунктов. На L4 и A100 прирост составил 12–21 пункт. Речь идёт именно о разнице в доле совпадений, а не об относительном процентном улучшении.

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

Способ остаётся частичной защитой. Он помогает, когда решающее расхождение возникает на выходном слое, но не возвращает детерминизм при любой причине численной ошибки. Более высокая точность также не образует простой шкалы, на которой каждое расширение FP32 последовательно улучшает совпадение.

Планы меняются там, где нужен дословно стабильный ответ

Работу проверяли на шести моделях, трёх бенчмарках и в основном диапазоне от 1,1 до 7 млрд параметров; поскольку этот материал основан только на абстракте, точную процедуру экспериментов и состав заданий из него восстановить нельзя. Этого достаточно, чтобы увидеть явление на нескольких конфигурациях, но недостаточно, чтобы переносить указанный прирост на любую LLM.

При пакете от восьми запросов польза вмешательства исчезала, когда основная ошибка приходила из предшествующих слоёв. То же произошло при сквозных вычислениях в FP8. Возможная причина различий между моделями — то, насколько устойчиво обучение прошло к смене численной точности, но в работе это остаётся гипотезой.

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

Если продукт сравнивает ответы с эталоном, воспроизводит журналы генерации или обещает дословную повторяемость, BF16 и FP16 нельзя считать взаимозаменяемой эксплуатационной настройкой. Формат следует фиксировать вместе с версией модели, а переход между форматами тестировать как изменение поведения.

Выборочный пересчёт выходного слоя можно включить в прототип для малых пакетов и проверить на собственной модели. Закладывать его как универсальную гарантию пока нельзя: при высокой пакетной нагрузке и сквозном FP8 граница ошибки смещается внутрь модели, где дешёвое вмешательство уже не помогает.

Источники

Пауза в чтении

Похоже на вашу задачу?

Расскажите, что собираете. За полчаса разложим на этапы и назовём сроки — это бесплатно и ни к чему не обязывает.

Rit.work

Студия разработки

Собираем мобильные приложения и помогаем командам получать от AI реальную пользу. Основатель и команда, работаем удалённо — с клиентами в России и за рубежом.

Ко всем материалам
Понравилось? Обсудим вашу задачу