2011-11-02 10 views
26

मुझे लाखों नोड्स और लाखों किनारों के साथ बड़े नेटवर्क पर नेटवर्क विश्लेषण में रूचि है। मैं कई प्रारूपों से पार्स नेटवर्क जैसी चीजों को करने में सक्षम होना चाहता हूं, कनेक्टेड घटकों को ढूंढ सकता हूं, समुदायों का पता लगा सकता हूं, और पेजरैंक जैसे केंद्रीयता उपायों को चला सकता हूं।नेटवर्कएक्स के साथ क्या स्केलेबिलिटी समस्याएं जुड़ी हैं?

मैं नेटवर्कएक्स से आकर्षित हूं क्योंकि इसमें एक अच्छा एपीआई, अच्छा दस्तावेज है, और वर्षों से सक्रिय विकास में है। इसके अलावा क्योंकि यह अजगर में है, इसे विकसित करने के लिए जल्दी होना चाहिए।

हाल ही में एक प्रस्तुति में (स्लाइड GitHub here पर उपलब्ध हैं), यह दावा किया गया कि:

कई अन्य उपकरणों के विपरीत, NX पैमाने आधुनिक समस्याओं के लिए प्रासंगिक पर डेटा को संभालने के लिए डिज़ाइन किया गया है .. । एनएक्स में कोर एल्गोरिदम का सबसे तेज़ विरासत कोड पर निर्भर है।

प्रस्तुति में यह भी कहा गया है कि नेटवर्कएक्स के बेस एल्गोरिदम सी/फोरट्रान में लागू किए गए हैं।

हालांकि, स्रोत कोड को देखते हुए, ऐसा लगता है कि नेटवर्कएक्स ज्यादातर पाइथन में लिखा जाता है। मैं स्रोत कोड से बहुत परिचित नहीं हूं, लेकिन मुझे कुछ उदाहरणों से अवगत है जहां नेटवर्कएक्स भारी भारोत्तोलन करने के लिए numpy का उपयोग करता है (जो बदले में सी/फोरट्रान रैखिक बीजगणित करने के लिए उपयोग करता है)। उदाहरण के लिए, फ़ाइल networkx/networkx/algorithms/centrality/eigenvector.py eigenvectors की गणना करने के लिए numpy का उपयोग करता है।

क्या किसी को पता है कि एक अनुकूलित लाइब्रेरी को कॉल करने की यह रणनीति वास्तव में नेटवर्कएक्स में प्रचलित है, या अगर कुछ एल्गोरिदम इसे करते हैं? क्या कोई भी नेटवर्कएक्स से जुड़े अन्य स्केलेबिलिटी मुद्दों का वर्णन कर सकता है? NetworkX लीड प्रोग्रामर से

उत्तर मैं NetworkX मेलिंग सूची पर इस सवाल उठाया, और Aric Hagberg ने जवाब दिया:

डेटा NetworkX में इस्तेमाल किया संरचनाओं बड़ी समस्याओं का स्केलिंग के लिए उपयुक्त हैं (उदाहरण के लिए डेटा संरचना एक आसन्न सूची है)। एल्गोरिदम में विभिन्न स्केलिंग गुण होते हैं लेकिन उनमें से कुछ उल्लेख करने योग्य हैं (उदा। पेजरैंक, कनेक्टेड घटक, किनारों की संख्या में रैखिक जटिलता हैं)।

इस बिंदु पर नेटवर्कएक्स शुद्ध पायथन कोड है। आसन्न संरचना पाइथन शब्दकोशों के साथ एन्कोड किया गया है जो स्मृति और कम्प्यूटेशनल गति के खर्च पर बहुत लचीलापन प्रदान करता है। बड़े ग्राफ बहुत मेमोरी लेंगे और आप अंततः बाहर चले जाएंगे।

नेटवर्कएक्स एल्गोरिदम के लिए न्यूमपी और साइपी का उपयोग करता है जो मुख्य रूप से रैखिक बीजगणित के आधार पर होता है। उस स्थिति में ग्राफ को (प्रतिलिपि) को नम्पी मैट्रिक्स या SciPy स्पैस मैट्रिस का उपयोग करके आसन्न मैट्रिक्स के रूप में दर्शाया गया है। उन एल्गोरिदम विरासत सी और फ़ोरट्रान कोड से लाभ उठा सकते हैं जिसका उपयोग न्यूमपी और विज्ञान में हुड के तहत किया जाता है।

+0

ऐसा लगता है कि मुझे इस समय स्रोत का निरीक्षण करने में परेशानी है। लेकिन किसी भी मामले में, विचार करें: 80% समय कोड के 20% में खर्च किया जा सकता है। Mercurial * ज्यादातर * पायथन में लिखा गया है, फिर भी मैंने एक व्यक्ति को गिट की तुलना में इसकी गति के बारे में शिकायत नहीं की है, जो ज्यादातर सी – delnan

+0

