【问题标题】:ulimit stack size through slurm script通过 slurm 脚本限制堆栈大小
【发布时间】:2021-05-08 02:33:24
【问题描述】:

在我的 bash 脚本中,我得到了以下命令

 ulimit -s unlimited

但是,当我通过 sbatch job.sh 启动我的工作,然后 ssh 到其中一个计算机节点以检查堆栈大小 ulimit -a 时,我清楚地看到堆栈大小是:

  stack size              (kbytes, -s) 8192

这是我的完整脚本

#!/bin/bash -l
#SBATCH --job-name=test
#SBATCH --nodes=13
#SBATCH --ntasks-per-node=32
#SBATCH --mem=120GB
#SBATCH --time=999:99:00
#SBATCH --propagate=STACK

 ulimit -s unlimited
mpirun ./pres.a

【问题讨论】:

    标签: stack mpi hpc slurm


    【解决方案1】:

    ulimit 是一个 shell 内置命令。使用它设置的资源限制不是系统范围的,仅适用于在同一 shell 会话中启动的进程及其后代。当您通过 SSH 连接到一个节点并执行 ulimit 时,它会显示该特定 shell 会话中的限制,而不是应用于作业中的进程的限制,即使其中一些进程在同一节点上运行也是如此。

    此外,--propagate=STACK 传播您执行 sbatch 命令的 shell 会话的资源限制,而不是作业脚本中设置的限制:

    PropagateResourceLimits

    逗号分隔的资源限制名称列表。 slurmd 守护进程使用这些名称从提交节点上的用户进程环境中获取相关的(软)限制值。然后这些限制被传播并应用于将在计算上运行的作业节点。

    因此,作业脚本中的 ulimit -s unlimited 仅适用于 SLURM 在执行作业时启动的 shell 进程,除非 mpirun 将限制进一步传播到它产生的进程,否则它们将继承系统默认堆栈大小改为限制。但如果你这样做:

    $ ulimit -s unlimited
    $ sbatch --propagate=STACK foo.sh
    

    (或者像你一样在foo.sh 中设置#SBATCH --propagate=STACK),那么SLURM 为该作业生成的所有进程都将其堆栈大小限制设置为无限制。

    【讨论】:

      猜你喜欢
      • 2021-10-11
      • 1970-01-01
      • 2018-02-08
      • 2012-11-19
      • 2018-10-16
      • 2023-04-10
      • 2011-10-02
      • 2022-07-21
      相关资源
      最近更新 更多