Próbuję zrozumieć, jaka jest różnica między poleceniami SLURM sruna sbatchpoleceniami. Będę zadowolony z ogólnego wyjaśnienia, a nie konkretnych odpowiedzi na poniższe pytania, ale oto kilka konkretnych punktów nieporozumień, które mogą być punktem wyjścia i dać wyobrażenie o tym, czego szukam.
Zgodnie z dokumentacją , srunjest dla zadań składających, a sbatchto za złożenie pracy dla późniejszego wykonania, ale w praktyce różnica jest dla mnie jasne, a ich zachowanie wydaje się być takie same. Na przykład mam klaster z 2 węzłami, każdy z 2 procesorami. Jeśli wykonam srun testjob.sh &5 razy z rzędu, będzie to ładnie ustawiać w kolejce piąte zadanie, aż procesor stanie się dostępny, podobnie jak wykonywanie sbatch testjob.sh.
Aby to pytanie było bardziej konkretne, myślę, że dobrym punktem wyjścia może być: Jakie są rzeczy, które mogę zrobić z jednym, czego nie mogę zrobić z drugim i dlaczego?
Wiele argumentów obu poleceń jest takich samych. Te, które wydają się najbardziej istotne jest --ntasks, --nodes, --cpus-per-task, --ntasks-per-node. W jaki sposób są one ze sobą powiązane i jak różnią się między sobą sruna sbatch?
Jedna szczególna różnica jest taka, że srunspowoduje błąd, jeśli testjob.shnie ma zgody wykonywalny IE chmod +x testjob.shnatomiast sbatchchętnie uruchom go. Co się dzieje „pod maską”, co powoduje, że tak się dzieje?
Dokumentacja wspomina również, że srunjest to powszechnie używane w sbatchskryptach. Prowadzi to do pytania: w jaki sposób współdziałają ze sobą i jaki jest „kanoniczny” przypadek użycia dla każdego z nich? A konkretnie, czy kiedykolwiek użyłbym srunsam?
srunwewnątrz skryptu zgłoszeniowego? Być może jestem zdezorientowany co do znaczenia „etapu pracy”. Na przykład, jeśli mam skrypt o nazwie,runjob.shktóry zawiera#!/bin/bash srun myjob.sh, czy istnieje praktyczna różnica między wywołaniem (a)sbatch runjob.shvs (b)sbatch myjob.shvs (c)srun myjob.shvs (d)srun runjob.sh? (Oczywiście to ostatnie jest głupie, ale jestem ciekawy).