[英]Is it possible to run SLURM jobs in the background using SRUN instead of SBATCH?
[英]How to submit/run multiple parallel jobs with Slurm/Sbatch?
我正在嘗試向 Slurm 服務器提交大量作業(數百個),並希望避免為我要運行的每個作業提交新的 shell 腳本。 提交的代碼是一個 Python 腳本,它在 shell 腳本中接受兩個輸入變量,並且這些變量是作業之間唯一變化的東西。 適用於單個作業的簡短 shell 腳本示例如下:
#!/bin/bash
#SBATCH -n 1
#SBATCH -t 01:00:00
srun python retrieve.py --start=0 --end=10
我想要的是使用相同的 python 腳本提交大量作業,並且只更改作業之間的“開始”和“結束”變量。 我讀到了一些關於增加所需核心數量('-n')並在每個 srun 命令后寫一個 & 符號的內容,但到目前為止我一直無法讓它工作。
如果有人知道一個快速的方法來做到這一點,我將不勝感激!
要從您當前的解決方案進行構建,您可以轉而使用兩個 CPU,而不是一個:
#!/bin/bash
#SBATCH -n 2
#SBATCH -t 01:00:00
srun -n1 --exclusive python retrieve.py --start=0 --end=10 &
srun -n1 --exclusive python retrieve.py --start=10 --end=20 &
wait
(您可能需要根據邊界是包含還是排除來調整--end
)
上面的腳本請求 2 個 CPU 並創建兩個任務,運行 Python 腳本和不同的 arguments。 --exclusive
部分對於 20.11 之前的 Slurm 版本是必需的(來自內存)。 它與請求整個節點的sbatch
的同名選項無關。
與號 ( &
) 允許兩個任務並行運行,並且wait
命令用於確保腳本不會在任務之前終止,否則 Slurm 只會殺死它們。
您可以使用 Bash for
-loop 或使用GNU Parallel命令進行概括。
但是,這不會提交多個作業,它將提交一個具有多個任務的作業。
如果要提交多個作業,則需要一個作業數組。
#!/bin/bash
#SBATCH -n 1
#SBATCH -t 01:00:00
#SBATCH --array=0-10:10
srun python retrieve.py --start=${SLURM_ARRAY_TASK_ID} --end=$((SLURM_ARRAY_TASK_ID+10))
這將提交兩個獨立的作業,它們將執行與之前描述的作業相同的工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.