﻿# Почему temperature 0 в SGLang не гарантирует одинаковый ответ

Температура 0 в SGLang не гарантирует одинаковый ответ при изменении состава batch.

Автор: Команда Retrivium
Обновлено: 2026-11-01
Канонический URL: https://retrivium.ai/ru/journal/sglang-deterministic-batch-invariance/
Language: ru

Температура 0 в SGLang не гарантирует одинаковый ответ при изменении состава batch. Greedy выбор зависит от вычисленных logits, а порядок численных операций может влиять на них. Для проверки воспроизводимости сравните один и тот же запрос отдельно и рядом с другими запросами. Прежде чем объявлять расхождение ошибкой модели, установите поддерживаемый deterministic путь и ограничения используемого backend, кэша и версии движка.

## Разведите sampling и вычисления

Greedy sampling устраняет случайный выбор из распределения, но не все источники различий исполнения. [Руководство SGLang](https://docs.sglang.io/docs/advanced_features/deterministic_inference) объясняет batch-dependent поведение и отдельные возможности deterministic inference. Не делайте из одного повторенного ответа вывод о гарантии побитового совпадения. Сохраните параметры sampling, revisions и окружение. Особенно важно отличать одинаковые входные tokens от просто похожего текста: изменение template или tokenizer способно внести расхождение раньше любых численных операций и требует другой диагностики.

## Сверьте поддержку выбранного пути

Deterministic режим следует проверять по матрице features конкретного релиза. [Описание attention backends](https://docs.sglang.io/docs/advanced_features/attention_backend) помогает установить допустимые сочетания. Включенный флаг не доказывает одинаковые гарантии для всех kernels и cache режимов. Укажите фактический backend и условия теста, включая prefix reuse. Если нужное сочетание не поддерживается, оформите ограничение явно. Не скрывайте его переходом на другой backend без записи, поскольку это одновременно меняет и условия производительности, и область проверяемого поведения.

## Пример теста batch invariance

Возьмите короткий вопрос с зафиксированными token IDs. Выполните его отдельно, затем в серии с другими короткими вопросами, затем рядом с длинным входом. Сохраните фактический вывод токен за токеном и индекс первого расхождения. Это структура эксперимента без заранее заданного результата. Если различается уже вход, вернитесь к рендерингу. Если вход одинаков, сопоставьте фактические пути исполнения и поддерживаемые deterministic настройки, прежде чем делать вывод о численной зависимости от состава пакета.

## Выберите критерий приемки

Для одних задач нужна точная последовательность, для других — одинаковая структура или предметный результат. Укажите требование заранее, не заменяя его после получения расхождения. Сравнение строк, token IDs и бизнес-валидности отвечает на разные вопросы. Если требуется точное совпадение, сохраняйте raw tokens вместе с текстом. Если допускается смысловая эквивалентность, сформулируйте проверяемое правило, а не оценивайте ответы впечатлением оператора. Отдельно измеряйте стоимость выбранного режима, не обещая отсутствие влияния на скорость и память.

## Сохраните область гарантии

Итоговый протокол включает engine version, model commit, tokenizer, backend, cache условия и формы batch. Повторите тест после обновления любого существенного компонента. Не переносите результат одной машины на все архитектуры GPU или платформы. Если расхождение воспроизводится, приложите минимальный fixture и точку первого отличия: это полезнее длинной истории нерегулярных ответов. Проверка должна отделять вариативность входа, sampling и численного выполнения, чтобы слово «детерминированность» не скрывало три разные задачи. Практический вывод может заключаться в ограничении состава execution paths для конкретной задачи, но он должен опираться на документированную поддержку и наблюдаемый повтор, а не на общее предположение, что temperature 0 отключает абсолютно все различия исполнения.

## Связанные материалы

[Continuous batching: почему несколько запросов меняют ценность GPU](/ru/journal/continuous-batching/); [Воспроизводимый стек инференса: как сохранить результат GPU-пилота](/ru/journal/software-stack-reproducibility/).
