Tôi đang cố gắng hiểu sự khác biệt giữa SLURM's srun
và sbatch
các lệnh. Tôi sẽ hài lòng với lời giải thích chung chung, thay vì câu trả lời cụ thể cho các câu hỏi sau, nhưng đây là một số điểm nhầm lẫn cụ thể có thể là điểm khởi đầu và đưa ra ý tưởng về những gì tôi đang tìm kiếm.
Theo tài liệu , srun
là để nộp công việc và sbatch
là để nộp công việc để thực hiện sau này, nhưng sự khác biệt thực tế đối với tôi là không rõ ràng và hành vi của họ dường như giống nhau. Ví dụ, tôi có một cụm có 2 nút, mỗi nút có 2 CPU. Nếu tôi thực hiện srun testjob.sh &
5x liên tiếp, nó sẽ xếp hàng công việc thứ năm một cách độc đáo cho đến khi CPU khả dụng, cũng như thực thi sbatch testjob.sh
.
Để làm cho câu hỏi cụ thể hơn, tôi nghĩ một nơi tốt để bắt đầu có thể là: Một số điều tôi có thể làm với cái này mà tôi không thể làm với cái kia, và tại sao?
Nhiều đối số cho cả hai lệnh đều giống nhau. Những người mà dường như có liên quan nhất là --ntasks
, --nodes
, --cpus-per-task
, --ntasks-per-node
. Chúng liên quan với nhau như thế nào, và chúng khác nhau như thế nào đối srun
với vs sbatch
?
Một sự khác biệt đặc biệt là srun
sẽ gây ra một lỗi nếu testjob.sh
không có thực thi phép tức là chmod +x testjob.sh
trong khi sbatch
hạnh phúc sẽ chạy nó. Điều gì đang xảy ra "dưới mui xe" gây ra trường hợp này?
Tài liệu này cũng đề cập đến cách srun
thường được sử dụng bên trong các sbatch
tập lệnh. Điều này dẫn đến câu hỏi: Chúng tương tác với nhau như thế nào, và usecase "chuẩn" cho mỗi chúng là gì? Cụ thể, tôi có bao giờ sử dụng srun
chính nó không?
srun
bên trong tập lệnh gửi? Có lẽ tôi đang nhầm lẫn về ý nghĩa của "bước công việc". Ví dụ: nếu tôi có một tập lệnh được gọi làrunjob.sh
chứa#!/bin/bash srun myjob.sh
, có sự khác biệt thực tế giữa việc gọi (a)sbatch runjob.sh
vs (b)sbatch myjob.sh
vs (c)srun myjob.sh
vs (d)srun runjob.sh
không? (Rõ ràng cái cuối cùng là ngớ ngẩn, nhưng tôi tò mò).