【问题标题】:Slurm - run more than one array on the same node?Slurm - 在同一个节点上运行多个数组?
【发布时间】:2022-02-01 23:34:27
【问题描述】:

我在一个 slurm 集群上运行了大约 200 个 matlab 代码。这些代码不是并行化的,而是使用密集的矢量化符号。所以每个代码使用大约 5-6 个核心的处理能力。

我使用的 sbatch 代码如下:

#!/bin/bash
#SBATCH --job-name=sdmodel
#SBATCH --output=logs/out/%a
#SBATCH --error=logs/err/%a
#SBATCH --nodes=1
#SBATCH --partition=common
#SBATCH --exclusive
#SBATCH --mem=0 
#SBATCH --array=1-225

module load Matlab/R2021a
matlab -nodisplay -r "run('main_cluster2.m'); exit"

现在,上面的代码将为每个 matlab 任务(225 个此类任务)分配一个集群节点。然而,一些集群节点有 20 个或更多的核心。这意味着我可以有效地使用一个节点同时运行 3 或 4 个任务。有没有办法修改上面的代码呢?

【问题讨论】:

    标签: matlab slurm hpc


    【解决方案1】:

    如果集群配置为允许节点共享,您可以删除#SBATCH --exclusive 行,该行要求为数组中的每个作业分配一个完整节点并将其替换为

    SBATCH --cpus-per-task=5
    

    为数组中的每个作业在同一节点上请求 5 个 CPU。

    在 20 核节点上,Slurm 将能够放置 4 个这样的作业。

    【讨论】:

      【解决方案2】:

      如果不允许节点共享,那么您应该可以在脚本中使用多个srun 命令来细分节点。如果您想为每个任务使用 4 个内核(在 20 个内核节点上),那么您的脚本将更改为:

      #!/bin/bash
      #SBATCH --job-name=sdmodel
      #SBATCH --output=logs/out/%a
      #SBATCH --error=logs/err/%a
      #SBATCH --nodes=1
      #SBATCH --partition=common
      #SBATCH --exclusive
      #SBATCH --mem=0 
      #SBATCH --array=1-225
      
      module load Matlab/R2021a
      
      for i in $(seq 1 5)
      do 
         srun --ntasks=4 --exact matlab -nodisplay -r "run('main_cluster2.m'); exit" &
      done
      wait
      

      每个srun 命令末尾的“&”将命令置于后台,因此您可以跳过启动多个副本。最后的wait 确保脚本在退出之前等待所有后台进程完成。

      请注意,如果每个单独的 matlab 命令花费的时间非常不同,这可能会导致资源浪费,因为某些运行会先于其他运行完成,从而使内核空闲。

      【讨论】:

        猜你喜欢
        • 2018-10-07
        • 1970-01-01
        • 2020-09-18
        • 1970-01-01
        • 1970-01-01
        • 2020-09-27
        • 2020-09-10
        • 1970-01-01
        • 2021-09-04
        相关资源
        最近更新 更多