【问题标题】:Submitting an array of jobs on SLURM在 SLURM 上提交一系列作业
【发布时间】:2017-12-22 22:49:20
【问题描述】:

我正在尝试在 SLURM 上提交一系列作业,但 sleep 命令没有按预期工作。我想每 10 秒启动一次工作。但是,此代码等待 10 秒以启动整个作业数组。我应该如何修改以下 bash 文件?

#!/usr/bin/env bash
# The name to show in queue lists for this job:
#SBATCH -J matlab.sh

# Number of desired cpus:
#SBATCH --cpus=1
#SBATCH --mem=8gb

# The time the job will be running:
#SBATCH --time=167:00:00

# To use GPUs you have to request them:
##SBATCH --gres=gpu:1

# If you need nodes with special features uncomment the desired constraint line:
##SBATCH --constraint=bigmem
#SBATCH --constraint=cal
##SBATCH --constraint=slim

# Set output and error files
#SBATCH --error=job.%J.err
#SBATCH --output=job.%J.out

# MAKE AN ARRAY JOB, SLURM_ARRAYID will take values from 1 to 100
#SARRAY --range=1-60

# To load some software (you can show the list with 'module avail'):
module load matlab

export from=400
export to=1000


export steps=60

mkdir  temp_${SLURM_ARRAYID}
cd temp_${SLURM_ARRAYID}
# the program to execute with its parameters:
matlab < ../SS.m  > output_temp_${SLURM_ARRAYID}.out
sleep 10

【问题讨论】:

    标签: slurm


    【解决方案1】:

    来自文档

    作业数组中同时运行的任务的最大数量 可以使用“%”分隔符指定。例如“--array=0-15%4” 将限制此作业同时运行的任务数 数组为 4。

    因此,如果您想提交一个包含 60 个作业的作业数组,但一次只运行一个作业,那么像这样更新您的提交脚本应该可以解决问题

    #SBATCH --array=1-60%1
    

    【讨论】:

    • 嗯,这个想法是在同时提交 60 个作业时不要使作业调度程序过载。但是,我确实希望同时运行 60 个作业(但不是同时启动)
    • 如果你sleep $((SLURM_ARRAYID * 10)) 之前 srun 然后呢?
    • 我的错,我在想其他相关的问题。 sleep 在调用 matlab 之前。出于好奇,不同时开始工作的理由是什么?乍一看,slurm 应该可以应付。
    • 句子“MATLAB 正在选择 SOFTWARE OENGL 渲染。”输出,没有其他事情发生。有些作业显示此消息,而其他作业开始运行,所以我认为这是调度程序的问题
    • 看起来与调度程序无关。如果你matlab -nosoftwareopengl 怎么办?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-24
    • 1970-01-01
    • 2022-11-04
    • 2021-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多