हां है, लेकिन मैं स्मृति के बारे में भी चिंतित हूं। नेटवर्कक्स में ग्राफ प्रतिनिधित्व एक पायथन पुस्तकालय है। क्या इसका मतलब यह होगा कि मैं स्मृति में केवल छोटे ग्राफ फिट कर सकता हूं? – conradlee

उत्तर

14

आपका बड़ा मुद्दा स्मृति होगा। पायथन बस आपके वर्ग कार्यान्वयन में हुप्स के बिना कूदने के लाखों वस्तुओं को संभाल नहीं सकता है। कई ऑब्जेक्ट्स की मेमोरी ओवरहेड बहुत अधिक है, आप 2 जीबी हिट करते हैं, और 32 बिट कोड काम नहीं करेगा। स्लॉट, सरणी, या numpy का उपयोग कर इसके आसपास के तरीके हैं। यह ठीक होना चाहिए, क्योंकि नेटवर्कक्स प्रदर्शन के लिए लिखा गया था, लेकिन अगर ऐसी कुछ चीजें हैं जो अभी काम नहीं करती हैं तो मैं आपकी मेमोरी उपयोग की जांच करूंगा।

स्केलिंग के लिए, एल्गोरिदम मूल रूप से केवल एक चीज है जो ग्राफ के साथ मायने रखती है। ग्राफ़ एल्गोरिदम में वास्तव में बदसूरत स्केलिंग होने पर गलत होते हैं, और वे पाइथन में किसी भी अन्य भाषा के रूप में सही होने की संभावना है।

1

तथ्य यह है कि networkX ज्यादातर अजगर में लिखा है इसका मतलब यह नहीं है कि यह स्केलेबल नहीं है, और न ही पूर्णता का दावा है। हमेशा एक व्यापार बंद है। यदि आप अपनी "मशीनों" पर अधिक पैसा फेंकते हैं, तो आप जितना चाहें उतना स्केलेबिलिटी प्राप्त करेंगे जितना आप एक पाइथोनिक ग्राफ लाइब्रेरी का उपयोग करने के लाभ चाहते हैं।

यदि नहीं, वहाँ अन्य समाधान, (here और here) है, जो कम स्मृति की खपत कर सकते (बेंचमार्क और देखो, मुझे लगता है कि पूरी तरह से igraph सी तो यह होगा समर्थित है) हैं, लेकिन आप NX के pythonic महसूस वंचित हो सकते हैं।

+0

वह आंशिक रूप से मेरे प्रश्न का उत्तर देता है। लेकिन मैं यह भी जानना चाहता हूं कि सीए/फोरट्रान में नेटवर्कएक्स के "कोर" एल्गोरिदम लागू किए गए हैं या नहीं। – conradlee

+0

मैंने थोड़ा (वर्तमान) स्रोत कोड की जांच की, और मुझे कोई सी/फोरट्रान कार्यान्वयन नहीं मिला। ऐसा लगता है कि वहां सब कुछ शुद्ध पायथन है ... – hymloth

+0

एक नज़र डालने के लिए धन्यवाद। याद रखें कि अगर numpy कहा जाता है, तो (सिस्टम कॉन्फ़िगरेशन के आधार पर) numpy LAPACK या अन्य अनुकूलित रैखिक बीजगणित पैकेज का उपयोग कर सकता है। मैं इस बात से परिचित नहीं हूं कि नेटवर्कएक्स वास्तव में कितनी बार numpy का उपयोग करता है (यह मेरे प्रश्न को हल करता है), लेकिन मुझे कुछ उदाहरणों के बारे में पता है। उदाहरण के लिए, नेटवर्क/नेटवर्क एक्स/एल्गोरिदम/केंद्रीयता/eigenvector.py में eigenvectors खोजने के लिए numpy का उपयोग करता है। – conradlee

14

यह एक पुरानी सवाल है, लेकिन मुझे लगता है कि यह उल्लेख graph-tool NetworkX काफ़ी मिलती-जुलती कार्यक्षमता है लायक है, लेकिन यह ++ टेम्पलेट के साथ सी में कार्यान्वित किया जाता है (बूस्ट ग्राफ़ लाइब्रेरी का उपयोग), और इसलिए बहुत तेजी से (up to two orders of magnitude है) और बहुत कम स्मृति का उपयोग करता है।

अस्वीकरण: मैं ग्राफ-टूल का लेखक हूं।

+4

मैंने ग्राफ-टूल की कोशिश की। यह वास्तव में तेजी से रास्ता है लेकिन उपयोग करने के लिए बदसूरत तरह। एपीआई पाइथोनिक महसूस नहीं करता है। –

+0

सच ... बस यहां लोगों के साथ अपना अनुभव साझा करना चाहता था। –

+0

@TiagoPeixoto - क्या आपकी लाइब्रेरी ~ 3 एम नोड्स और ~ 10 मीटर किनारों को संभालने के लिए उपयुक्त है? मैं अनुमान लगा रहा हूं कि भंडारण केवल स्मृति है, क्या यह सही है? – Avision

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