【问题标题】:Slurm array taking double cpus than requestedSlurm 阵列采用双倍 CPU 比请求
【发布时间】:2021-04-22 11:12:44
【问题描述】:

我在使用 Slurm 数组时遇到了一些问题,因为它们占用的 CPU 数量是请求的两倍。

我们有一个具有 60 个内核的节点可用于 Slurm 队列,当我启动一个具有 24 个 CPU 的玩具数组示例时,sinfo 告诉他们正在使用 48 个 CPU。这是我运行的玩具示例:

sbatch --array=1-24 -N1 test_script.sh

这是 test_script.sh 的内容:

#!/bin/bash
#SBATCH --output=job.%J.out
#SBATCH --error=job.%J.err
#SBATCH --job-name="array_test"
#SBATCH --cpus-per-task=1
#SBATCH --ntasks=1

echo "My SLURM_ARRAY_TASK_ID: " $SLURM_ARRAY_TASK_ID

sleep 60 

奇怪的是,当我使用 squeue -o "%.15i %.25j %.8u %.2t %.9P %C %.6D %R %.10M %e %l" 检查每个用户使用的内核时,slurm 只计算用户请求的内核(在本例中为 24)。但是当我在这里检查 sinfo sinfo -p day -N -o "%.5a %.6t %N %C" 使用了多少个内核时,我看到实际使用了 48 个内核。

我一直在玩测试脚本中的 sbatch 选项,比如 --cpus-per-task 和 --ntasks,但到目前为止我还没有解决问题。

我们在 CentOS 7 机器上使用 Slurm 16.05.10-2。

非常感谢您的帮助!

【问题讨论】:

  • 您能否发布 slurm.conf 的 SelectType 行以及显示节点和分区的部分?听起来 Slurm 正在分配完整内核的数量(24),但 sinfo 显示线程的数量(48)。

标签: arrays cpu slurm


【解决方案1】:

我的猜测是你在 slurm.conf 中有以下设置:

SelectType=select/cons_res
SelectTypeParameters=CR_Core

当您向 slurm 请求 1 个 CPU(在 Slurm 中表示 1 个线程)时,它会分配 1 个核心 = 2 个 CPU = 2 个线程。
因此,您的 24 作业阵列将占用 24 个内核 = 48 个 CPU。如果为每个任务分配 2 个 CPU,您会得到相同的结果。

Slurm 可以配置为基于 CPU 分配(通过设置 SelectTypeParameters=CR_CPU,删除套接字/核心/线程信息,只保留 CPU=线程数)。详情请见https://slurm.schedmd.com/cpu_management.html

根据经验,很难将作业限制为仅使用分配给它们的资源(而不是机器上的所有 CPU,例如),因此在尝试 CR_CPU 后,我们的团队移回 CR_CORE 并结合执行使用 cgroup 的 ConstrainCores/ConstrainDevices(参见 Slurm 的 cgroup.conf documentation)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-17
    • 2020-03-24
    • 2011-05-15
    • 2010-09-20
    • 1970-01-01
    • 2019-08-09
    • 2017-01-23
    • 1970-01-01
    相关资源
    最近更新 更多