Python gensim LDA多核不是多处理?

Python gensim LDA多核不是多处理?,python,multiprocessing,lda,gensim,Python,Multiprocessing,Lda,Gensim,当我在一台有12个内核的机器上运行gensim的LdaMulticore模型时,使用: lda = LdaMulticore(corpus, num_topics=64, workers=10) 我收到一条日志信息,上面写着 using serial LDA version on this node training LDA model using 10 processes 几行之后,我看到另一条登录消息,上面写着 using serial LDA version on this no

当我在一台有12个内核的机器上运行gensim的
LdaMulticore
模型时,使用:

lda = LdaMulticore(corpus, num_topics=64, workers=10)
我收到一条日志信息,上面写着

using serial LDA version on this node  
training LDA model using 10 processes
几行之后,我看到另一条登录消息,上面写着

using serial LDA version on this node  
training LDA model using 10 processes
当我运行top时,我看到已经生成了11个python进程,但有9个进程处于休眠状态,即只有一个工作进程处于活动状态。这台机器有24个核心,并且不会被任何方式压垮。为什么LdaMulticore不能以并行模式运行?

首先,请确保,因为大多数耗时的工作都是在线性代数的低级例程中完成的

在我的机器上,在培训期间,工人=4人时,可以使用全部20个cpu核。设置大于此值的工人并没有加快培训速度

您可以尝试使用来序列化和替换
语料库
,这样读/写起来应该快得多。此外,只需压缩大的
.mm
文件,使其占用更少的空间(=更少的I/O)也会有所帮助。例如:

mm = gensim.corpora.MmCorpus(bz2.BZ2File('enwiki-latest-pages-articles_tfidf.mm.bz2'))
lda = gensim.models.ldamulticore.LdaMulticore(corpus=mm, id2word=id2word, num_topics=100, workers=4)

其中一个原因可能是因为。测试你的代码,看看需要多少时间。我的问题确实是因为加载语料库时出现了I/O瓶颈。我想使用
sharedcorpus
可能会有所帮助——下次我会试试。对我来说,只需先将整个语料库预加载到内存中(这台机器几乎有1T内存),就解决了这个问题。预加载比按需加载文档快得多。下次我会试试你的其他建议!
corpora.mmcorpors('some_corpors.mm')
是否将语料库预加载到内存中?我也被困在这个问题中,记录器说在这个节点上使用串行LDA版本
,然后什么都没有..有一个类似的问题,
LdaMulticore
在一个环境中工作,而不是在另一个环境中工作,比较了包,发现删除scikit learn(使用llvm openmp-可能的问题源)解决了它。这是旧的,但我可以证实冲突也是我的问题。创建一个没有scikitlearn的conda环境解决了这个问题。