预训练 word2vec 模型的进程之间共享内存?

Shared memory among processes for pre-trained word2vec model?

我有一个查找对象,特别是来自 gensim.models.keyedvectors.Word2VecKeyedVectors 的预训练 word2vec 模型。我需要做一些数据预处理,我正在为此使用多处理。有没有一种方法可以让我的所有进程都可以使用同一内存位置的对象,而不是每个进程都将对象加载到自己的内存中?

是的,这里有两个选项:

  • 你可以使用multiprocessing
  • 或者您可以使用 Ray

是,如果:

  • 文件是使用 Gensim 的内部 .save() 方法保存的,相关的大数组向量显然是分开的 .npy 个文件
  • 文件是使用 Gensim 的内部 .load() 方法加载的,带有 mmap 选项
  • 您避免执行任何无意中导致每个进程的对象完全重新分配后备数组(破坏 mmap 共享)的操作。

有关 steps/concerns 类似需求的概述,请参阅

(为了避免破坏 mmap 共享而列出的问题和额外步骤——通过对 norm 属性执行手动修补——在 Gensim 4.0.0 中不再需要,目前仅可用作为预发布版本。)