एचपीसी क्लस्टर के साथ काम करना


11

मेरे विश्वविद्यालय में, हमारे पास एचपीसी कंप्यूटिंग क्लस्टर है। मैं क्लासिफायर और इतने पर प्रशिक्षित करने के लिए क्लस्टर का उपयोग करता हूं। इसलिए, आम तौर पर, क्लस्टर में नौकरी भेजने के लिए, (जैसे अजगर स्किट-लर्न स्क्रिप्ट), मुझे एक बैश स्क्रिप्ट लिखने की ज़रूरत है जिसमें (अन्य के अलावा) एक कमांड शामिल है qsub script.py

हालाँकि, मुझे यह प्रक्रिया बहुत निराशाजनक लगती है। आमतौर पर ऐसा होता है कि मैं अपने लैपटॉप पर पाइथन स्क्रिप्ट लिखता हूं और फिर मैं सर्वर पर लॉगिन करता हूं और एसवीएन रिपॉजिटरी को अपडेट करता हूं, इसलिए मुझे वहीं पाइथन स्क्रिप्ट मिलती है। फिर मैं उस बैश स्क्रिप्ट को लिखता हूं या उसे संपादित करता हूं, इसलिए मैं बैश स्क्रिप्ट को चला सकता हूं।

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

मुझे यकीन है कि यहां बहुत से लोग अपने डेटा विज्ञान कार्यों के लिए कंप्यूटिंग क्लस्टर का उपयोग कर रहे हैं। मैं सिर्फ यह जानना चाहता हूं कि आप लोग क्लस्टर्स को नौकरी भेजने का प्रबंधन कैसे करते हैं?


1
आह, परिनियोजन की खुशियाँ ... वितरित प्रणालियों की खुशियों से बढ़ी :)
लॉग

जवाबों:


5

अपने स्थानीय व्यवस्थापक से अपनी स्थानीय मशीन को "सबमिट होस्ट" के रूप में जोड़ने के लिए कहें, और SGE स्थापित करें (जो हम मानते हैं कि आप उपयोग कर रहे हैं, आप वास्तव में नहीं कहते हैं) तो आप qsubअपनी मशीन से कर सकते हैं ।

या ....

Emacs का उपयोग करें, फिर आप अपने HPC पर emacs की "tramp" ssh- कनेक्शन सुविधाओं के माध्यम से संपादित कर सकते हैं, और एक अन्य emacs विंडो में एक खोल खुला रख सकते हैं। आप यह नहीं कहते कि आप किस संपादक / ऑपरेटिंग सिस्टम का उपयोग करना चाहते हैं। तुम भी दो स्थानों में एक फ़ाइल को बचाने के लिए emacs कॉन्फ़िगर कर सकते हैं, ताकि आप अपने स्थानीय मशीन को परीक्षण चलाने के लिए और बड़ी नौकरियों के लिए एक साथ HPC फ़ाइल सिस्टम में सहेज सकें।


4

एक स्थानीय मशीन से क्लस्टर में कंप्यूटिंग नोड्स में फ़ाइल की प्रतिलिपि बनाने के बोझ को कम करने के लिए कई समाधान हैं। एक साधारण दृष्टिकोण एक अंतरफलक ऐसे ही क्लस्टर में मशीनों के लिए बहु-उपयोग, की अनुमति देता है का उपयोग है clusterssh (cssh)। यह आपको टर्मिनल स्क्रीन के सेट के माध्यम से एक साथ कई मशीनों पर कमांड टाइप करने की अनुमति देता है (प्रत्येक क्लस्टर में एक अलग मशीन के लिए ssh कनेक्शन)।

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

उदाहरण के लिए, आप एक नोड तक पहुंच सकते हैं, डेटा को ऐसी जगह पर कॉपी कर सकते हैं, और नेटवर्क संचार के माध्यम से बस दूरस्थ रूप से डेटा का उपयोग कर सकते हैं। मैं एनएफएस की स्थापना करने के तरीके से परिचित नहीं हूं, लेकिन आपके पास पहले से ही इसका उपयोग है (यदि आपका होम फ़ोल्डर आपके द्वारा उपयोग की जाने वाली मशीनों में समान है)। फिर, स्क्रिप्ट और डेटा को एक ही स्थान पर भेजा जा सकता है, और बाद में दूसरों से एक्सेस किया जा सकता है। यह SVN दृष्टिकोण के समान है, सिवाय इसके कि यह अधिक पारदर्शी / सीधा है।


4

स्रोत संस्करण रिपॉजिटरी का उपयोग करने का आपका दृष्टिकोण एक अच्छा है और यह वास्तव में आपको क्लस्टर पर काम करने और फिर सब कुछ वापस कॉपी करने की अनुमति देता है।

यदि आप अपने लैपटॉप पर अपने पाइथन लिपि में अपने आप को मामूली संपादन करते हुए पाते हैं, तो क्लस्टर पर अपनी एसवीएन निर्देशिका को अपडेट करते हुए, क्यों न सीधे क्लस्टर फ्रंटेंड पर काम करें, सभी आवश्यक मामूली संपादन करें, और फिर, दिन के अंत में, कमिट करें वहाँ सब कुछ और अपने लैपटॉप पर अद्यतन?

