test(diarization): добавлен стенд сравнения CPU-моделей #30

Merged
ddmitry merged 2 commits from issue-25-lightweight-cpu-diarization into master 2026-08-30 18:50:52 +03:00
Owner

Что сделано

  • Добавлен воспроизводимый CPU-стенд для четырех сочетаний Pyannote FP32/INT8 с WeSpeaker/TitaNet: отдельный процесс на ячейку, замеры этапов, CPU, RSS и RTF, безопасное возобновление и атомарное сохранение результата.
  • Выполнены 108 ячеек на трех пятиминутных контрольных фрагментах: 96 с автоматическим и 12 с известным числом говорящих. Ошибок нет, инвариантность 1853 слов сохранена во всех ячейках.
  • Добавлены исследовательская записка, отчет об эксперименте и обновление ADR-007.
  • Конфигурация по умолчанию не изменена: Pyannote FP32 + WeSpeaker, порог 0,89.

Вывод

  • INT8 + WeSpeaker в среднем быстрее на 2,1%, но почти не экономит память и ухудшает прокси-метрики.
  • TitaNet в среднем быстрее на 24,3%, однако использует примерно на 147–149 МиБ больше RSS и не проходит приемку общего автоматического порога.
  • TitaNet остается кандидатом только для будущего режима с известным числом говорящих и отдельной слуховой проверкой.

Проверка

  • .venv/bin/python -m pytest — 322 passed, 2 skipped.
  • /tmp/local-transcriber-ruff-bin/ruff check scripts/benchmarks/diarization_calibration.py tests/test_diarization_calibration.py — все проверки пройдены.
  • git diff --check — без замечаний.
  • Независимые task/taste и code review Opus после исправлений — APPROVED; code review проверил 9/9 мутаций.
  • Документация подготовлена Sol-субагентом, вычитана через ai-text-lint и отдельно одобрена Opus.

Слуховая проверка в этом прогоне не проводилась; это ограничение зафиксировано в отчете и ADR.

Раздел AGENTS.md «Кому что» на этот прогон снят решением владельца; ревьюеры были предупреждены, находкой это не считалось.

Closes #25

## Что сделано - Добавлен воспроизводимый CPU-стенд для четырех сочетаний Pyannote FP32/INT8 с WeSpeaker/TitaNet: отдельный процесс на ячейку, замеры этапов, CPU, RSS и RTF, безопасное возобновление и атомарное сохранение результата. - Выполнены 108 ячеек на трех пятиминутных контрольных фрагментах: 96 с автоматическим и 12 с известным числом говорящих. Ошибок нет, инвариантность 1853 слов сохранена во всех ячейках. - Добавлены исследовательская записка, отчет об эксперименте и обновление ADR-007. - Конфигурация по умолчанию не изменена: Pyannote FP32 + WeSpeaker, порог 0,89. ## Вывод - INT8 + WeSpeaker в среднем быстрее на 2,1%, но почти не экономит память и ухудшает прокси-метрики. - TitaNet в среднем быстрее на 24,3%, однако использует примерно на 147–149 МиБ больше RSS и не проходит приемку общего автоматического порога. - TitaNet остается кандидатом только для будущего режима с известным числом говорящих и отдельной слуховой проверкой. ## Проверка - `.venv/bin/python -m pytest` — 322 passed, 2 skipped. - `/tmp/local-transcriber-ruff-bin/ruff check scripts/benchmarks/diarization_calibration.py tests/test_diarization_calibration.py` — все проверки пройдены. - `git diff --check` — без замечаний. - Независимые task/taste и code review Opus после исправлений — APPROVED; code review проверил 9/9 мутаций. - Документация подготовлена Sol-субагентом, вычитана через `ai-text-lint` и отдельно одобрена Opus. Слуховая проверка в этом прогоне не проводилась; это ограничение зафиксировано в отчете и ADR. Раздел AGENTS.md «Кому что» на этот прогон снят решением владельца; ревьюеры были предупреждены, находкой это не считалось. Closes #25
ddmitry added 1 commit 2026-08-30 12:03:11 +03:00
- Зачем:
  - требовалось сравнить облегченные модели диаризации на старом CPU без изменения рабочей конфигурации.
- Что:
  - добавлен воспроизводимый и возобновляемый прогон матрицы Pyannote FP32/INT8 с WeSpeaker и TitaNet.
  - зафиксированы измерения 108 ячеек, ограничения эксперимента и решение сохранить модель по умолчанию.
  - локальные записи в каталоге tmp исключены из индекса Git.
- Проверка:
  - .venv/bin/python -m pytest.
  - /tmp/local-transcriber-ruff-bin/ruff check scripts/benchmarks/diarization_calibration.py tests/test_diarization_calibration.py.
ddmitry added 1 commit 2026-08-30 13:26:29 +03:00
- Зачем:
  - новый агент должен проверить приватный набор до дорогого CPU-прогона.
- Что:
  - добавлены режим validate-only, относительные пути и ранняя проверка зависимостей.
  - описано воспроизведение; временные handoff исключены из Git.
- Проверка:
  - .venv/bin/pytest -q: 334 passed, 2 skipped.
  - ruff check, ruff format --check и git diff --check: успешно.
Author
Owner

Дополнение после коммита 5b5fd53:

  • у стенда появился безопасный --validate-only: он проверяет структуру manifest, хэши корпуса и моделей, фиксированный состав исходных записей, матрицу и совместимость зависимостей без декодирования и запуска моделей;
  • относительные пути считаются от каталога manifest, поэтому один и тот же приватный набор можно перенести на другую машину;
  • в отчёт добавлена точная команда повторного запуска и явно отделено продолжение на той же машине от нового измерения на другом CPU;
  • .scratch/handoffs/ исключён из Git; временный handoff не стал проектной документацией.

Текущая проверка: 334 passed, 2 skipped; Ruff для двух изменённых Python-файлов, format check и git diff --check прошли. Повторный Opus-ревью после исправлений: APPROVED, P1/P2 нет. Waiver владельца по разделу AGENTS.md «Кому что» передан ревьюеру и находкой не считался.

Приватные записи, опорные расшифровки, ASR-sidecar и полный результат собраны только в локальной gitignored-капсуле для последующего размещения в закрытой папке Яндекс Диска. В Git, Gitea и Claude они не передавались.

Дополнение после коммита `5b5fd53`: - у стенда появился безопасный `--validate-only`: он проверяет структуру manifest, хэши корпуса и моделей, фиксированный состав исходных записей, матрицу и совместимость зависимостей без декодирования и запуска моделей; - относительные пути считаются от каталога manifest, поэтому один и тот же приватный набор можно перенести на другую машину; - в отчёт добавлена точная команда повторного запуска и явно отделено продолжение на той же машине от нового измерения на другом CPU; - `.scratch/handoffs/` исключён из Git; временный handoff не стал проектной документацией. Текущая проверка: `334 passed, 2 skipped`; Ruff для двух изменённых Python-файлов, format check и `git diff --check` прошли. Повторный Opus-ревью после исправлений: `APPROVED`, P1/P2 нет. Waiver владельца по разделу AGENTS.md «Кому что» передан ревьюеру и находкой не считался. Приватные записи, опорные расшифровки, ASR-sidecar и полный результат собраны только в локальной gitignored-капсуле для последующего размещения в закрытой папке Яндекс Диска. В Git, Gitea и Claude они не передавались.
ddmitry merged commit f5c1cb8090 into master 2026-08-30 18:50:52 +03:00
ddmitry deleted branch issue-25-lightweight-cpu-diarization 2026-08-30 18:50:53 +03:00
Sign in to join this conversation.