Технологии

Что такое seed и почему ответы не повторяются

Seed фиксирует случайность выбора токена. Локально этого хватает для повтора ответа, у облачного провайдера — почти никогда, и причина не в seed.

Seed — это начальное значение генератора псевдослучайных чисел, из которого движок берёт «случайность» при выборе очередного токена. Зафиксировали seed — зафиксировали последовательность случайных чисел. Модель по-прежнему выбирает из распределения, но выбирает всегда одинаково.

Отсюда обещание: одинаковый seed — одинаковый ответ. На своей машине оно почти всегда выполняется. У облачного провайдера — почти никогда, и это не обман.

#Что должно совпасть, чтобы ответ повторился

Seed — лишь один из множителей. Полный список условий:

  1. Тот же файл весов, вплоть до варианта квантизации.
  2. Та же сборка движка и та же версия.
  3. То же железо и тот же бэкенд вычислений — CPU и GPU дают разные результаты округления.
  4. Полностью совпадающий контекст, включая системный промпт и все пробелы в нём.
  5. Те же параметры сэмплинга: температура, top-p, top-k, штрафы.
  6. Тот же seed.
  7. Тот же размер батча и то же состояние KV-кэша.

Нарушьте любой пункт — и ответ разойдётся. Причём разойдётся он не плавно: достаточно одного шага, где два кандидата почти равны, чтобы дальше текст пошёл совсем в другую сторону.

#Почему облако не повторяется даже с seed

Источник расхождения Есть локально Есть в облаке
Другой seed управляется вами часто не принимается вовсе
Обновление версии модели вы решаете, когда происходит молча
Смена железа под запросом нет да, запрос уходит на любую свободную ноду
Динамическая пакетная обработка нет да
Маршрутизация экспертов в MoE детерминирована зависит от состава батча

Ключевая строка — пакетная обработка. Провайдер собирает запросы разных пользователей в один батч, чтобы загрузить GPU. Состав батча меняет порядок суммирования чисел с плавающей точкой, а такое сложение неассоциативно: (a + b) + c и a + (b + c) дают чуть разные результаты в последних разрядах. Разница ничтожна, но на шаге, где два кандидата отличаются в шестом знаке, она переворачивает выбор.

Поэтому seed у облачных провайдеров, где он вообще есть, документируется как «наилучшее усилие», а не как гарантия.

#Где путают

Заблуждение первое: температура ноль даёт детерминизм. Ноль убирает случайность выбора, но не убирает численный шум и не фиксирует версию модели. Локально этого обычно достаточно, в облаке — нет. Что температура делает на самом деле, разобрано в справке про температуру модели.

Заблуждение второе: невоспроизводимость — признак поломки. Это штатное свойство сэмплинга. Ненормально другое: когда ответы расходятся не в формулировках, а в фактах.

Заблуждение третье: если ответы разные, значит, сравнивать модели бессмысленно. Наоборот — просто сравнивать надо не один прогон, а серию. Прогоните каждый вопрос по пять раз и смотрите на долю верных ответов, а не на один текст; методика описана в разборе того, как тестировать модель на своих задачах.

#Частые вопросы

#Как зафиксировать seed локально?

В Ollama это options.seed в запросе или PARAMETER seed в Modelfile, в llama.cpp — ключ -s. Вместе с фиксированной температурой и неизменным промптом этого обычно хватает для повторения ответа на той же машине.

#Почему при одном seed ответы всё равно разные?

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

#Нужна ли воспроизводимость в обычной работе?

Для диалога — нет. Она нужна в двух местах: при отладке (иначе непонятно, помогла ли правка промпта) и при замерах скорости, где разная длина ответа искажает результат; про это — в разборе того, как измерить скорость LLM.

#Влияет ли seed на качество ответа?

Не влияет. Он выбирает одну траекторию из множества примерно равнокачественных. Если при разных seed ответы отличаются по правильности, это говорит о том, что задача на границе возможностей модели, а не о том, что бывают «удачные» seed.

Что вообще происходит в момент генерации ответа — в справке про инференс. Полный словарь — в глоссарии терминов ИИ.

Хотите ИИ, который помнит вас?

Persona держит контекст между чатами и работает на вашем железе — если развернуть её у себя и подключить локальную модель.

Создать аккаунт