Модели диаризации в батч-режиме: время жизни и память #19

Closed
opened 2026-08-14 13:36:30 +03:00 by ddmitry · 1 comment
Owner

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

Question

Какой жизненный цикл должны иметь модели диаризации в батч-режиме: загружаться
на каждый файл, жить на протяжении всего батча или освобождаться по условию?

Замер на Core i7-6820HQ показал инициализацию 0,2 с и peak RSS 366–469 МБ для
процесса диаризации. Нужно согласовать компромисс между почти бесплатной
повторной инициализацией, памятью и простотой переноса состояния между файлами.

Часть карты: [Карта: диаризация спикеров в транскрипте](https://git.dementev.space/ddmitry/local-transcriber/issues/8) (#8) ## Question Какой жизненный цикл должны иметь модели диаризации в батч-режиме: загружаться на каждый файл, жить на протяжении всего батча или освобождаться по условию? Замер на Core i7-6820HQ показал инициализацию 0,2 с и peak RSS 366–469 МБ для процесса диаризации. Нужно согласовать компромисс между почти бесплатной повторной инициализацией, памятью и простотой переноса состояния между файлами.
ddmitry added the wayfinder:grilling label 2026-08-14 13:36:30 +03:00
ddmitry added a new dependency 2026-08-14 14:17:51 +03:00
ddmitry self-assigned this 2026-08-14 14:48:59 +03:00
Author
Owner

Решение

Модель диаризации живёт на протяжении всего батча — так же, как модель распознавания:

  • создаётся один раз после успешного prescan, только если в батче есть файлы для обработки и включена диаризация;
  • последовательно переиспользуется для всех файлов;
  • принадлежит батчу и освобождается при завершении команды;
  • условная выгрузка или eviction-политика не вводятся.

Основания

  • текущая ASR-модель уже имеет такой жизненный цикл, поэтому решение согласуется с архитектурой батч-пайплайна;
  • инициализация диаризации занимает около 0,2 с, но создание объекта на каждый файл не снижает память во время самой обработки и добавляет churn нативных сессий;
  • постоянное состояние OfflineSpeakerDiarization — модели и конфигурация, данные конкретного файла локальны внутри Process(), поэтому последовательное переиспользование не переносит речевое состояние между файлами;
  • измеренные 366–469 МБ — отдельный peak RSS процесса диаризации, а не доказанный совместный пик с ASR. Условное освобождение потребовало бы отдельного измеренного порога и нового владельца ресурсов.

Следствие для спеки

Диаризатор — отдельный batch-owned объект. Добавлять его в TranscribeFileResult не требуется, пока у диаризации нет собственного fallback, меняющего состояние между файлами.

## Решение Модель диаризации живёт на протяжении всего батча — так же, как модель распознавания: - создаётся один раз после успешного prescan, только если в батче есть файлы для обработки и включена диаризация; - последовательно переиспользуется для всех файлов; - принадлежит батчу и освобождается при завершении команды; - условная выгрузка или eviction-политика не вводятся. ## Основания - текущая ASR-модель уже имеет такой жизненный цикл, поэтому решение согласуется с архитектурой батч-пайплайна; - инициализация диаризации занимает около 0,2 с, но создание объекта на каждый файл не снижает память во время самой обработки и добавляет churn нативных сессий; - постоянное состояние `OfflineSpeakerDiarization` — модели и конфигурация, данные конкретного файла локальны внутри `Process()`, поэтому последовательное переиспользование не переносит речевое состояние между файлами; - измеренные 366–469 МБ — отдельный peak RSS процесса диаризации, а не доказанный совместный пик с ASR. Условное освобождение потребовало бы отдельного измеренного порога и нового владельца ресурсов. ## Следствие для спеки Диаризатор — отдельный batch-owned объект. Добавлять его в `TranscribeFileResult` не требуется, пока у диаризации нет собственного fallback, меняющего состояние между файлами.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Reference: ddmitry/local-transcriber#19