繁体   English   中英

在Slurm中使用Python多处理,以及我需要的ntasks或ncpus的组合

[英]Using Python multiprocessing in Slurm, and which combination of ntasks or ncpus I need

我正在尝试在slurm集群上运行python脚本,而我正在使用python的内置multiprocessing模块。

我使用了一个非常简单的设置,为了测试目的,示例是:

len(arg_list)
Out[2]: 5

threads = multiprocessing.Pool(5)
output = threads.map(func, arg_list)

所以funcarg_list 5个参数上并行应用了5次。 我想知道的是如何在slurm中分配正确数量的cpu / tasks以使其按预期工作。 这就是我的slurm批处理脚本的相关部分:

#!/bin/bash

# Runtime and memory
#SBATCH --time=90:00:00
#SBATCH --mem-per-cpu=2G

# For parallel jobs
#SBATCH --cpus-per-task=10
##SBATCH --nodes=2
#SBATCH --ntasks=1
##SBATCH --ntasks-per-node=4  

#### Your shell commands below this line ####

srun ./script_wrapper.py 'test'

如你所见,目前我有ntasks=1cpus-per-task=10 请注意,func的主要部分包含一个scipy例程,该例程往往在两个内核上运行(即使用200%cpu使用,这就是为什么我想要10 cpus而不是5 cpu)。

这是为我的目的分配资源的正确方法,因为此时作业需要比预期更长的时间(更像是在单个线程中运行)。

我需要设置ntasks=5吗? 因为我对在线文档的印象是, ntasks=5会改为调用srun ./script_wrapper.py 'test'五次,这不是我想要的。 我在这个假设中是对的吗?

另外,有没有办法轻松检查诸如CPU使用率和multiprocessing.Pool调用的python任务的所有进程id之类的东西? 目前我正在尝试使用sacct -u <user> --format=JobID,JobName,MaxRSS,Elapsed,AveCPU ,但AveCPUMaxRSS字段由于某种原因(?)总是空出来,而我看到第一个脚本作为一个过程,我没有看到应该通过多处理调用的其他5个。 例:

       JobID    JobName     MaxRSS    Elapsed     AveCPU 
------------ ---------- ---------- ---------- ---------- 
16260892             GP              00:13:07            
16260892.0   script_wr+              00:13:07            

您的Slurm任务分配对我来说是正确的。 Python的多处理只能在一台机器上运行,在我看来,就像你正确地在一个节点上分配10个CPU一样。 可能导致此问题的原因是多处理的Pool.map默认在输入列表的“块”上工作,而不是一次一个元素。 它可以在任务很短时将开销降至最低。 要强制多处理一次处理列表的一个元素,请将地图的chunksize参数设置为1,例如

threads.map(func, arglist, 1)

有关更多信息,请参阅多处理文档

因为您说您使用的是多线程版本的SciPy,所以您可能还需要检查底层库的相关线程级别。 例如,如果您的SciPy是针对Intel Math Kernel Library构建的,请尝试设置OMP_NUM_THREADSMKL_NUM_THREADS 环境变量 ,以确保每个进程使用不超过2个线程并充分利用(而不是过度使用)已分配的SLURM资源。

编辑:sacct只会为您提供由srun直接启动的任何进程的运行时间,而不是任何子进程。 因此,在您的情况下,您将只使用单个srun命令中的一个进程。 要监视子进程,您可能需要查看在系统级而不是通过Slurm运行的监视工具。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM