मैं यह समझने की कोशिश कर रहा हूं कि 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? (स्पष्ट रूप से अंतिम एक मूर्खतापूर्ण है, लेकिन मैं उत्सुक हूं)।