6

मुझे इस समस्या का सामना करना पड़ रहा है जैसे post, लेकिन मेरे पास वहां कोई टिप्पणी जोड़ने के लिए पर्याप्त अंक नहीं हैं। मेरे डेटासेट में 1 मिलियन पंक्तियां, 100 कॉल हैं। मैं मलिब केमैन का भी उपयोग कर रहा हूं और यह बेहद धीमा है। नौकरी वास्तव में कभी खत्म नहीं होती है और मुझे इसे मारना है। मैं इसे Google क्लाउड (डेटाप्रोक) पर चला रहा हूं। अगर मैं क्लस्टर (के = 1000) की छोटी संख्या मांगता हूं तो यह चलता है, लेकिन फिर भी 35 मिनट से अधिक समय लेता है। मुझे इसे ~ 5000 के लिए चलाने की ज़रूरत है। मुझे नहीं पता कि यह इतना धीमा क्यों है। डेटा को ठीक से विभाजित किया जाता है क्योंकि श्रमिकों/नोड्स और एसवीडी की संख्या 1 मिलियन x ~ 300,000 कॉल मैट्रिक्स पर ~ 3 मिनट लगती है, लेकिन जब केएमन्स की बात आती है तो यह सिर्फ ब्लैक होल में जाता है। अब मैं कम संख्या में पुनरावृत्तियों (100 के बजाय 2) की कोशिश कर रहा हूं, लेकिन मुझे लगता है कि कहीं कुछ गलत है।स्पार्क मलिब केएमन्स एल्गोरिदम क्यों धीमा है?

KMeansModel Cs = KMeans.train(datamatrix, k, 100);//100 iteration, changed to 2 now. # of clusters k=1000 or 5000 
+0

# पुनरावृत्ति को 2 में बदलना कोई फर्क नहीं पड़ता। – Kai

+0

काई, मेरे पास एक [समान समस्या] है (http://stackoverflow.com/questions/39260820/is-sparks-kmeans-unable-to-handle-bigdata)। हालांकि, मेरे मामले में नौकरी बस * लटकती है *, यह सिर्फ इतना धीमा नहीं है। क्या आप अपनी नौकरी चलाने के दौरान कोई प्रगति देखेंगे और यह धीमा होगा, या यह मेरे मामले में कुछ भी नहीं करेगा? – gsamaras

उत्तर

5

ऐसा लगता है कि यह अपेक्षाकृत सरल है। आप काफी बड़े के उपयोग करते हैं और इसे एक महंगे प्रारंभिक एल्गोरिदम के साथ जोड़ते हैं।

डिफ़ॉल्ट रूप से स्पार्क K-means++ के वितरित संस्करण के रूप में उपयोग कर रहा है जिसे के-साधन कहा जाता है || (What exactly is the initializationSteps parameter in Kmeans++ in Spark MLLib? देखें)। वितरित संस्करण लगभग ओ (के) है इसलिए बड़े के साथ आप धीमी शुरुआत की उम्मीद कर सकते हैं। यह समझाया जाना चाहिए कि जब आप पुनरावृत्तियों की संख्या कम करते हैं तो आपको कोई सुधार क्यों नहीं दिखता है।

मॉडल के प्रशिक्षित होने पर बड़े के का उपयोग करना महंगा होता है। स्पार्क लॉयड्स का एक संस्करण उपयोग कर रहा है जो लगभग ओ (एनकेडीआई) है।

यदि आप डेटा की जटिल संरचना की अपेक्षा करते हैं तो संभवतः के-मीन्स से इसे संभालने के लिए वहां एक बेहतर एल्गोरिदम हो सकता है लेकिन यदि आप वास्तव में इसके साथ रहना चाहते हैं तो आप यादृच्छिक प्रारंभिकरण का उपयोग शुरू करते हैं।

+0

क्या आप कह रहे हैं कि अधिकांश समय इस "प्रारंभिकरण" से खाया जाता है? – Kai

+0

मैं यह एक महंगा कदम और व्यवहार के खातों के लिए कह रहा हूं। लेकिन अधिक महत्वपूर्ण बात यह है कि हजारों क्लस्टर के साथ प्रशिक्षण के-का मतलब अच्छी तरह से प्रदर्शन नहीं कर सकता है। – zero323

+0

बस 5000 ग्राहक के साथ स्पार्क नौकरी चला, यादृच्छिक प्रारंभिक, 7 मिनट में समाप्त !! बहुत बढ़िया!! अब मैं कागजात को सटीकता पर प्रभाव देखने के लिए पढ़ूंगा। धन्यवाद, फिर भी शून्य। क्लस्टर की संख्या के लिए, मुझे लगता है कि समस्या की आयामता बहुत अधिक महत्वपूर्ण है-> बहुत अधिक मंदता में हर बिंदु हर बिंदु से "दूर" होता है। निष्पादन गति से अधिक के लिए अंक की संख्या वास्तव में महत्वपूर्ण नहीं है। – Kai

1

कृपया के-साधनों के अन्य कार्यान्वयनों को आजमाएं। ELKI में वेरिएंट जैसे कुछ वे स्पार्क से बेहतर हैं, यहां तक ​​कि केवल एक ही CPU पर भी। आप आश्चर्यचकित होंगे कि क्लस्टर पर जाने के बिना आप एक नोड से कितना प्रदर्शन प्राप्त कर सकते हैं! मेरे प्रयोगों से, दुर्भाग्य से, अच्छे स्थानीय कार्यान्वयन को हरा करने के लिए आपको कम से कम 100 नोड क्लस्टर की आवश्यकता होगी।

मैंने पढ़ा है कि these C++ versions बहु-कोर (लेकिन सिंगल-नोड) हैं और शायद सबसे तेज़ के-साधन हैं जो आप अभी पा सकते हैं, लेकिन मैंने अभी तक यह कोशिश नहीं की है (मेरी सभी ज़रूरतों के लिए, ईएलकेआई संस्करण थे तेजी से तेजी से, मेरे सबसे बड़े डेटा सेट पर कुछ सेकंड में खत्म)।

+0

मैं इन्हें इंगित करने के लिए धन्यवाद, एक नज़र डालेगा। – Kai

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