【问题标题】:SLURM batch array loop?SLURM批处理数组循环?
【发布时间】:2020-01-31 18:23:39
【问题描述】:

我有点 bash 挑战,并试图通过我机构集群上的 slurm 发送大量工作。我已经超出了我的限制(每个作业数组似乎有 1000 个作业)并且不得不迭代地将列表解析为 1000 个块,这很乏味:

sbatch --array=17001-18000 -p <server-name> --time=12:00:00 <my-bash-script>

我如何编写一个循环来做到这一点?每个工作大约需要 11 分钟,所以我需要在循环中建立一个暂停。否则,我怀疑 SLURM 会拒绝新的批处理作业。有谁知道该怎么做?提前致谢!

【问题讨论】:

  • 为什么不sbatch -a 1-50000%1000?这将执行 50000 个任务,同时将调度程序限制为 1000 个并发。
  • 谢谢你,I'L'I - 我应该提到我确实按照哈佛 slurm 指南尝试过,但没有运气。我收到此错误:sbatch: error: Slurm temporarily unable to accept job, sleeping and retrying
  • 尝试squeue | wc -l 会得到什么?您需要将数组设置为该数字,然后像上面的示例一样尝试。
  • 再次感谢!我现在正在使用下面的循环(需要一天左右的时间才能运行)并将尝试这个并报告。

标签: bash loops slurm


【解决方案1】:

这样的事情应该做你想做的事

START=1
END=10000
STEP=1000
SLEEP=700 #Just over 11 Minutes (in seconds)

for i in $(seq $START $STEP $END) ; do
    JSTART=$i
    JEND=$[ $JSTART + $STEP - 1 ] 
    echo "Submitting with ${JSTART} and ${JEND}"
    sbatch --array=${JSTART}-${JEND} -p <server-name> --time=12:00:00 <my-bash-script>
    sleep $SLEEP
done

【讨论】:

  • 谢谢你,tomgalpin - 这看起来像。我将它保存为 Job_loop.sh 并将 shebang #!/bin/bash 添加到第一行。对不起,速度很慢,但是当我用sh Job_loop.sh 运行它时,我得到一个错误:Job_loop.sh: line 8: JSTART: command not found Job_loop.sh: line 9: JEND: command not found。提前致谢!
  • 非常感谢!以防万一其他人尝试此操作-您只需将序列的顺序切换为$START $STEP $END,然后您可以从JEND 中减去1,这样序列就不会重叠。
  • 没问题,对于 seq 命令的顺序问题,我已经更新了。乐于助人
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-06
  • 2017-06-15
  • 2019-01-26
  • 1970-01-01
  • 2015-05-28
  • 2011-02-05
相关资源
最近更新 更多