【发布时间】:2019-03-28 06:05:56
【问题描述】:
我一直在努力尝试让 python 脚本的多个实例在 SLURM 上运行。在我的登录节点中,我已经安装了 python3.6,并且我有一个 python 脚本“my_script.py”,它将一个文本文件作为输入来读取运行参数。我可以使用
在登录节点上运行此脚本python3.6 my_script.py input1.txt
此外,我可以提交一个脚本 submit.sh 来运行该作业:
#!/bin/bash
#
#SBATCH --job-name=hostname_sleep_sample
#SBATCH --output=output1.txt
#SBATCH --cpus-per-task=1
#
#SBATCH --mem=2G
python3.6 my_script.py input1.txt
这运行良好并按预期执行。但是,如果我提交以下脚本:
#!/bin/bash
#
#SBATCH --job-name=hostname_sleep_sample
#SBATCH --output=output2.txt
#SBATCH --cpus-per-task=1
#
#SBATCH --mem=2G
python3.6 my_script.py input2.txt
当第一个运行时,我在 output2.txt 中收到以下错误消息:
/var/spool/slurmd/job00130/slurm_script: line 9: python3.6: command not
found
当我尝试将作业作为数组提交时,我发现我遇到了同样的问题。例如,当我使用 sbatch 提交以下内容时:
!/bin/bash
#
#SBATCH --job-name=hostname_sleep_sample
#SBATCH --output=out_%j.txt
#SBATCH --array=1-10
#SBATCH --cpus-per-task=1
#
#SBATCH --mem=2G
echo PWD $PWD
cd $SLURM_SUBMIT_DIR
python3.6 my_script.py input_$SLURM_ARRAY_TASK_ID.txt
~
我发现只有 out_1.txt 显示作业已运行。任务 2-10 的所有输出文件都显示相同的错误消息:
/var/spool/slurmd/job00130/slurm_script: line 9: python3.6: command not
我正在使用 Google Cloud Platform 中的 Compute Engine API 创建的 HPC 集群中运行所有这些脚本。我使用以下教程来设置 SLURM 集群:
https://codelabs.developers.google.com/codelabs/hpc-slurm-on-gcp/#0
为什么 SLURM 无法同时运行多个 python3.6 作业,我怎样才能让我的数组提交工作?我花了几天时间研究 SLURM 常见问题解答和其他堆栈问题,但我还没有找到解决此问题的方法或首先找到导致问题的适当解释。
谢谢
【问题讨论】:
-
会不会是第一个作业在一台机器上运行,而第二个作业在另一台机器上运行?在第二个节点上,没有安装 Python3?您的集群的结构是什么?
-
欢迎来到 Stackoverflow!正如 Damien 所建议的,您能否编辑您的帖子以包含集群配置 yaml 文件。
-
我找不到用于创建集群的 yaml 文件,但我使用了教程中的模板。我现在已经解决了这个问题。
-
@damienfrancois 在我的提交脚本中指定 --cpus-per-task=1 和 --tasks-per-node=2 时,我现在无法让我的任务数组为每个节点运行多个任务.您能否向我指出一个示例提交脚本,以根据 mem 和 cpu 设置使用来自 taks 数组的任务填充节点?我还没有找到一个很好的例子来工作,我真的很感激。
-
slurm 是否配置为在同一个节点上运行多个作业?配置文件中
SelectType的值是多少?
标签: python google-cloud-platform google-compute-engine slurm