SLURM `srun` बनाम` sbatch` और उनके पैरामीटर


101

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

प्रलेखन के अनुसार , srunनौकरियों को प्रस्तुत करने के लिए है, और sbatchबाद के निष्पादन के लिए नौकरी प्रस्तुत करने के लिए है, लेकिन व्यावहारिक अंतर मेरे लिए स्पष्ट नहीं है, और उनका व्यवहार समान लगता है। उदाहरण के लिए, मेरे पास 2 नोड्स के साथ एक क्लस्टर है, प्रत्येक में 2 सीपीयू हैं। अगर मैं srun testjob.sh &एक पंक्ति में 5x निष्पादित करता हूं , तो यह पांचवीं नौकरी को अच्छी तरह से कतार में खड़ा कर देगा जब तक कि एक सीपीयू उपलब्ध नहीं होता, जैसा कि निष्पादित होगा sbatch testjob.sh

प्रश्न को अधिक ठोस बनाने के लिए, मुझे लगता है कि शुरू करने के लिए एक अच्छी जगह हो सकती है: कुछ चीजें हैं जो मैं एक के साथ कर सकता हूं जो मैं दूसरे के साथ नहीं कर सकता, और क्यों?

दोनों आज्ञाओं के कई तर्क समान हैं। जो कि सर्वाधिक प्रासंगिक प्रतीत होते हैं --ntasks, --nodes, --cpus-per-task, --ntasks-per-nodeये एक-दूसरे से कैसे संबंधित हैं, और वे srunबनाम कैसे भिन्न हैं sbatch?

एक विशेष अंतर यह है कि srunएक त्रुटि का कारण होगा यदि testjob.shनिष्पादन योग्य अनुमति नहीं है, chmod +x testjob.shजबकि sbatchयह खुशी से चलेगा। "हुड के नीचे" क्या हो रहा है जो इस मामले का कारण बनता है?

दस्तावेज़ में उन उल्लेखों का भी उल्लेख किया गया है srunजो आमतौर पर sbatchस्क्रिप्ट के अंदर उपयोग किए जाते हैं। यह सवाल की ओर जाता है: वे एक-दूसरे के साथ कैसे बातचीत करते हैं, और उनके लिए "विहित" usecase क्या है? विशेष रूप से, क्या मैं कभी srunखुद से उपयोग करूंगा ?

जवाबों:


117

दस्तावेज कहता है

srun is used to submit a job for execution in real time

जबकि

sbatch is used to submit a job script for later execution.

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

यदि आप साइन के srunसाथ बैकग्राउंड में उपयोग करते हैं &, तो आप 'ब्लॉकिंग' फीचर को हटा देते हैं srun, जो इंटरैक्टिव लेकिन नॉन-ब्लॉकिंग हो जाता है। यह अभी भी इंटरैक्टिव है, जिसका अर्थ है कि आउटपुट आपके टर्मिनल को अव्यवस्थित करेगा, और srunप्रक्रियाएं आपके टर्मिनल से जुड़ी हुई हैं। यदि आप डिस्कनेक्ट करते हैं, तो आप उन पर नियंत्रण खो देंगे, या वे मारे जा सकते हैं (यह निर्भर करता है कि वे stdoutमूल रूप से उपयोग करते हैं या नहीं)। और वे मारे जाएंगे यदि आप जिस मशीन को नौकरियों को जमा करने के लिए कनेक्ट करते हैं, वह रिबूट हो जाता है।

यदि आप उपयोग करते हैं sbatch, तो आप अपनी नौकरी जमा करते हैं और इसे स्लम द्वारा नियंत्रित किया जाता है; आप बिना किसी परिणाम के अपने टर्मिनल आदि को काट सकते हैं। आपकी नौकरी अब एक चल रही प्रक्रिया से जुड़ी नहीं है।

कुछ चीजें हैं जो मैं एक के साथ कर सकता हूं जो मैं दूसरे के साथ नहीं कर सकता, और क्यों?

