NextStatNextStat

Конец эры скриптов

Мы больше не можем позволить себе публиковать «результат» как набор ручных команд и скриншот. Как только производительность становится аргументом (в статье, отчёте, заявке на ресурсы или релизе), единицей публикации должен быть не скрипт, а эксперимент: воспроизводимый прогон с явными входами, гейтами корректности и машиночитаемыми артефактами.

/7 мин. чтения
ВоспроизводимостьБенчмаркиНаучные вычисленияДоверие
Серия Trust Offensive:Оглавление·Назад: Trust Offensive·Следующий: Бенчмарк-снимки

Долгое время научный софт жил в мире скриптов: ноутбук, который скачивает данные, несколько вспомогательных функций, еще один график и «вот цифры».

Эта эпоха заканчивается не потому, что скрипты плохи, а потому, что выросла стоимость доверия. Когда итогом является число, которое влияет на решения (пределы исключения, открытия, утверждения или бюджеты на вычисления), недостаточно быть быстрым. Нужно быть воспроизводимо быстрым.

Бенчмарки — это место, где это изменение становится очевидным.


Аннотация. Единица публикации смещается от одной цифры к бенчмарк-снимку: неизменяемому набору артефактов с закрепленными окружениями, гейтами корректности, манифестами и сырыми распределениями. Это меняет то, как строится научный софт: детерминизм становится режимом, корректность становится гейтом, а CI становится издателем.


1.Режим отказа скриптов: производительность без протокола

Большинство скриншотов бенчмарков выглядят убедительно, и большинство неполны. Они редко отвечают:

  • Какой именно вход был использован?
  • Какие проверки корректности выполнены?
  • Включено ли время компиляции?
  • Что именно прогревалось?
  • Какие версии установлены?
  • Какие флаги включены?

Иными словами, это не описание эксперимента, а рассказ.

Это нормально для исследования. Это не нормально для доверия.


2.Бенчмарки как эксперименты

В NextStat мы рассматриваем производительность как научное утверждение. Утверждению нужны:

  • протокол — что измеряется и как
  • эталон — что значит «корректно»
  • закрепление окружения — что именно было запущено
  • артефакты — что другие команды смогут перезапустить

Поэтому бенчмарк-программа устроена вокруг гейтов корректности до тайминга, закрепленных тулчейнов и lock-файлов, публикации сырых результатов (а не только сводок), а также манифестов базовой линии и CI-артефактов. Каноническая спецификация: спецификация публичных бенчмарков.


3.Новая единица: бенчмарк-снимки (наборы артефактов)

Ключевой шаг: сделать так, чтобы прогон бенчмарка выдавал публикуемый набор артефактов, а не просто цифру. Минимально бенчмарк-снимок включает:

  • сырые измерения по тестам и повторам — чтобы были видны дисперсия и политика агрегации
  • результаты гейтов корректности — чтобы «быстро» означало «корректно по контракту»
  • манифест базовой линии — версии, железо, хеши наборов данных, флаги
  • индекс файлов с хешами — чтобы внешние проверяющие могли верифицировать загруженные байты

Важно: бенчмарк-снимок — это не «удобный формат хранения». Это контракт. Публикация считается корректной только если артефакты проходят валидацию JSON Schema, а индекс содержит SHA‑256 для каждого файла в директории снимка.

На практике директория снимка выглядит так:

text
manifests/snapshots/<snapshot_id>/
  baseline_manifest.json         # nextstat.baseline_manifest.v1 (окружение, commit харнесса, dataset ids+hashes)
  snapshot_index.json            # nextstat.snapshot_index.v1 (инвентарь путей + sha256)
  nextstat_wheel.whl             # опционально: зафиксированная сборка для DOI-публикации
  README_snippet.md              # краткая сводка (человекочитаемая, не заменяет JSON)
  README_snippet_pharma.md       # если запускался pharma suite (аналогично: bayesian/ml)
  hep/
    hep_suite.json               # suite индекс (cases + summary)
    cases/
      simple_workspace_nll.json  # per-case: parity + timing (raw repeats)
  pharma/                        # если suite запускался
    pharma_suite.json
    cases/…

В seed‑репозитории публикация выполняется скриптом benchmarks/nextstat-public-benchmarks/scripts/publish_snapshot.py. Он:

  • создаёт новый snapshot_id (если не задан), запрещая перезапись существующего каталога
  • запускает suite'ы (по умолчанию — HEP + pharma, если ни один флаг suite не указан явно)
  • делает fail-fast валидацию suite и per-case JSON по JSON Schema
  • пишет baseline_manifest.json через scripts/write_baseline_manifest.py
  • пишет snapshot_index.json через scripts/write_snapshot_index.py, вычисляя SHA‑256 по всем файлам в снимке

Минимальная команда для локальной публикации (детерминированный режим и фиты опциональны):

bash
python3 benchmarks/nextstat-public-benchmarks/scripts/publish_snapshot.py \
  --deterministic \
  --fit

Полный контракт публикации: «Бенчмарк-снимки как продукты».


4.Почему это важно в HEP-подобных конвейерах

HEP-конвейеры вывода имеют свойство, которое ломает наивный бенчмаркинг:

Можно быть «быстрым», не выполняя тот же самый вывод.

Если правдоподобие отличается на небольшую, но систематическую величину (не та интерполяция, не те ограничения, не те маски), число бенчмарка бессмысленно, потому что изменился вычисляемый объект.

«Конец эры скриптов» здесь означает:

  • вы не бенчмаркаете без проверки по эталону
  • вы не публикуете цифры без артефактов
  • вы не принимаете «похоже, близко» как контракт

5.Более глубокий сдвиг: софт становится системой

Сдвиг не про Rust против Python и не про компилируемое против интерпретируемого. Сдвиг в том, что софт становится системой с:

  • Детерминированные режимы (для паритета и отладки)
  • быстрые режимы (для продакшена)
  • явные допуски (чтобы корректность была измеряемой)
  • Автоматизация (чтобы одна и та же оснастка запускалась каждый раз)

Именно это и заменяет «скрипт» как источник истины.


6.Чего ожидать от наших публичных бенчмарк-снимков

Когда мы публикуем бенчмарк-снимки, цель в том, чтобы вы могли:

  • Перезапустить тот же набор на своей машине
  • Увидеть те же гейты корректности
  • Сравнить результаты с полным контекстом

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

Это и есть прогресс: расхождение становится диагностируемым.


7.Репликация это эндгейм

Если вы хотите самый сильный сигнал доверия, вам нужен независимый перезапуск с публикуемым отчетом: тот же suite definition, те же ID наборов данных, опубликованные хеши и манифесты и, при необходимости, подписи для защиты от подмены.

См. «Репликация третьими сторонами: подписанные отчеты».


8.Смысл «trust offensive»

Публикация бенчмарков это не маркетинговый трюк. Это обязательство:

  • Показать нашу работу
  • Сделать её воспроизводимой
  • Пригласить к репликации

Если мы сделаем это правильно, разговор меняется с:

«Вы действительно так быстры?»

на:

«Вот оснастка. Давайте измерим вместе.»