当我在具有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)