2016-08-15 2 views
1

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

Неужели кто-нибудь когда-нибудь думал об этом? Это выполнимо?

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

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

+0

Я также добавлю здесь перекрестную ссылку на мой вопрос на kaldi-developers: https://groups.google.com/forum/#!topic/kaldi-developers/Ylv4jauOYw0 – MiroJanosik

ответ

2

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

+0

Моя цель состояла в том, чтобы разделить процессы (так было разработано исходную систему). Но спасибо за идею, это также способ, которым это можно сделать. Это также имеет больше смысла, чем наличие нескольких процессов. – MiroJanosik

Смежные вопросы