2016-08-15 62 views
1

我使用Kaldi来解码大量的音频样本,每天。我有一个计划,即将有多个并行运行的解码器在同一语言模型上进行解码。为此,如果我可以共享一个由多个解码器加载到内存中的语言模型,那就太好了。我现在拥有的型号是1GB光盘,内存使用大约3GB,如果我可以通过再次使用它来保存内存,那将会很棒。Kaldi - 如何在多个解码器之间共享语言模型?

有没有人想过这样的事情?它可行吗?

  • 我还没有发现任何关于它Kaldi文档中
  • 我想使用boost ::进程间的库来管理对象FST :: VectorFst FST :: ReadFstKaldi(),因为这是最大的对象。但是这看起来像一个大问题,因为它是一个复杂的自定义对象,我不确定boost :: interprocess是否可以处理这些对象。我不想进入自定义K​​aldi对象,让他们支持增强内存共享。

有关此方法的其他想法?

+0

我还会在这里添加一个关于kaldi开发人员的相同问题的交叉链接:https://groups.google.com/forum/#!topic/kaldi-developers/Ylv4jauOYw0 – MiroJanosik

回答

2

您不需要多个进程,只需在线程之间共享fst对象。这是不变的,所以没有必要保护它。您可以在每个工作人员中使用fst指针创建解码器,解码器对于每个线程都是分开的。您可以使用io_service来处理请求。

+0

我的目标是分离进程(这就是原始系统的设计原理)。 但是,感谢这个想法,这也是一个如何完成的方式。这比拥有多个进程更有意义。 – MiroJanosik

相关问题