आपको बस वहां के वातावरण (OS, Editor, आदि) से परिचित होना है या अपना खुद का वातावरण स्थापित करना है (मैं आमतौर पर अपने होम डायरेक्टरी में Vim , Tmux , आदि का नवीनतम संस्करण उचित dotfiles के साथ स्थापित करता हूं ताकि मुझे लगता है) वहाँ घर।)

इसके अलावा, यदि आप आकार की अनुमति देते हैं, तो आप अपने डेटा और यहां तक ​​कि अपने मध्यवर्ती परिणामों को भी संस्करणित कर सकते हैं। मेरे रिपॉजिटरी में अक्सर कोड, डेटा (मूल और साफ किए गए संस्करण), प्रलेखन और प्रकाशन के लिए पेपर स्रोत (लेटेक्स) शामिल होते हैं।

अंत में, आप स्क्रिप्ट को संशोधित करने से बचने के लिए अपनी नौकरी प्रस्तुत कर सकते हैं। qsubस्टड से एक स्क्रिप्ट को स्वीकार करता है और #$कमांड-लाइन तर्कों के रूप में सभी टिप्पणियों को भी स्वीकार करता है।


3

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

मुझे खेद है कि आपके ग्रिड सिस्टम के लिए मेरे पास कोई सलाह नहीं है, लेकिन मुझे कुछ सामान्य बिंदुओं को सूचीबद्ध करने की आवश्यकता है जिन्हें मैंने किसी भी तैनाती के लिए महत्वपूर्ण पाया है।

उत्पादन परिवर्तन को कॉन्फ़िगरेशन परिवर्तनों तक सीमित रखें । आप लिखते हैं कि आपको "सर्वर पर डेटासेट पथ का उपयोग करना है"; यह मेरे लिए आपको लगता है जैसे आपके पाइथन लिपि में हार्डकोड किए गए रास्ते हैं। यह एक अच्छा विचार नहीं है, ठीक है क्योंकि आपको उन रास्तों को हर दूसरी मशीन में बदलना होगा जहां आप स्क्रिप्ट को स्थानांतरित करते हैं। यदि आप एसवीएन में उन परिवर्तनों को वापस करते हैं, तो आपकी स्थानीय मशीन पर आपके पास दूरस्थ पथ होंगे, और आगे भी ... (क्या होगा यदि केवल पथ नहीं हैं, लेकिन पासवर्ड भी हैं? आपके पास SVN में उत्पादन पासवर्ड नहीं होना चाहिए? सर्वर।)

इसलिए, .iniफ़ाइल में पथ और अन्य सेटअप informations रखें और इसे पढ़ने के लिए, या फ़ाइल का उपयोग करने और json मॉड्यूल का उपयोग करने के लिए configParser का .jsonउपयोग करें । फ़ाइल की एक प्रतिलिपि स्थानीय रूप से और एक दूरस्थ रूप से, दोनों एक ही पथ के नीचे, दोनों बिना SVN नियंत्रण के रखें, और बस उस कॉन्फ़िगरेशन फ़ाइल में पथ को पाइथन स्क्रिप्ट में रखें (या इसे कमांड लाइन से प्राप्त करें यदि आप दोनों को नहीं रख सकते हैं उसी पथ के तहत विन्यास)।

जितना संभव हो कॉन्फ़िगरेशन को छोटा रखें । कोई भी कॉन्फ़िगरेशन आपके एप्लिकेशन का एक "मूविंग पार्ट" है, और किसी भी सिस्टम के मूविंग पार्ट्स के कम मजबूत होने की संभावना है। किसी चीज़ का एक अच्छा संकेतक जो कॉन्फ़िगरेशन में है, ठीक यही है कि आपको हर बार कोड को स्थानांतरित करने पर इसे संपादित करना होगा; जिन चीजों को संपादन की आवश्यकता नहीं है, वे कोड में स्थिरांक के रूप में रह सकते हैं।

अपनी तैनाती को स्वचालित करें । आप इसे अपने स्थानीय मशीन पर बैश स्क्रिप्ट के माध्यम से कर सकते हैं; ध्यान दें कि आप कर सकते हैं एक दूरस्थ मशीन पर कोई आदेश चला के माध्यम से ssh। उदाहरण के लिए:

svn export yourprojectpath /tmp/exportedproject
tar czf /tmp/yourproject.tgz /tmp/exportedproject
scp /tmp/myproject.tgz youruser@remotemachine:~/dev

## Remote commands are in the right hand side, between ''
ssh youruser@remotemachine 'tar xzf ~/dev/yourproject.tgz'
ssh youruser@remotemachine 'qsub ~/dev/yourproject/script.py'

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

यदि आपको इससे अधिक की आवश्यकता है, तो आप पायथन फैब्रिक या उच्च-स्तरीय व्यंजनों का उपयोग करने के बारे में सोच सकते हैं

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.