当我在具有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并行运行?
答案 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)