0

我是 SLURM 的新手。我的问题是我有一个多阶段作业,需要在集群上运行,其作业由 SLURM 管理。具体来说,我想安排一个工作:

  1. 抓取 N 个节点,
  2. 在所有人上安装软件
  3. (一旦所有节点成功完成安装)它会在节点上创建一个数据库实例
  4. 加载数据库
  5. (一旦加载成功)运行一组查询,用于基准测试
  6. 删除数据库并返回节点

每个步骤都可以使用单独的 bash 脚本运行;而脚本的执行和阶段之间的转换由主节点协调。

我的问题是我知道如何使用 SLURM 分配节点并在每个节点上调用单个命令或脚本(在每个节点上作为独立作业运行)。但是,一旦每个节点上的命令完成(或调用的脚本完成),节点就会返回到空闲资源池,让分配的节点排队等待我的工作。但上述用例涉及几个阶段/脚本;并且需要他们之间的协调。

我想知道使用 SLURM 为这样的用例设计/运行一组脚本的正确方法是什么。任何建议或示例都将非常有帮助,并受到高度赞赏。

4

1 回答 1

2

您只需将所有脚本封装成一个即可提交:

#!/bin/bash
#SBATCH --nodes=4 --exclusive

# Setting Bash to exit whenever a command exits with a non-zero status.
set -e 
set -o pipefail

echo "Installing software on each of $SLURM_NODELIST"
srun ./install.sh

echo "Creating database instance"
./createDBInstance.sh $SLURM_NODELIST

echo "Loading DB"
./loadDB.sh params

echo Benchmarking
./benchmarks.sh params

echo Done.

您需要填写空白...确保您的脚本遵循以非零状态退出错误的标准。

于 2015-03-24T09:23:22.837 回答