Saya mencoba untuk memahami apa perbedaan antara SLURM srun
dan sbatch
perintah. Saya akan senang dengan penjelasan umum, daripada jawaban spesifik untuk pertanyaan-pertanyaan berikut, tetapi berikut adalah beberapa poin kebingungan spesifik yang dapat menjadi titik awal dan memberi gambaran tentang apa yang saya cari.
Menurut dokumentasi , srun
adalah untuk mengirimkan pekerjaan, dan sbatch
untuk mengirimkan pekerjaan untuk eksekusi nanti, tetapi perbedaan praktisnya tidak jelas bagi saya, dan perilaku mereka tampaknya sama. Misalnya, saya memiliki cluster dengan 2 node, masing-masing dengan 2 CPU. Jika saya mengeksekusi srun testjob.sh &
5x berturut-turut, itu akan dengan baik mengantri pekerjaan kelima sampai CPU tersedia, seperti yang akan dieksekusi sbatch testjob.sh
.
Untuk membuat pertanyaan lebih konkret, saya pikir tempat yang baik untuk memulai mungkin: Apa saja hal yang dapat saya lakukan dengan satu hal yang tidak dapat saya lakukan dengan yang lain, dan mengapa?
Banyak argumen untuk kedua perintah itu sama. Orang-orang yang tampaknya paling relevan adalah --ntasks
, --nodes
, --cpus-per-task
, --ntasks-per-node
. Bagaimana ini terkait satu sama lain, dan apa perbedaannya untuk srun
vs sbatch
?
Satu perbedaan khusus adalah yang srun
akan menyebabkan kesalahan jika testjob.sh
tidak memiliki izin yang dapat dieksekusi yaitu chmod +x testjob.sh
sedangkan sbatch
akan dengan senang hati menjalankannya. Apa yang terjadi "di bawah tenda" yang menyebabkan hal ini terjadi?
Dokumentasi juga menyebutkan yang srun
biasa digunakan di dalam sbatch
skrip. Hal ini mengarah pada pertanyaan: Bagaimana mereka berinteraksi satu sama lain, dan apa kasus penggunaan "kanonik" untuk masing-masing mereka? Secara khusus, apakah saya akan pernah menggunakannya srun
sendiri?
srun
dalam skrip pengiriman? Mungkin saya bingung tentang arti "langkah kerja". Misalnya, jika saya memiliki skrip yang disebutrunjob.sh
yang berisi#!/bin/bash srun myjob.sh
, apakah ada perbedaan praktis antara memanggil (a)sbatch runjob.sh
vs (b)sbatch myjob.sh
vs (c)srun myjob.sh
vs (d)srun runjob.sh
? (Jelas yang terakhir konyol, tapi saya penasaran).