问题描述
我有一个查找对象,特别是来自 gensim.models.keyedvectors.Word2VecKeyedVectors
的预训练 word2vec 模型。我需要做一些数据预处理,我正在使用多处理。有没有办法让我的所有进程都可以使用来自同一内存位置的对象,而不是每个进程都将对象加载到自己的内存中?
解决方法
是的,这里有两个选项:
- 你可以使用multiprocessing
- 或者你可以使用 Ray
是的,如果:
- 文件是使用 Gensim 的内部
.save()
方法保存的,相关的大向量数组显然是单独的.npy
文件 - 文件使用 Gensim 的内部
.load()
方法加载,带有mmap
选项 - 避免执行任何无意中导致每个进程的对象完全重新分配后备数组的操作(破坏 mmap 共享)。
有关类似需求的步骤/关注点的概述,请参阅 this prior answer。
(此处列出的问题和额外步骤以避免破坏 mmap 共享——通过手动修补 norm
属性——在 Gensim 4.0.0 中不再需要,目前仅作为预发布版本。)