Kaldi — как поделиться языковой моделью среди нескольких декодеров?

Я использую Kaldi для декодирования множества аудио-сэмплов каждый день. У меня есть план, что будет несколько декодеров, работающих параллельно, выполняющих декодирование на одной и той же языковой модели. Для этого было бы неплохо, если бы я мог использовать одну языковую модель, которая загружается в память несколькими декодерами. Модель, которая у меня сейчас есть, имеет 1 ГБ на диске и использует около 3 ГБ в памяти, и было бы здорово, если бы я мог сохранить память, используя ее еще раз.

Кто-нибудь когда-нибудь думал о такой вещи? Это выполнимо?

  • Я не нашел ничего об этом в документации Kaldi
  • Я думал использовать библиотеку boost :: interprocess для управления объектом fst :: VectorFst fst :: ReadFstKaldi (), так как это самый большой объект. Но это выглядит большой проблемой, так как это сложный пользовательский объект, и я не уверен, что boost :: interprocess справится с этим. Я не хочу вдаваться в настройку объектов Kaldi, чтобы они поддерживали совместное использование памяти.

Любые другие идеи об этом подходе?

1

Решение

Вам не нужно несколько процессов, вы просто делитесь объектом fst между потоками. Это постоянно, поэтому нет необходимости защищать его. Вы создаете декодер с указателем fst в каждом работнике, декодеры являются отдельными для каждого потока. Ты можешь использовать io_service для обработки запросов.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]