Процедура жадного декодирования в LLMах на каждом шаге выбирает токен с наибольшей вероятностью, и, казалось, бы должна быть полностью детерминированной. Выдавать один и тот же ответ на разных размерах батча, GPU. Но не тут то было…
Корень зла в том, что арифметические операции в конечной точности не ассоциативны из-за точности округления:
(a + b) + c вообще говоря не a + (b + c)
Исполняться они могут в разном порядке, что и приводит к недетерминированным выходам.
Для FP32 проблема стоит еще не так остро из-за большой мантиссы, но для BF16 c 7 битами мантиссы эффект может быть вполне осязаемым.
Дабы оценить разброс в зависимости от экспериментальной конфигурации, авторы подготовили 12 конфигураций: 2 типа GPU, распараллеливанием на 2 и 4 GPU и 3 варианта размера батча и для каждого из них посчитали метрики на бенчах.
🧪Эксперименты
Рассматривают 2 ризонящие модели:
- DeepSeek-R1-Distill-
- Qwen-7B, DeepSeek-R1-Distill-Llama-8B
и 2 неризонящие:
- Qwen2.5-7B-Instruct
- Llama-3.1-8B-Instruct
И замеряют на всяком там AIME и LiveCodeBench.
И обнаруживают следующее:
📌 При жадном декодировании разброс для BF16 довольно нетривиален - 1%, а то и 5-9% для ризонящих моделей. Для FP16 разброс меньше, и для FP32 еще меньше. Примечательно, что для дистиллов дипсика разброс даже для FP32 иногда нетривиален.
📌 Средняя выходная длина может очень сильно варьироваться от конфигурации. До 9000 токенов на AIME.
Авторы присматриваются к вероятностям логитов моделей и замечают, что зачастую разница между top-1 и top-2 невелика. В особенности, для рассуждающих моделей. И изменения последнего значащего бита может быть достаточно, что изменить предсказание следующего токена.
💡 Выводы
Учитывая приведенные выше нюансы, авторы утверждают, что для хорошей воспроизводимости необходимо инферить в более высокой точности, что, конечно, потребует больших вычислительных затрат, но, мол, куда деваться. Дабы не хранить чекпоинт в FP32 весь в памяти, предлагается держать его в исходной точности, а затем делать upcast в FP32 на лету.
Мораль такова - эффект от конечной точности LLM вполне весомый, и если нужно выбить соту - вполне рабочая стратегия шатать размер батча и железо для инференса 😅.