【问题标题】:Slurm array spawning multiple tasks for same jobSlurm 数组为同一作业生成多个任务
【发布时间】:2021-05-28 16:39:58
【问题描述】:

所以我有这个使用多处理的 python 脚本,它有 4 种运行方式,具体取决于它在运行时读取的环境变量 APP_TYPE。

因此,我使用slurm --array 使其并行。问题在于,它不是生成 4 个作业,每个作业都有自己的任务(使用所有节点核心以 A/B/C/D 模式运行 python 脚本),而是生成每个任务的次数。即,我运行sbatch batch.sh,它在每个作业中生成 4 个任务。请注意,我期待在每个节点上运行每个作业一次,这样我就可以在多处理上使用节点的所有内核(在这种情况下,每个节点 28 个内核)。

运行 sbatch 后,我收到消息:Submitted batch job 11200 我可以看到 4 个日志文件:

  • slurm_job_11200_0.log
  • slurm_job_11201_0.log
  • slurm_job_11202_0.log
  • slurm_job_11203_0.log

但是,每个日志都说重复的消息。对于日志slurm_job_11200_0.log

python script started in mode A, pid 2222
python script started in mode A, pid 5555
python script started in mode A, pid 3333
python script started in mode A, pid 1111

我需要改变什么来停止这种重复?

谢谢!

这是 slurm 脚本

#!/bin/bash

# SLURM Configuration
#SBATCH --job-name="job"
#SBATCH --nodes=4
#SBATCH --cpus-per-task=28
##SBATCH --exclusive

#SBATCH --mem=32000 #(32G not working?)
#SBATCH --output=slurm_job_%j_%t.log
#SBATCH --error=slurm_job_%j_%t.log
#SBATCH --array=0-3

task_command="python script.py $@"
modes=(A B C D)


echo "==================== START JOB $SLURM_JOB_ID: $SLURM_JOB_NAME ===================="

export APP_TYPE="${modes[$SLURM_ARRAY_TASK_ID]}"

srun $task_command; t1_exit_code=$?


echo "==================== END JOB $SLURM_JOB_ID: $SLURM_JOB_NAME ===================="
exit $t1_exit_code

额外问题:为什么我不能将32G 用于内存?文档说我们可以使用 G 作为内存单元

【问题讨论】:

    标签: python multiprocessing hpc slurm


    【解决方案1】:

    您需要删除#SBATCH --nodes=4。这一行,连同srun 的使用,实际上指示数组的每个作业在四个不同的节点上运行相同的 Python 脚本。

    (当然script.py 脚本必须查询环境变量APP_TYPE 的值,因为它没有作为参数传递。)

    【讨论】:

      猜你喜欢
      • 2021-09-04
      • 1970-01-01
      • 2020-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-07
      相关资源
      最近更新 更多