Python多处理和SLURM:进程不能并行运行

时间:2019-05-21 17:59:19

标签: python multiprocessing slurm

我需要使用一个脚本处理大量数据,因此我试图使用SLURM对Python脚本进行多处理。我感觉自己离正确答案很近,但是每次出问题时都会如此。

我的入门包包括:

  • 带有参数的文本文件;其中一行包含一些参数和参数,用于管理处理数据量,例如

2011-02-19 56755 70 2012-01-01 2012-01-04

最后两个参数表示应处理4天的数据(它们是开始日期和结束日期)

  • 具有许多必要功能的正在处理的.py脚本

  • 使用多处理的main.py脚本

  • 一个带有SLURM命令和参数的摘要run.sh文件。

这是我的main.py和run.sh脚本。

main.py

参数是数据元组。如果我需要处理N天,则len(arg_array_filt)= N * M * 3,而len(arg_array_map)= N * M。

if __name__ == '__main__':
    arg_array_filt, arg_array_map = myut.get_args(dates) 

    if FILTER:
        pool_filt = Pool()
        pool_filt.map(ft.partial(myut.filt_worker, RESPONSE), arg_array_filt)
        pool_filt.close()
        pool_filt.join()
    if CORRELATE:
        pool = Pool()
        pool.map(ft.partial(myut.map_worker, tmp_date, t0, tt, rock_consts, latitudes, longitudes, deep_coordinates), arg_array_map)
        pool.map(ft.partial(myut.st_reduce_worker, tmp_date, t0, const_r), dates)
        pool.close()
        pool.join()

run.sh的版本之一

#!/bin/bash
#SBATCH -n4 # number of tasks

module load python-intel-18.3/3.6
for i in {1..4}
do
    line=`sed "${i}q;d" arrayparams.txt`
    srun -n1 python3 main0.py $line &
done
wait

我只用了一天的数据就运行了这个方案,并且知道它大约需要7分钟。例如,上面提到的run.sh脚本并行运行4个任务,但总持续时间为23分钟。而且我认为即使并行运行,更多的数据也将需要更多的时间。可以克服吗?我读到地图将保留结果,直到最后一个过程完成为止。但是它们的运行时间几乎相同。我没有找到解释。

我在地图方面也遇到了问题。它不会为多个参数执行工作程序。我试图为run.sh中的每个任务提供不同数量的CPU,以及池中的进程数量。一切看起来就像map只使用一个CPU。可能我不明白如何分配资源...

我已经为这个任务苦苦挣扎了数周,因此,我将不胜感激。预先谢谢你!

UPD

我找到了一些有关线程数量的信息,所以我将下一行放在run.sh脚本中:

export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK

下一段代码在main.py中:

os.environ["OMP_NUM_THREADS"] = os.environ['SLURM_CPUS_PER_TASK']
pool_size = int(os.environ['SLURM_CPUS_PER_TASK'])

昨天,我改变了线程数和池大小,并获得了处理一天数据的下一个结果:

  • 1个CPU /任务,pool_size = 1-> 1小时19分钟
  • 1个CPU /任务,pool_size = 8-> 14分49秒
  • 1个CPU /任务,pool_size = 16-> 8分39秒
  • 没有像以前那样指定任何参数,但是使用了1 cpu-> 7分39秒。

所以现在我想知道一个CPU中有多少个线程?根据采样时间,我可以假设一个CPU中有16个线程吗?

我还发现了有关提交混合作业的有用文章: https://hpcrcf.atlassian.net/wiki/spaces/TCP/pages/7289570/How-to+Submit+a+Hybrid+Job

关于CPU和线程的数量以及运行时间,有一张有趣的表。

0 个答案:

没有答案