【问题标题】:Use Bash variable within SLURM sbatch script在 SLURM sbatch 脚本中使用 Bash 变量
【发布时间】:2014-08-21 21:10:12
【问题描述】:

我正在尝试从另一个文件中获取一个值并在 SLURM 提交脚本中使用它。但是,我收到一个错误,即该值是非数字的,换句话说,它没有被取消引用。

这是脚本:

#!/bin/bash
# This reads out the number of procs based on the decomposeParDict                                                                                          
numProcs=`awk '/numberOfSubdomains/ {print $2}' ./meshModel/decomposeParDict`
echo "NumProcs = $numProcs"

#SBATCH --job-name=SnappyHexMesh                                                                                                                            
#SBATCH --output=./logs/SnappyHexMesh.log                                                                                                                   
#                                                                                                                                                           
#SBATCH --ntasks=`$numProcs`                                                                                                                                
#SBATCH --time=240:00                                                                                                                                       
#SBATCH --mem-per-cpu=4000                                                                                                                                  

#First run blockMesh                                                                                                                                        
blockMesh

#Now decompose the mesh                                                                                                                                     
decomposePar

#Now run snappy in parallel                                                                                                                                 
mpirun -np $numProcs snappyHexMesh -parallel -overwrite

当我将其作为普通的 Bash shell 脚本运行时,它会正确打印出 procs 的数量并进行正确的mpirun 调用。因此,awk 命令正确解析出 procs 的数量,并按预期取消引用变量。

但是,当我使用以下方法将其提交给 SLURM 时:

sbatch myScript.sh

我得到错误:

sbatch: error: Invalid numeric value "`$numProcs`" for number of tasks.

有人可以帮忙吗?

【问题讨论】:

  • 不要在脚本中使用反引号。使用不同的,例如$(...)

标签: linux bash shell awk slurm


【解决方案1】:

这行不通。运行时会发生什么

sbatch myscript.sh

是 slurm 为那些特殊的#SBATCH 行解析脚本,生成作业记录,将批处理脚本存储在某处。批处理脚本仅在作业运行后执行。

因此,您需要以稍微不同的方式构建您的工作流程,并在提交作业之前首先计算您需要的 proc 数量。请注意,您可以使用类似

sbatch -n $numProcs myscript.sh

,您不需要自动生成脚本(另外,mpirun 应该能够自动获取分配中的 procs 数量,无需使用“-np”)。

【讨论】:

  • 是的,这就是解决方案。我使用“子”脚本来提交我的作业脚本。谢谢@Janneb
【解决方案2】:

Slurm 停止处理脚本中第一行可执行代码的#SBATCH 指令。对于#SBATCH 指令不依赖于他们试图在这些指令之上运行的代码的用户,只需将#SBATCH 行放在顶部即可。

如果与 OP 一样,您的 sbatch 选项取决于您放置在它们上方的命令,请参阅解决方法/解决方案的其他答案。

批处理脚本可能包含以“#SBATCH”开头的选项before 脚本中的任何可执行命令。 sbatch 将停止处理 进一步的 #SBATCH 指令一旦第一个非注释非空白 已到达脚本中的行。

来自sbatch docs,我的重点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-04
    • 2021-01-27
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 2021-06-27
    • 2020-04-17
    相关资源
    最近更新 更多