एक विशेषता है कि के लिए उपलब्ध है sbatchनहीं करने के लिए और srunहै काम arrrays । जैसा कि srunएक sbatchस्क्रिप्ट के भीतर इस्तेमाल किया जा सकता है , ऐसा कुछ भी नहीं है जिसे आप नहीं कर सकते sbatch

ये एक-दूसरे से कैसे संबंधित हैं, और ये srun vs sbatch के लिए कैसे भिन्न हैं?

सभी मानकों --ntasks, --nodes, --cpus-per-task, --ntasks-per-nodeदोनों आदेशों में एक ही अर्थ है। यह लगभग सभी मापदंडों के लिए सच है, उल्लेखनीय अपवाद के साथ --exclusive

"हुड के नीचे" क्या हो रहा है जो इस मामले का कारण बनता है?

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

वे एक-दूसरे के साथ कैसे बातचीत करते हैं, और उनके लिए "विहित" usecase क्या है?

आप आमतौर पर sbatchनौकरी जमा करने के लिए और srunसबमिशन स्क्रिप्ट में जॉब स्टेप बनाने के लिए उपयोग करते हैं क्योंकि स्लम उन्हें कहता है। srunप्रक्रियाओं को लॉन्च करने के लिए उपयोग किया जाता है। यदि आपका प्रोग्राम एक समानांतर MPI प्रोग्राम है, तो srunसभी MPI प्रक्रियाएँ बनाने का ध्यान रखता है। यदि नहीं, srunतो --ntasksविकल्प द्वारा निर्दिष्ट के रूप में कई बार अपना कार्यक्रम चलाएगा । ऐसे कई उपयोग मामले हैं जिनके आधार पर आपका कार्यक्रम समान है या नहीं, लंबे समय से चल रहा है या नहीं, एक भी निष्पादन योग्य है या नहीं, आदि से बना है, जब तक कि अन्यथा निर्दिष्ट न हो, srunडिफ़ॉल्ट रूप से उस के प्रासंगिक विकल्पों को विरासत में मिलता है sbatchया sallocजो इसे चलाता है। के तहत ( यहाँ से )

विशेष रूप से, क्या मैं कभी भी खुद से सरुन का उपयोग करूंगा?

छोटे परीक्षणों के अलावा, नहीं। एक सामान्य उपयोग srun --pty bashएक कम्प्यूट नौकरी पर एक शेल प्राप्त करना है।


6
उत्तर के लिए धन्यवाद, यह मेरे द्वारा उम्मीद की जा सकने वाली किसी भी चीज़ से बेहतर है। एक अनुवर्ती, क्योंकि यह भ्रम के मेरे मूल बिंदुओं में से एक था: srunसबमिशन स्क्रिप्ट के अंदर कॉल करने के लिए परेशान क्यों ? शायद मैं "नौकरी कदम" के अर्थ के बारे में उलझन में हूं। उदाहरण के लिए, यदि मेरे पास एक स्क्रिप्ट runjob.shहै जिसमें वह शामिल है #!/bin/bash srun myjob.sh, तो क्या कॉलिंग (ए) sbatch runjob.shबनाम (बी) sbatch myjob.shबनाम (सी) srun myjob.shबनाम (डी) के बीच व्यावहारिक अंतर है srun runjob.sh? (स्पष्ट रूप से अंतिम एक मूर्खतापूर्ण है, लेकिन मैं उत्सुक हूं)।
dkv

3
शायद आप एक प्रशिक्षण सत्र की स्लाइड्स को ब्राउज़ कर सकते हैं जो मैंने हाल ही में विचारों के लिए दिया है कि कैसे प्रस्तुत स्क्रिप्ट के अंदर srun का उपयोग किया जाता है: cism.ucl.ac.be/Services/Formations/slurm/2016/slurm.pdf
damienfrancois

5
यह स्लाइड्स में सभी उदाहरणों की तरह दिखता है (साथ ही CECI पृष्ठ पर ट्यूटोरियल) सबमिशन स्क्रिप्ट के srunअंदर का उपयोग करता है sbatch। हालाँकि, मैंने पाया है कि srunसबमिशन स्क्रिप्ट के बिना कमांड उसी तरह चलेंगे। क्या वास्तव में ऊपर उल्लिखित चार आह्वानों के बीच अंतर है?
dkv

