alterna ai
ALTERNA AI / ГЛАВА 20 · 03

20.3 Запускаем изученную цепочку

На предыдущей странице: проверяем совместимость частей.

Загрузим совместимые части и получим продолжение при неизменных весах. Исправления обучения сюда не относятся.

Совместимость словаря, параметров и runtime проверяется до запуска. Происхождение ответа и запреты действий входят в проект наравне с прямым расчётом. Финал соединяет знакомое.

Собираем знакомые блоки

Decoder исполняет явную policy поверх logits

Generation связывает неизменяемые weights с tokenizer, prompt template и sampling policy. На каждом шаге runtime получает logits последней позиции, применяет разрешённые преобразования, строит распределение и выбирает следующий token. EOS завершает последовательность раньше лимита, а max_new_tokens ставит жёсткую границу, если EOS не выбран. Причина остановки является частью ответа, а не догадкой по длине текста.

Для воспроизводимого fixture используется отдельный экземпляр random.Random, поэтому пример не меняет глобальное состояние случайных чисел. Categorical sampling проходит по cumulative probability в фиксированном порядке IDs. Последний кандидат служит защитой от малой ошибки суммы floating-point; production runtime дополнительно проверяет конечность, неотрицательность и нормировку вероятностей.

Продолжение. Stepper показывает prompt IDs, logits, преобразованное распределение, random draw, выбранный ID и stop reason. Повтор с тем же seed проверяет реализацию policy, но интерфейс отдельно отмечает greedy и stochastic режимы. Streaming публикует только подтверждённые tokens и завершает поток структурированным событием с usage и причиной остановки.

Граница применимости. Повторяемая выборка не означает правильный или безопасный ответ. Одинаковый seed может дать иной результат после смены kernel, precision, tokenizer или порядка операций. Temperature, top-p и penalties входят в контракт целиком и в определённом порядке; их нельзя сравнивать по одному числу без одинаковых logits и workload.

from random import Random

def generate_20c(seed_20c, maximum_20c=4):
    rng_20c = Random(seed_20c)
    choices_20c = [('A', 0.5), ('B', 0.3), ('<eos>', 0.2)]
    output_20c = []
    for _step_20c in range(maximum_20c):
        draw_20c, cumulative_20c = rng_20c.random(), 0.0
# Полный исполняемый пример — по ссылке ниже.

Код повторяет только что разобранные операции. Полный проверяемыйPython-пример главы доступен отдельным файлом; показанный короткий фрагмент не заменяет его реализацию.

Runtime выполняет read-only forward и bounded generation.

Откуда взято каждое сведение. Как этот вопрос продолжает полученный результат?

Python-примеры главы 20 Академическая база →