【问题标题】:Passing arguments to a python script in a SLURM batch script在 SLURM 批处理脚本中将参数传递给 python 脚本
【发布时间】:2023-06-16 00:18:01
【问题描述】:

我编写了一个 python 脚本,它需要两个参数,当我在命令行上运行它时运行良好:

pythonscript.py arg1 arg2

我需要在 SLURM 批处理脚本中运行它,但无论何时我都会收到“非法指令”错误和核心转储。这是我正在使用的脚本示例:

#!/bin/bash
# Set your minimum acceptable walltime, format: day-hours:minutes:seconds
#SBATCH --time=0-00:30:00

# Set name of job shown in squeue
#SBATCH --job-name pythonscript

# Request CPU resources
#SBATCH --ntasks=1
#SBATCH --ntasks-per-node=1
#SBATCH --cpus-per-task=1

# Memory usage (MB)
#SBATCH --mem-per-cpu=3000

# Use modules to set the software environment
module purge
module load python/2.7.8-gcc

pythonscript.py arg1 arg2

我花了很多时间试图找出导致核心转储的确切原因,这就是我缩小范围的原因。它仅在从批处理脚本运行时崩溃,并且仅在我尝试使用参数运行脚本时崩溃。当我修改它以不带参数运行时,它运行正常。谁能告诉我如何在 SLURM 脚本中将这些参数传递给我的 python 脚本?

【问题讨论】:

  • 您能否运行gdb <python executable> <corefile>,并将回溯添加到您的帖子中? pythonscript.py 是否也有一个路径到 python 可执行文件的路径,在第一行用 hashbang 硬编码?
  • 如果我知道 SLURM 将内核转储到哪里就好了。它们不在我的工作目录中,我仍在等待 HPC 人员的回复。我实际上已经理清了发生核心转储的原因,它与尝试导入最近安装的模块有关。它在登录节点上运行良好,但在计算节点上运行良好。在这一点上,我不确定这些论点是否有问题。 python 脚本确实具有使用 hashbang 硬编码的可执行文件的路径。

标签: python hpc slurm


【解决方案1】:

这似乎是一个愚蠢的问题,但是 pythonscript.py 是可执行文件吗?

你也试过

python pythonscript.py arg1 arg2

或者,你也许可以改变

#!/bin/bash

#!/bin/python

或您要使用的 python 版本的适当路径。

【讨论】:

  • 根本不是一个愚蠢的问题。是的,它是可执行的。我实际上可能最终会删除这个问题,因为我发现了非法指令的来源,而这不是我想的那样。结果是计算节点上新安装的模块存在问题(在登录节点上工作正常)。一旦这个问题得到解决并且我确信这些论点不再是问题,我将删除这个问题。感谢您的回复。
【解决方案2】:

问题是我的作业被发送到的节点。我设法使用命令检查了我的作业在哪个节点中运行而没有错误:

sacct --format=JobID,"AllocCPUS,Node,JobName%20,MaxVMSize,MaxRSS,ReqMem,Start,End"

我确定了正确的节点,然后在我的 .sh 中切换:

#SBATCH -w, --nodelist=compute124

【讨论】:

    【解决方案3】:

    我使用以下,我可以添加任意数量的参数。

    #!/bin/bash
    #SBATCH --cpus-per-task=1        # number of cores
    
    cd $SLURM_SUBMIT_DIR
    pwd
    
    python $SLURM_SUBMIT_DIR/python.py HumptyDumpty.txt newhumpty.txt ad.txt
    

    【讨论】:

      最近更新 更多