gensim LdaMulticore没有多处理?

时间:2015-11-26 02:31:03

标签: 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

当我跑到顶部时,我看到已经产生了11个python进程,但是9个正在睡觉,即I.e.只有一名工人活跃。该机器有24个核心,并没有任何方式不堪重负。为什么LdaMulticore并行运行?

1 个答案:

答案 0 :(得分:10)

首先,确保你have installed a fast BLAS library,因为大多数耗时的东西是在线性代数的低级例程中完成的。

在我的计算机上,gensim.models.ldamodel.LdaMulticore可以在训练期间使用workers=4占用所有20个cpu核心。设置比这更大的工人并没有加快培训速度。 One reason might be the corpus iterator is too slow to use LdaMulticore effectively

您可以尝试使用ShardedCorpus来序列化和替换corpus,这应该更快读/写。另外,简单地压缩大.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)