Параллельный запуск ASR и диаризации: политика и бюджет CPU #21

Closed
opened 2026-08-14 14:17:22 +03:00 by ddmitry · 1 comment
Owner

Часть карты: Карта: диаризация спикеров в транскрипте (#8)

Question

Стоит ли запускать независимые проходы распознавания и диаризации параллельно,
и при каких условиях это быстрее и безопаснее последовательного режима?

Решение о пословной привязке сохраняет проходы независимыми до финального
сведения и поэтому не блокирует параллельность. На слабом Intel baseline
последовательная обработка часа занимает около 23 минут; идеальный нижний
предел ограничен диаризацией и составляет около 13,6 минуты, но прямого замера
параллельного режима нет.

Нужно определить:

  • политику для CPU+CPU, GPU+CPU и OpenVINO+CPU;
  • бюджет потоков и защиту от oversubscription: сейчас ONNX ASR не применяет
    проектный cpu_threads, а оба runtime могут занять все доступные ядра;
  • условия выбора последовательного режима и fallback при нехватке ресурсов;
  • входит ли параллельность в первую реализацию или остаётся оптимизацией после
    корректного последовательного baseline;
  • минимальный benchmark, после которого параллельный режим можно включать.

Ответ фиксирует политику оркестрации и критерий приёмки, но не реализует её.

Часть карты: [Карта: диаризация спикеров в транскрипте](https://git.dementev.space/ddmitry/local-transcriber/issues/8) (#8) ## Question Стоит ли запускать независимые проходы распознавания и диаризации параллельно, и при каких условиях это быстрее и безопаснее последовательного режима? Решение о пословной привязке сохраняет проходы независимыми до финального сведения и поэтому не блокирует параллельность. На слабом Intel baseline последовательная обработка часа занимает около 23 минут; идеальный нижний предел ограничен диаризацией и составляет около 13,6 минуты, но прямого замера параллельного режима нет. Нужно определить: - политику для CPU+CPU, GPU+CPU и OpenVINO+CPU; - бюджет потоков и защиту от oversubscription: сейчас ONNX ASR не применяет проектный `cpu_threads`, а оба runtime могут занять все доступные ядра; - условия выбора последовательного режима и fallback при нехватке ресурсов; - входит ли параллельность в первую реализацию или остаётся оптимизацией после корректного последовательного baseline; - минимальный benchmark, после которого параллельный режим можно включать. Ответ фиксирует политику оркестрации и критерий приёмки, но не реализует её.
ddmitry added the wayfinder:grilling label 2026-08-14 14:17:22 +03:00
ddmitry added a new dependency 2026-08-14 14:17:52 +03:00
ddmitry self-assigned this 2026-08-14 15:06:00 +03:00
Author
Owner

Решение

Первая реализация использует только последовательный пайплайн для всех устройств:

  1. ASR;
  2. диаризация;
  3. сведение слов с разметкой говорящих;
  4. форматирование и запись Markdown.

ASR выполняется первым: при окончательной ошибке распознавания дорогая диаризация не запускается, а возможный GPU→CPU fallback завершается до её старта.

--threads=N — единый бюджет текущего CPU-прохода. Значение целиком получает сначала ASR, затем диаризация; делить его между ними не нужно, поскольку проходы не пересекаются. 0 оставляет дефолты библиотек. То, что ONNX ASR и OpenVINO сейчас не применяют этот параметр, остаётся существующим пробелом реализации, а не основанием для второй ручки.

Параллельного auto-режима и ресурсного fallback в первой реализации нет. Последовательный режим является baseline для CPU, CUDA и OpenVINO независимо от фактического устройства.

Будущая оптимизация

Создана отдельная задача #22, к которой возвращаемся только после реализации и стабилизации основного пайплайна. Параллельность допускается отдельно по фактическому классу устройств после benchmark на трёх записях: не менее 20% выигрыша end-to-end, идентичный результат, отсутствие OOM/крашей/новых fallback и приемлемый измеренный peak RSS. Первый кандидат — CUDA+CPU.

## Решение Первая реализация использует только последовательный пайплайн для всех устройств: 1. ASR; 2. диаризация; 3. сведение слов с разметкой говорящих; 4. форматирование и запись Markdown. ASR выполняется первым: при окончательной ошибке распознавания дорогая диаризация не запускается, а возможный GPU→CPU fallback завершается до её старта. `--threads=N` — единый бюджет текущего CPU-прохода. Значение целиком получает сначала ASR, затем диаризация; делить его между ними не нужно, поскольку проходы не пересекаются. `0` оставляет дефолты библиотек. То, что ONNX ASR и OpenVINO сейчас не применяют этот параметр, остаётся существующим пробелом реализации, а не основанием для второй ручки. Параллельного auto-режима и ресурсного fallback в первой реализации нет. Последовательный режим является baseline для CPU, CUDA и OpenVINO независимо от фактического устройства. ## Будущая оптимизация Создана отдельная задача #22, к которой возвращаемся только после реализации и стабилизации основного пайплайна. Параллельность допускается отдельно по фактическому классу устройств после benchmark на трёх записях: не менее 20% выигрыша end-to-end, идентичный результат, отсутствие OOM/крашей/новых fallback и приемлемый измеренный peak RSS. Первый кандидат — CUDA+CPU.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Reference: ddmitry/local-transcriber#21