一尘不染

gensim LdaMulticore不是多重处理吗?

python

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

lda = LdaMulticore(corpus, num_topics=64, workers=10)

我收到一条日志消息,内容为

using serial LDA version on this node

几行后,我看到另一条记录消息,内容为

training LDA model using 10 processes

当我运行top时,我看到已经生成了11个python进程,但是有9个正在休眠,即只有一个工人处于活动状态。该机器有24个核心,并且丝毫不致于不堪重负。为什么LdaMulticore不以并行模式运行?


阅读 275

收藏
2021-01-20

共1个答案

一尘不染

首先,请确保已安装了快速的BLAS库,因为大多数耗时的工作都是在线性代数的低级例程中完成的。

在我的机器gensim.models.ldamodel.LdaMulticoreworkers=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)
2021-01-20