【问题标题】:How does SLURM array Interface with SBATCH resource allocation?SLURM 数组如何与 SBATCH 资源分配接口?
【发布时间】:2021-08-27 16:02:23
【问题描述】:
#!/bin/bash
#SBATCH -p RM-shared
#SBATCH -n 4
#SBATCH -t 24:00:00
#SBATCH --array=1-

我正在尝试启动一个阵列,并且对于阵列中的每个任务,我希望它在 RM 共享分区上使用 4 个内核。我这样做是否正确,或者这是否指定阵列输出的所有任务都必须共享 4 个核心?

我将为此提出一个单独的问题,但由于某种原因,当我运行它时,$SLURM_ARRAY_TASK_ID 变量为空......

当我跑步时

echo "My SLURM_ARRAY_TASK_ID: " $SLURM_ARRAY_TASK_ID

在我的标题设置作业后,它返回

My SLURM_ARRAY_TASK_ID:

【问题讨论】:

  • 我意识到我应该使用 #SBATCH --cpus-per-task=4 而不是 -n 4 我认为(?)但是,这并没有解决我的 $SLURM_ARRAY_TASK_ID 为空问题
  • Resources: (1) hpc-support.lboro.ac.uk/slurm-nodes-cpus-tasks.html (2) login.scg.stanford.edu/faqs/cores “然而,Slurm 根据上下文和 Slurm 命令交替使用术语 core 和 cpu 使这变得复杂。--cpus-per -taks= 例如实际上是指定每个任务的核心数。”

标签: linux slurm sbatch


【解决方案1】:

首先,使用--cpus-per-task=4 而不是ntasks 是正确的。其次,可能是复制/粘贴错误,但您的--array 行不完整

#SBATCH --array=1-

应该是

#SBATCH --array=1-10

例如对于 10 个作业的数组。

阵列中的每个作业都将分配有 4 个不同的核心。并且作业将被独立调度,因此他们可以同时在一个 40 核节点上启动所有 10 个,或者同时在 10 个不同节点上启动,或者在一个 4 核节点上一次启动一个,或者任何可能的中间组合取决于集群配置和队列中的作业。

【讨论】:

  • 我正在使用的系统的帮助台(XSEDE 的 PSC HTC 集群资源)的某个人告诉我,我不应该使用 --cpus-per-task=4 而应该使用 --cpus-per-task=4 ... 查看我自己的回答在这里提出问题,如果您有任何意见,很想听听您的意见。
  • 是的,你是对的 #SBATCH --array=1- 我错误地认为这会将数组长度设置为未定义的“最大长度”,这样一旦到达数组迭代的末尾,它就会停止通过。
【解决方案2】:

我没有正确调用脚本。正在打电话: ./ThisScript.sh 代替 sbatch ./ThisScript.sh

关于每个阵列作业的核心分配,一位帮助台人员说使用 #SBATCH --ntasks-per-node=4 代替 #SBATCH --cpus-per-task=4

但我不知道为什么...我希望--ntasks-per-node=4 命令每个节点只需要运行 4 个作业,因此如果您的阵列中有 12 个作业,则需要 3 个完整节点。

另一方面,--cpus-per-task=4 会命令每个 CPU(每个 CPU 都有多个内核)只能运行 4 个任务,因此如果您的阵列中有 12 个作业,它将需要 3 个 CPU(并且,如果您系统上的节点有 3 个或更多 CPU,它只需要 1 个节点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-19
    • 1970-01-01
    • 1970-01-01
    • 2019-04-03
    • 2017-10-01
    • 2021-05-13
    • 2016-05-18
    • 1970-01-01
    相关资源
    最近更新 更多