簡體   English   中英

如何使用 Slurm/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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM