SLURM 不同的多次运行
SLURM distinct multiple runs
我正在尝试编写一个脚本,它将从 lambda 数组中获取输入,并对每个 lambda 进行 100 次不同的运行(评估)。这是我到目前为止所得到的。
#!/bin/bash -l
#SBATCH --qos=regular
#SBATCH --nodes=20
#SBATCH --time=120:00:00
#SBATCH --job-name=sis_model
#SBATCH --array=0-20
#SBATCH --distribution=block
lambda=(0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5 0.55 0.6 0.65 0.7 0.75 0.8 0.85 0.9 0.95 1)
for paramater in ${lambda[*]}
do
for ip1 in {0..100}
do
srun ./test ${lambda[$SLURM_ARRAY_TASK_ID]}
done
done
我认为您的代码工作过度了。更简单:
#!/bin/bash -l
#SBATCH --qos=regular
#SBATCH --nodes=20
#SBATCH --time=120:00:00
#SBATCH --job-name=sis_model
#SBATCH --array=0-19
#SBATCH --distribution=block
lambda=(0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5 0.55 0.6 0.65 0.7 0.75 0.8 0.85 0.9 0.95 1)
for ip1 in {1..100}
do
srun ./test ${lambda[$SLURM_ARRAY_TASK_ID]}
done
注意事项:array 命令是从 0 到 19,而不是从 0 到 20。lambda 列表中只有 20 个元素。您的第一个作业数组应该为零,因为列表中的第一个元素是数字零。如果您更喜欢 1..20 架构,那么在访问 lambda 数组时必须减去一个。
此外,如果您使用作业数组并行处理 lambda 中的不同元素,则无需在每个作业中处理所有元素。只需让系统为每个作业处理一个 lambda。
关于第一个评论,如果你想每个 lambda 有 100 个输出,你应该迭代 100 次,而不是 101 次。
作为最后的想法,您的 lambda 可以动态计算,以防您的列表变大并保持规律。扩展列表仅在您无法轻松计算值时对我有用。但是你的 lambda==0.05*(1+$SLURM_ARRAY_TASK_ID).
我正在尝试编写一个脚本,它将从 lambda 数组中获取输入,并对每个 lambda 进行 100 次不同的运行(评估)。这是我到目前为止所得到的。
#!/bin/bash -l
#SBATCH --qos=regular
#SBATCH --nodes=20
#SBATCH --time=120:00:00
#SBATCH --job-name=sis_model
#SBATCH --array=0-20
#SBATCH --distribution=block
lambda=(0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5 0.55 0.6 0.65 0.7 0.75 0.8 0.85 0.9 0.95 1)
for paramater in ${lambda[*]}
do
for ip1 in {0..100}
do
srun ./test ${lambda[$SLURM_ARRAY_TASK_ID]}
done
done
我认为您的代码工作过度了。更简单:
#!/bin/bash -l
#SBATCH --qos=regular
#SBATCH --nodes=20
#SBATCH --time=120:00:00
#SBATCH --job-name=sis_model
#SBATCH --array=0-19
#SBATCH --distribution=block
lambda=(0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5 0.55 0.6 0.65 0.7 0.75 0.8 0.85 0.9 0.95 1)
for ip1 in {1..100}
do
srun ./test ${lambda[$SLURM_ARRAY_TASK_ID]}
done
注意事项:array 命令是从 0 到 19,而不是从 0 到 20。lambda 列表中只有 20 个元素。您的第一个作业数组应该为零,因为列表中的第一个元素是数字零。如果您更喜欢 1..20 架构,那么在访问 lambda 数组时必须减去一个。
此外,如果您使用作业数组并行处理 lambda 中的不同元素,则无需在每个作业中处理所有元素。只需让系统为每个作业处理一个 lambda。
关于第一个评论,如果你想每个 lambda 有 100 个输出,你应该迭代 100 次,而不是 101 次。
作为最后的想法,您的 lambda 可以动态计算,以防您的列表变大并保持规律。扩展列表仅在您无法轻松计算值时对我有用。但是你的 lambda==0.05*(1+$SLURM_ARRAY_TASK_ID).