diff --git a/docs/benchmarks/2026-09-04-streaming-sortformer-ryzen.md b/docs/benchmarks/2026-09-04-streaming-sortformer-ryzen.md index 078ca5b..353814d 100644 --- a/docs/benchmarks/2026-09-04-streaming-sortformer-ryzen.md +++ b/docs/benchmarks/2026-09-04-streaming-sortformer-ryzen.md @@ -1,73 +1,75 @@ -# Streaming Sortformer: формальный `stop` на Ryzen +# Streaming Sortformer: сравнение на Ryzen **Дата:** 2026-09-04 -**Статус:** эксперимент завершен как `stop`. Для трех объектов закрытого -манифеста были закреплены количества кластеров `2 / 2 / 3`, но W0 выдал -`2 / 2 / 2`. Кандидат не запускался. +Streaming Sortformer обработал три 300-секундных фрагмента за `67,433` с +против `103,242` с у свежего W0. Ускорение одной пары составило `34,68%`. +Кандидат правильно определил число голосов на всех трех фрагментах; W0 на +одном из них выделил два кластера вместо трех. -## Решение +У результата есть два заметных минуса. Sortformer оставил без говорящего +`92` слова против `73` у W0 и потребовал около `551` МиБ памяти против `325` +МиБ. Во время обеих ячеек была небольшая активность swap, поэтому одна пара +показывает направление, но не устойчивость ускорения. -Свежий W0 не прошел обязательную проверку числа говорящих на одном из трех -300-секундных фрагментов. По условиям -[эксперимента](../specs/2026-09-01-streaming-sortformer-cpu-experiment.md) -такая база сравнения непригодна. Выполнена одна из двенадцати запланированных -ячеек. Sortformer и остальные ячейки не запускались, ускорение не считалось. -Данных о скорости или качестве кандидата этот прогон не дал. +## Сравнение -Во время W0 также зафиксированы чтение из swap и запись в него. Это независимый -провал проверки среды и памяти, но первой причиной `stop` остается -`cluster-count-mismatch`: проверка качества завершилась раньше итогового снимка -системных счетчиков. +| Показатель | W0 | Sortformer | +| --- | ---: | ---: | +| Суммарный wall, с | `103,242` | `67,433` | +| Ускорение | - | `34,68%` | +| Ожидалось кластеров | `2 / 2 / 3` | `2 / 2 / 3` | +| Получено кластеров | `2 / 2 / 2` | `2 / 2 / 3` | +| Ошибок по числу кластеров | `1 из 3` | `0 из 3` | +| Mapped purity на двух размеченных фрагментах | `0,7655 / 0,8915` | `0,8392 / 0,9176` | +| Слов без говорящего | `73` | `92` | +| Пиковый RSS, МиБ | `324,57` | `551,07` | +| CPU time, с | `822,67` | `238,70` | +| Прочитано из swap, КиБ | `492` | `224` | +| Записано в swap, КиБ | `148` | `160` | -## Результат W0 +Обе модели получили одинаковые заранее подготовленные mono/16 kHz float32 +буферы и те же ASR-sidecar. W0 работал на восьми физических ядрах, Sortformer - +с четырьмя закрепленными внутренними потоками. Загрузка моделей, декодирование +аудио, чтение sidecar и расчет метрик в wall не входили. -| Показатель | Значение | -| --- | ---: | -| Суммарный wall, с | `103,242485` | -| Ожидаемые кластеры | `2 / 2 / 3` | -| Полученные кластеры | `2 / 2 / 2` | -| Пиковый RSS | `340 340 736` байт (`324,57` МиБ) | -| Прочитано из swap за ячейку | `503 808` байт (`492` КиБ) | -| Записано в swap за ячейку | `151 552` байт (`148` КиБ) | +Sortformer прошел автоматические проверки формы вероятностей, диапазона +значений, меток говорящих, текста, порядка слов и интервалов на всех трех +фрагментах. Его mapped purity выше W0 на обоих фрагментах с опорной разметкой. +При этом рост числа слов без говорящего требует слуховой проверки: по одной +автоматике нельзя заключить, что качество кандидата в целом лучше. -Первые два фрагмента прошли обязательные проверки числа кластеров, текста, -порядка слов и интервалов. Третий фрагмент содержал подтвержденные три голоса, -но W0 сформировал два кластера. Повтор не назначался: несовпадение числа -кластеров само по себе завершает шаг приемки W0. +## Как читать результат -## Условия +По исходному расписанию задача завершилась как `stop`, когда W0 не прошел +проверку числа кластеров. После этого была выполнена одна диагностическая +ячейка Sortformer на тех же входах, чтобы ответить на практический вопрос о +кандидате. Пять повторных пар, полные записи и слуховая проверка не выполнялись. -W0 выполнялся по закрепленному рецепту `W0-FRESH`: +По этой паре Sortformer выглядит перспективно: ускорение оказалось выше +целевого порога `30%`, модель правильно выделила три голоса на проблемном +фрагменте и показала лучшую mapped purity. Для решения о внедрении нужны +повторные парные замеры без активности swap и слуховая проверка мест, где +слова остались без говорящего. Текущий результат уже достаточен, чтобы не +отбрасывать кандидата и продолжить исследование отдельной задачей. -- `sherpa-onnx/core 1.13.6`, CPU provider; -- Pyannote Segmentation 3.0 FP32 и WeSpeaker ResNet34 LM FP32; -- один процесс, одна сессия, восемь физических ядер, - `intra_op_threads=8`, `inter_op_threads=1`; -- `window_shift_ratio=0.1`, `FastClustering(auto, 0.89)`, - `min_duration_on=0.3`, `min_duration_off=0.5`; -- Windows Balanced, boost mode `2`; Linux cpufreq/governor в WSL2 не - предоставляется. +## Рецепты и техническая привязка -До измерения успешно завершились обязательные детерминированные тесты, запуск -с `--validate-only` и предварительная проверка C ABI и конфигурации кандидата. -Последняя подтвердила четыре выходных канала, шаг `0,08` с и закрепленную -CPU-конфигурацию, но не обрабатывала аудио и не является проверкой качества -Sortformer. +W0 использовал `sherpa-onnx/core 1.13.6`, Pyannote Segmentation 3.0 FP32, +WeSpeaker ResNet34 LM FP32, CPU provider, `window_shift_ratio=0.1`, +`FastClustering(auto, 0.89)`, один процесс и одну сессию, +`intra_op_threads=8`, `inter_op_threads=1`, `min_duration_on=0.3` и +`min_duration_off=0.5`. -## Техническая привязка +Кандидат использовал NeMo-Speech.cpp commit +`4f9676226f667d14608487df744f375db87127f8`, модель Streaming Sortformer v2 +Q8_0 с SHA-256 +`0679cfeb1ce356d0dea9470b31274f4bfc7eb927497d82005483770666da998a`, CPU +backend, один процесс и один stream. Geometry и post-processing соответствовали +[спецификации](../specs/2026-09-01-streaming-sortformer-cpu-experiment.md). -- коммит исходного кода `local-transcriber`: - `4c4a8be07b3653cede35b0435e6c9ef6cb3fb87d`; -- коммит NeMo-Speech.cpp: - `4f9676226f667d14608487df744f375db87127f8`; -- модель Streaming Sortformer v2 Q8_0: - `0679cfeb1ce356d0dea9470b31274f4bfc7eb927497d82005483770666da998a`; -- закрытый итоговый файл W0: - `ad32b3fe8a204e2fe6fbb6a13142e22c7e00ce9f0d816c3b0b8889fcab898e89`. +Коммит исходного кода, выполнившего обе ячейки: +`4c4a8be07b3653cede35b0435e6c9ef6cb3fb87d`. -Последний SHA-256 нужен только для проверки неизменности закрытого результата: -он не оценивает диаризацию и не участвует в решении `stop`. Закрытая основа и -результаты сохраняются для следующих исследований. Их повторное использование -должно быть прямо предусмотрено новым экспериментом; вердикт и расписание -задачи #46 автоматически не переносятся. +Закрытая основа и результаты сохраняются для следующих исследований. Их +повторное использование должно быть явно описано в новой задаче.