Python Slurm阵列为同一作业生成多个任务

Python Slurm阵列为同一作业生成多个任务,python,multiprocessing,hpc,slurm,Python,Multiprocessing,Hpc,Slurm,我有一个使用多处理的python脚本,它有4种运行方式,具体取决于运行时读取的环境变量APP_类型 因此,我使用slurm--array使其并行。问题在于,它不是生成4个作业,每个作业都有自己的任务(使用所有节点核以模式A/B/C/D运行python脚本),而是生成每个任务的次数。也就是说,我运行sbatch batch.sh,它在每个作业中生成4个任务。请注意,我希望在每个节点上运行每个作业一次,这样我就可以在多处理上使用节点的所有核心(在本例中,每个节点28个核心) 运行sbatch后,我收

我有一个使用多处理的python脚本,它有4种运行方式,具体取决于运行时读取的环境变量APP_类型

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

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

  • slurm\u作业\u 11200\u 0.log
  • slurm\u作业\u 11201\u 0.log
  • slurm\u作业\u 11202\u 0.log
  • slurm\u作业\u 11203\u 0.log
但是,每个日志都显示重复的消息。对于日志
slurm\u作业\u 11200\u 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
用于ram?文档中说我们可以使用G作为内存单元

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

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