В этом материале
Температура 0 в SGLang не гарантирует одинаковый ответ при изменении состава batch.
Температура 0 в SGLang не гарантирует одинаковый ответ при изменении состава batch. Greedy выбор зависит от вычисленных logits, а порядок численных операций может влиять на них. Для проверки воспроизводимости сравните один и тот же запрос отдельно и рядом с другими запросами. Прежде чем объявлять расхождение ошибкой модели, установите поддерживаемый deterministic путь и ограничения используемого backend, кэша и версии движка.
Разведите sampling и вычисления
Greedy sampling устраняет случайный выбор из распределения, но не все источники различий исполнения. Руководство SGLang объясняет batch-dependent поведение и отдельные возможности deterministic inference. Не делайте из одного повторенного ответа вывод о гарантии побитового совпадения. Сохраните параметры sampling, revisions и окружение. Особенно важно отличать одинаковые входные tokens от просто похожего текста: изменение template или tokenizer способно внести расхождение раньше любых численных операций и требует другой диагностики.
Сверьте поддержку выбранного пути
Deterministic режим следует проверять по матрице features конкретного релиза. Описание attention backends помогает установить допустимые сочетания. Включенный флаг не доказывает одинаковые гарантии для всех 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; Воспроизводимый стек инференса: как сохранить результат GPU-пилота.