gensim LdaMulticore没有多处理?

Edw*_*ell 7 python multiprocessing lda gensim

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

lda = LdaMulticore(corpus, num_topics=64, workers=10)
Run Code Online (Sandbox Code Playgroud)

我收到一条记录消息

using serial LDA version on this node  
Run Code Online (Sandbox Code Playgroud)

几行后,我看到另一条记录消息说

training LDA model using 10 processes
Run Code Online (Sandbox Code Playgroud)

当我运行顶部时,我看到已经生成了11个python进程,但是9个正在休眠,即只有一个工作程序处于活动状态.该机器有24个核心,并没有任何方式不堪重负.为什么LdaMulticore不能以并行模式运行?

Jon*_*Jon 11

首先,确保你已经安装了一个快速的BLAS库,因为大多数耗时的东西是在线性代数的低级例程中完成的.

在我的机器上gensim.models.ldamodel.LdaMulticore,workers=4在训练期间可以耗尽所有20个cpu核心.设置比这更大的工人并没有加快培训速度.一个原因可能是corpus迭代器太慢而无法有效地使用LdaMulticore.

您可以尝试使用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)
Run Code Online (Sandbox Code Playgroud)