Публичные бенчмарки
Программа публичных бенчмарков 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-smireport.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 фита, масштабирование по числу субъектов |
| Bayesian | ESS/сек (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/RooFit | HEP | Шаблон + схема (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: шаблон отчета о репликации с манифестом окружения, дельтами и блоком подписи
Статьи
- Trust Offensive: публичные бенчмарки
- Конец эры скриптов
- Снапшоты бенчмарков как артефакты CI
- Репликация третьими сторонами: подписанные отчеты
- Как устроить доверенный бенчмарк-харнесс ФВЭ
- Числовая точность: ROOT vs pyhf vs NextStat
- Байесовские бенчмарки: ESS/сек
- Фарма-бенчмарки: PK/NLME
- JAX: компиляция vs исполнение
