Kaldi - 如何在多个解码器之间共享语言模型?
Kaldi - how to share language model among multiple decoders?
我每天都在使用 Kaldi 解码大量音频样本。我有一个计划,将有多个解码器 运行 并行对同一语言模型进行解码。为此,如果我可以共享一种由多个解码器加载到内存中的语言模型,那就太好了。我现在有的型号是1GB的光盘,使用了大约3GB的内存,如果我能再次使用它节省内存就太好了。
有没有人想过这样的事情?可行吗?
- 我在 Kaldi 文档中没有找到任何关于它的信息
- 我正在考虑使用 boost::interprocess 库来管理对象 fst::VectorFst fst::ReadFstKaldi() 因为这是最大的对象。但这看起来是个大问题,因为它是一个复杂的自定义对象,我不确定 boost::interprocess 是否可以处理这些问题。我不想自定义 Kaldi 对象以通过增强内存共享来支持它们。
关于这种方法还有其他想法吗?
不需要多进程,跨线程共享fst对象即可。它是常量,因此无需保护它。您在每个工作线程中创建带有 fst 指针的解码器,每个线程的解码器都是独立的。您可以使用 io_service 来处理请求。
我每天都在使用 Kaldi 解码大量音频样本。我有一个计划,将有多个解码器 运行 并行对同一语言模型进行解码。为此,如果我可以共享一种由多个解码器加载到内存中的语言模型,那就太好了。我现在有的型号是1GB的光盘,使用了大约3GB的内存,如果我能再次使用它节省内存就太好了。
有没有人想过这样的事情?可行吗?
- 我在 Kaldi 文档中没有找到任何关于它的信息
- 我正在考虑使用 boost::interprocess 库来管理对象 fst::VectorFst fst::ReadFstKaldi() 因为这是最大的对象。但这看起来是个大问题,因为它是一个复杂的自定义对象,我不确定 boost::interprocess 是否可以处理这些问题。我不想自定义 Kaldi 对象以通过增强内存共享来支持它们。
关于这种方法还有其他想法吗?
不需要多进程,跨线程共享fst对象即可。它是常量,因此无需保护它。您在每个工作线程中创建带有 fst 指针的解码器,每个线程的解码器都是独立的。您可以使用 io_service 来处理请求。