python – gensim LdaMulticore不是多处理?

当我在具有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不能以并行模式运行?

解决方法:

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

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

您可以尝试使用ShardedCorpus来序列化和替换语料库,这应该更快地读/写.此外,只需压缩大型.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)
上一篇:ILS-LDA基于迭代最小二乘的字典学习算法的学习


下一篇:java-如何获取新文档的主题向量并与Mallet中的预定义主题模型进行比较?