9
आपके सभी उदाहरण उसी तरह से चलेंगे यदि (1) आवंटन एक सीपीयू के लिए है और (2) कार्यक्रम पूरी तरह से अनुक्रमिक है। मतभेद देखने के लिए, एक से अधिक कार्य करने का अनुरोध करें। एक और अंतर यह है कि यदि आप sbatch में srun का उपयोग नहीं करते हैं, तो sstat कमांड कोई उपयोगी जानकारी नहीं लौटाएगा
Damienfrancois

1
@ इस संस्करण को और अधिक बढ़ा सकते हैं: github.com/damienfrancois/slurm-helper/blob/master/slurm.vim
damienfrancois

5

यह वास्तव में पूरी तरह से सवाल का जवाब नहीं देता है, लेकिन यहां कुछ और जानकारी है जो मुझे मिली जो भविष्य में किसी के लिए उपयोगी हो सकती है:


एक से संबंधित धागा मैंने पाया एक समान प्रश्न के साथ:

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

srun को नौकरी आवंटन के बाहर भी आमंत्रित किया जा सकता है। उस स्थिति में, संसाधनों का अनुरोध करता है, और जब वे संसाधन प्रदान किए जाते हैं, तो उन संसाधनों को एक ही नौकरी और नौकरी के चरण के रूप में लॉन्च करता है।

एक अपेक्षाकृत नया वेब पेज है, जो -B और --exclusive विकल्पों के बारे में अधिक विस्तार से बताता है।

डॉक / html / cpu_management.shtml


SLURM FAQ पृष्ठ से अतिरिक्त जानकारी ।

Srun कमांड में ऑपरेशन के दो अलग-अलग मोड हैं। सबसे पहले, यदि किसी मौजूदा नौकरी के भीतर नहीं चलाया जाता है (यानी स्लैक या sbatch द्वारा निर्मित स्लम नौकरी आवंटन के भीतर नहीं), तो यह एक नौकरी आवंटन का निर्माण करेगा और एक आवेदन को प्रायोजित करेगा। यदि किसी मौजूदा आवंटन के भीतर चलाया जाता है, तो srun कमांड केवल एप्लिकेशन को स्पैन करता है। इस प्रश्न के लिए, हम केवल ऑपरेशन के पहले मोड को संबोधित करेंगे और sbatch और srun कमांड का उपयोग करके नौकरी आवंटन बनाने की तुलना करेंगे।

Srun कमांड इंटरएक्टिव उपयोग के लिए डिज़ाइन किया गया है, जिसमें कोई भी आउटपुट की निगरानी करता है। एप्लिकेशन के आउटपुट को srun कमांड के आउटपुट के रूप में देखा जाता है, आमतौर पर उपयोगकर्ता के टर्मिनल पर। Sbatch कमांड को बाद के निष्पादन के लिए एक स्क्रिप्ट प्रस्तुत करने के लिए डिज़ाइन किया गया है और इसका आउटपुट एक फ़ाइल में लिखा गया है। नौकरी आवंटन में उपयोग किए जाने वाले कमांड विकल्प लगभग समान हैं। विकल्पों में सबसे ध्यान देने योग्य अंतर यह है कि sbatch कमांड नौकरी सरणियों की अवधारणा का समर्थन करता है, जबकि srun नहीं करता है। एक और महत्वपूर्ण अंतर गलती सहिष्णुता में है। आमतौर पर sbatch नौकरियों को शामिल करने में विफलताओं के परिणामस्वरूप नौकरी को फिर से लागू किया जाता है और फिर से क्रियान्वित किया जाता है, जबकि srun में विफलताओं के परिणामस्वरूप आमतौर पर एक त्रुटि संदेश उत्पन्न होता है जो इस उम्मीद के साथ उत्पन्न होता है कि उपयोगकर्ता एक उपयुक्त फैशन में प्रतिक्रिया देगा।


एक और प्रासंगिक बातचीत यहाँ

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