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

20.2 Проверяем совместимость частей

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

Словарь, размеры таблиц и веса должны подходить друг другу. Совпадения названий файлов недостаточно.

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

Данные делятся до обучения и связываются с конфигурацией

Train pipeline должен отвечать, какие samples использованы, как они разделены и какой config породил checkpoint. Случайное разбиение после chunking способно поместить соседние части одного документа и в train, и в validation. Поэтому устойчивый ключ строят из ID исходного объекта, а bucket вычисляют детерминированно. Встроенный hash() Python не подходит: его salt может меняться между процессами; криптографический SHA-256 даёт стабильный результат для тех же bytes.

Validation split остаётся закрытым от optimizer и выбора отдельных ответов. При повторном запуске те же IDs обязаны попасть в те же множества независимо от порядка входного списка. Checkpoint для продолжения включает weights, optimizer/scheduler state, step и RNG states, а manifest связывает его с hashes данных, tokenizer и config. Одних весов достаточно для inference, но недостаточно для точного resume.

Продолжение. Lineage view соединяет source version, фильтрацию, split, batches, config hash, optimizer steps и checkpoint digest. Изменение одного параметра создаёт новый run ID, а resume проверяет совместимость до загрузки state. Метрики подписываются split и step: число без этой пары нельзя однозначно связать с состоянием модели.

Граница применимости. Stable split не предотвращает semantic duplicates, contamination из внешних benchmark и дрейф данных. Один seed не обеспечивает bitwise reproducibility между разными kernels и hardware. Успешное уменьшение validation loss не доказывает factuality, безопасность или полезность; эти свойства проверяются отдельными наборами после заморозки кандидата.

from hashlib import sha256

sample_ids_20b = [f'sample-{index_20b}' for index_20b in range(12)]
def split_name_20b(identifier_20b):
    bucket_20b = int(sha256(identifier_20b.encode('utf-8')).hexdigest(), 16) % 4
    return 'validation' if bucket_20b == 0 else 'train'

assignments_20b = {item_20b: split_name_20b(item_20b) for item_20b in sample_ids_20b}
# Полный исполняемый пример — по ссылке ниже.

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

Vocabulary order и shapes являются частью совместимости artifact.

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

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