gensim LdaMulticore不是多重处理吗?
当我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不以并行模式运行?
-
首先,请确保已安装了快速的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)