मैं यह समझने की कोशिश कर रहा हूं कि 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
खुद से उपयोग करूंगा ?
srun
सबमिशन स्क्रिप्ट के अंदर कॉल करने के लिए परेशान क्यों ? शायद मैं "नौकरी कदम" के अर्थ के बारे में उलझन में हूं। उदाहरण के लिए, यदि मेरे पास एक स्क्रिप्टrunjob.sh
है जिसमें वह शामिल है#!/bin/bash srun myjob.sh
, तो क्या कॉलिंग (ए)sbatch runjob.sh
बनाम (बी)sbatch myjob.sh
बनाम (सी)srun myjob.sh
बनाम (डी) के बीच व्यावहारिक अंतर हैsrun runjob.sh
? (स्पष्ट रूप से अंतिम एक मूर्खतापूर्ण है, लेकिन मैं उत्सुक हूं)।