ฉันพยายามทำความเข้าใจว่าความแตกต่างระหว่าง SLURM srun
และsbatch
คำสั่งคืออะไร ฉันจะพอใจกับคำอธิบายทั่วไปมากกว่าคำตอบเฉพาะสำหรับคำถามต่อไปนี้ แต่ต่อไปนี้เป็นประเด็นเฉพาะของความสับสนที่อาจเป็นจุดเริ่มต้นและให้ความคิดเกี่ยวกับสิ่งที่ฉันกำลังมองหา
อ้างอิงถึงเอกสาร , srun
มีไว้เพื่อส่งงานและsbatch
สำหรับการส่งงานสำหรับการดำเนินการในภายหลัง แต่ความแตกต่างในทางปฏิบัติก็ไม่มีความชัดเจนให้ฉันและพฤติกรรมของพวกเขาดูเหมือนว่าจะเป็นแบบเดียวกัน ตัวอย่างเช่นฉันมีคลัสเตอร์ที่มี 2 โหนดแต่ละโหนดมี CPU 2 ตัว ถ้าผมดำเนินการsrun testjob.sh &
5x ในแถวมันอย่างจะคิวงานที่ห้าจน CPU sbatch testjob.sh
ที่สามารถใช้งานได้เป็นจะดำเนินการ
เพื่อให้คำถามเป็นรูปธรรมมากขึ้นฉันคิดว่าจุดเริ่มต้นที่ดีอาจเป็น: มีสิ่งใดบ้างที่ฉันสามารถทำได้กับคำถามที่ฉันไม่สามารถทำได้กับอีกคำถามและเพราะเหตุใด
อาร์กิวเมนต์จำนวนมากของทั้งสองคำสั่งเหมือนกัน คนที่ดูเหมือนที่เกี่ยวข้องมากที่สุดคือ--ntasks
, --nodes
, ,--cpus-per-task
สิ่งเหล่านี้เกี่ยวข้องกันอย่างไรและต่างกันอย่างไรสำหรับvs ?--ntasks-per-node
srun
sbatch
ความแตกต่างอย่างหนึ่งคือsrun
จะทำให้เกิดข้อผิดพลาดหากtestjob.sh
ไม่มีสิทธิ์ปฏิบัติการเช่นchmod +x testjob.sh
ในขณะที่sbatch
จะรันอย่างมีความสุข เกิดอะไรขึ้น "ภายใต้ประทุน" ที่ทำให้เป็นเช่นนี้?
เอกสารประกอบยังกล่าวถึงที่srun
มักใช้ภายในsbatch
สคริปต์ สิ่งนี้นำไปสู่คำถาม: พวกเขามีปฏิสัมพันธ์กันอย่างไรและอะไรคือ "หลักการใช้" สำหรับพวกเขาแต่ละคน? โดยเฉพาะฉันจะใช้srun
เองหรือไม่?
srun
เข้าไปในสคริปต์การส่ง? บางทีฉันอาจสับสนเกี่ยวกับความหมายของ "ขั้นตอนงาน" ตัวอย่างเช่นถ้าฉันมีสคริปต์ที่เรียกrunjob.sh
ว่า#!/bin/bash srun myjob.sh
มีความแตกต่างในทางปฏิบัติระหว่างการเรียก (a)sbatch runjob.sh
vs (b)sbatch myjob.sh
vs (c)srun myjob.sh
vs (d)srun runjob.sh
หรือไม่ (เห็นได้ชัดว่าคนสุดท้ายงี่เง่า แต่ฉันก็สงสัย)