gensim LdaMulticore 不是多处理?

gensim LdaMulticore not multiprocessing?

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

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 运行ning 不是并行模式?

首先,确保你 have installed a fast BLAS library,因为大部分耗时的事情都是在线性代数的低级例程中完成的。

在我的机器上 gensim.models.ldamodel.LdaMulticore can use up all the 20 cpu cores with workers=4 during training. Setting workers larger than this didn't speed up the training. One reason might be the corpus iterator is too slow to use LdaMulticore effectively.

你可以尝试使用ShardedCorpus来序列化和替换corpus,这应该比read/write快得多。此外,简单地压缩您的大 .mm 文件,使其占用更少 space(=更少 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)