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)
当我 运行 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)