当我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
当我运行top时,我看到已经生成了11个python进程,但是有9个正在休眠,即只有一个工人处于活动状态。该机器有24个核心,并且丝毫不致于不堪重负。为什么LdaMulticore不以并行模式运行?
首先,请确保已安装了快速的BLAS库,因为大多数耗时的工作都是在线性代数的低级例程中完成的。
在我的机器gensim.models.ldamodel.LdaMulticore上workers=4,培训期间可以用完所有20个CPU核心。设置更大的工人并不能加快培训速度。原因之一可能是corpus迭代器太慢而无法有效使用LdaMulticore。
gensim.models.ldamodel.LdaMulticore
workers=4
corpus
您可以尝试使用ShardedCorpus序列化和替换corpus,应该可以更快地读取/写入。此外,只需压缩大型.mm文件以使其占用更少的空间(=较少的I / O)也可能会有所帮助。例如,
ShardedCorpus
.mm
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)