NextStatNextStat

Публичные бенчмарки

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

Харнесс открыт: github.com/NextStat/nextstat-public-benchmarks

Что относится к документации, а что к статьям

Документация (этот сайт) канонична: протоколы, контракты, runbook'и и инструкции «как воспроизвести».

Статьи — это повествование: мотивация, обоснование дизайна, интерпретация результатов и контекст «почему это важно».

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

Область охвата

Мы измеряем end-to-end пользовательские сценарии, а не изолированные микрокернелы:

  • ФВЭ / HistFactory: вычисление NLL, градиенты, MLE-фиты, профильные сканы, toy-ансамбли
  • Фарма: вычисление правдоподобия PK/NLME и циклы фита
  • Байесовский вывод: градиентные семплеры (NUTS) с метрикой ESS/сек и wall-time
  • ML-инфраструктура: время компиляции и исполнения, пропускная способность дифференцируемого конвейера
  • Временные ряды: пропускная способность фильтра/сглаживателя Калмана, стоимость сходимости EM
  • Эконометрика: масштабирование Panel FE, DiD и IV/2SLS по числу кластеров

Модель доверия

Для каждого опубликованного снапшота, опираясь только на артефакты, должно быть возможно ответить:

#Вопрос
1Что измерялось? (определение задач и метрик)
2На каких данных? (ID набора данных, хеш, лицензия)
3В каком окружении? (ОС, CPU/GPU, компилятор, Python, версии зависимостей)
4На каком коде? (хеш коммита NextStat, lock-файлы, флаги сборки)
5Сохраняется ли корректность? (sanity/parity проверки перед таймингом)
6Насколько стабильно число? (стратегия повторов, распределения, репортинг)

Контракт воспроизводимости

  • rust-toolchain.toml и Cargo.lock (toolchain Rust и зависимости)
  • Версия Python и lock зависимостей (uv / pip-tools / poetry)
  • Детали GPU-рантайма (версия CUDA / Metal / драйвер), если используется GPU
  • Гейт корректности перед измерением времени: харнесс проверяет паритет в пределах явного допуска
  • Публикуются сырые измерения по тестам, а не только сводки

Публикуемые артефакты

  • Сырые результаты (по тестам и по повторам)
  • Сводные таблицы (явно указана политика median/best-of-N)
  • Манифест базовой линии (SHA кода, версии окружения, хеши наборов данных, конфигурация запуска)
  • Отчет корректности/паритета, использованный как гейт
  • validation_report.json + (опционально) validation_report.pdf (через nextstat validation-report)

Автоматизация публикации

Публикация снапшотов автоматизирована скриптами в репозитории бенчмарков:

  • publish_snapshot.py: генерирует локальную директорию снапшота с baseline_manifest.json, README_snippet.md и валидацией артефактов по схемам
  • write_baseline_manifest.py: фиксирует окружение (toolchain Rust/Python, ОС, CPU/GPU, lock-файлы зависимостей) в схемо-валидированный манифест; при наличии добавляет инвентаризацию GPU через nvidia-smi
  • report.py --format markdown: рендерит человекочитаемые сводки из сырых результатов и пишет README_snippet.md для включения в README снапшота

Структура репозитория

Репозиторий публичных бенчмарков использует структуру с закреплённым окружением:

nextstat-public-benchmarks/
  manifests/
    schema/          # JSON schemas for all artifact types
    snapshots/       # published snapshot manifests
  suites/
    hep/             # run.py, suite.py, baselines/
    pharma/          # run.py, suite.py, baselines/
    bayesian/        # run.py, suite.py
    ml/              # suite.py, report.py
  env/
    docker/          # cpu.Dockerfile, cuda.Dockerfile
    python/          # pyproject.toml + uv.lock
    rust/            # rust-toolchain.toml + Cargo.lock
  ci/
    publish.yml      # CI snapshot publishing (CPU)
    publish_gpu.yml  # CI snapshot publishing (self-hosted GPU runner)
    verify.yml       # CI correctness gate

Готовность наборов

НаборСтатусПримечания
HEPГотово к запускуpyhf-харнесс + эталонная реализация на ROOT (валидируется схемами)
PharmaЗаготовкаrun.py + suite.py + шаблоны nlmixr2/Torsten (status=skipped, ожидается окружение)
BayesianГотово к запускуМультибэкенд: NextStat + CmdStanPy + PyMC (smoke snapshot проверен)
MLОпубликованоПервый GPU-снапшот: RTX 4000 SFF Ada, JAX 0.4.38 CUDA, NextStat 0.9.0
Time SeriesЗапланированоПротокол определен
EconometricsЗапланированоПротокол определен

Наборы

НаборКлючевые метрики
HEPВремя NLL на вызов, время градиента, wall-time MLE-фита, профильный скан, пропускная способность тоев (CPU и GPU)
PharmaВремя правдоподобия и градиента PK/NLME, wall-time фита, масштабирование по числу субъектов
BayesianESS/сек (bulk и tail), wall-time на эффективный сэмпл, SBC-калибровка
MLЛатентность cold-start, пропускная способность warm, стоимость дифференцируемого пайплайна
Time SeriesСостояний/сек в фильтре/сглаживателе Калмана, стоимость EM, латентность прогнозирования
EconometricsМасштабирование Panel FE, wall-time DiD, стоимость IV/2SLS, AIPW против наивного OLS

Базовые реализации (внешние референсы)

Базовые реализации это шаблоны раннеров для внешних инструментов, которые валидируются схемами. Они производят JSON-результаты в том же формате, что и запуски NextStat, что позволяет корректно сравнивать «яблоки с яблоками»:

БазаНаборСтатус
ROOT/RooFitHEPШаблон + схема (status=skipped, ожидается окружение)
nlmixr2 (R)PharmaШаблон + схема (status=skipped, ожидается окружение)
Torsten (Stan)PharmaШаблон + схема (status=skipped, ожидается окружение)

DOI и цитирование

Стабильные снапшоты бенчмарков публикуются с DOI (Zenodo) и машиночитаемым CITATION.cff. DOI указывает на сырые результаты, манифесты и точную версию харнесса.

Первая production-запись: DOI 10.5281/zenodo.18542624

  • zenodo.json шаблон: заранее заполненные метаданные для загрузки через Zenodo API
  • Каждый снапшот получает уникальный DOI, который разрешается в полный набор артефактов
  • Машиночитаемый CITATION.cff для ссылок на наборы бенчмарков в публикациях

Репликация третьими сторонами

Самый сильный сигнал доверия это независимый перезапуск. Репликация дает:

  • Лог перезапуска с тем же харнессом
  • Манифест окружения репликации
  • Подписанный отчет сравнения репликации и опубликованного снапшота (GPG / Sigstore)

Инструменты:

  • compare_snapshots.py: diff-инструмент для сравнения двух директорий снапшотов (наборы данных, хеши, распределения таймингов, дельты корректности)
  • signed_report_template.md: шаблон отчета о репликации с манифестом окружения, дельтами и блоком подписи

Статьи