首页 > 解决方案 > 将系统变量插入 SBATCH

问题描述

我想问你是否可以将全局系统变量传递给#SBATCH 标签。

我想做一些这样的想法

批次文件

#!/bin/bash -l
ARG=64.dat
NODES=4
TASK_PER_NODE=8
NP=$((NODES*TASK_PER_NODE))

#SBATCH -J 'MPI'+'_'+$NODES+'_'+$TASK_PER_NODE
#SBATCH -N $NODES
#SBATCH --ntasks-per-node=$TASK_PER_NODE

这不是workink,所以这就是我问你的原因。

标签: slurmsbatch

解决方案


请记住,SBATCHBash 将参数行视为注释,因此它根本不会尝试解释它们。

此外,这些#SBATCH指令必须在Slurm 处理它们的任何其他 Bash 命令之前。

替代方法包括在命令行中设置参数:

NODES=4 sbatch --nodes=$NODES ... submitscript.sh

或通过以下方式传递提交脚本stdin

#!/bin/bash -l
ARG=64.dat
NODES=4
TASK_PER_NODE=8
NP=$((NODES*TASK_PER_NODE))

sbatch <<EOT
#SBATCH -J 'MPI'+'_'+$NODES+'_'+$TASK_PER_NODE
#SBATCH -N $NODES
#SBATCH --ntasks-per-node=$TASK_PER_NODE

srun ...

EOT

在后一种情况下,您将需要运行提交脚本而不是将其交给,sbatch因为它会 sbatch自行运行。


推荐阅读