2015-11-26 9 views
5

जब मैं 12 कोर के साथ gensim की एक मशीन पर LdaMulticore मॉडल चलाने के लिए, का उपयोग करते हुए:जेन्सिम LdaMulticore multiprocessing नहीं?

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

मुझे लगता है कि

using serial LDA version on this node 

कुछ लाइनों बाद में कहते हैं एक लॉगिंग संदेश मिलता है, मुझे लगता है कि कहते हैं एक और loging संदेश दिखाई

training LDA model using 10 processes 

जब मैं शीर्ष चलाने के लिए, मैं देख रहा हूँ 11 अजगर प्रक्रियाओं पैदा कर दिया है, लेकिन 9 सो रहे हैं, Ie केवल एक कार्यकर्ता सक्रिय है। मशीन में 24 कोर हैं, और किसी भी माध्यम से अभिभूत नहीं हैं। LdaMulticore समानांतर मोड में क्यों नहीं चल रहा है?

+0

एक कारण [कॉर्पस' की धीमी लोडिंग] (https://github.com/piskvorky/gensim/issues/288) के कारण हो सकता है। यह देखने के लिए अपने कोड का परीक्षण करें कि कितना समय लगता है। – Jon

उत्तर

4

सबसे पहले, सुनिश्चित करें कि आप have installed a fast BLAS library, क्योंकि अधिकांश समय लेने वाली चीजें रैखिक बीजगणित के लिए निम्न-स्तर की दिनचर्या के अंदर की जाती हैं।

मेरी मशीन पर gensim.models.ldamodel.LdaMulticore प्रशिक्षण के दौरान workers=4 के साथ सभी 20 सीपीयू कोर का उपयोग कर सकते हैं। इस से बड़े कर्मचारियों को स्थापित करने से प्रशिक्षण में तेजी नहीं आई। One reason might be the corpus iterator is too slow to use LdaMulticore effectively

corpus को क्रमबद्ध करने और बदलने के लिए आप ShardedCorpus का उपयोग करने का प्रयास कर सकते हैं, जो पढ़ने/लिखने के लिए बहुत तेज़ होना चाहिए। साथ ही, बस अपनी बड़ी .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) 
+0

मेरी समस्या वास्तव में कॉर्पस लोड करने में I/O बाधा के कारण थी। मुझे कल्पना है कि 'शर्डडॉर्पस' का उपयोग करने से मदद मिल सकती है - मैं अगली बार कोशिश करूंगा। मेरे लिए, बस पूरे कॉर्पस को स्मृति में पहले से लोड करना (मशीन में लगभग 1 टी रैम है), समस्या हल हो गई। प्री-लोडिंग मांग पर दस्तावेज़ों को लोड करने से * रास्ता * तेज है। मैं अगली बार आपके अन्य सुझावों का प्रयास करूंगा! –

+0

'corpora.MmCorpus ('some_corpus.mm') 'स्मृति में कॉर्पस को पूर्व लोड नहीं करता है? मैं भी इस मुद्दे में फंस गया हूं, जहां लॉगर कहते हैं कि 'इस नोड पर सीरियल एलडीए संस्करण का उपयोग करना' और फिर कुछ भी नहीं .. –

संबंधित मुद्दे