使用 SLURM 的注释中的命令行宏

使用 SLURM 的注释中的命令行宏

在我看来,评论就是评论。他们永远不应该改变程序状态。可悲的是,人们在斯鲁姆不同意。

SLURM 要求 .sh 文件前面存在以下语法(或类似的语法):

#!/bin/bash

#SBATCH --time=5:00:00    
#SBATCH --ntasks=8
#SBATCH --mem-per-cpu=1024M

MyProgram.exe

上面将提交一个请求,MyProgram.exe在我学校的超级计算机上使用 8 个处理器运行该程序。我目前正在对我的代码进行基准测试,并希望使用命令行参数来更改处理器的数量。实际上,我想做以下事情

#!/bin/bash

#SBATCH --time=5:00:00    
#SBATCH --ntasks=%1
#SBATCH --mem-per-cpu=1024M

MyProgram.exe

其中%1是命令行参数。然后我将其称为“sbatch myShScript.sh 123使用 123 个处理器”。当然,这是行不通的,因为 bash 将该#SBATCH --ntasks=%1行解释为注释(确实如此),并且从不在我的命令行参数中使用 subs。

有没有办法欺骗 SLURM 或 BASH 在我的命令行参数中进行替换?

答案1

所有处理均由 SLURM 完成(通过sbatch具体而言)是在调用 bash 之前完成的,因此 bash 在这里不会为您提供帮助。该脚本可以使用任何语言,这并不重要:这些#SBATCH只是巧合的 bash 注释,重要的是它们是sbatch指令。

可以在文件中指定选项,以便提供一种始终对特定脚本使用相同参数的便捷方法。如果您想使用不同的选项,请在 的命令行上传递它们sbatchsbatch如果您想从某些特定参数构建选项,您可以编写一个运行的包装器脚本。您可以将作业脚本作为标准输入传递(a这里的文档很方便),而不是根据您的喜好将其保存在单独的文件中。

#!/bin/sh
sbatch --time=5:00:00 --ntasks="$1" --mem-per-cpu=1024M <<'EOF'
#!/bin/sh
MyProgram.exe
EOF

相关内容