Python 多处理在 slurm 上速度很慢

问题描述 投票:0回答:1

我正在使用 Python 多重处理,然后使用 sbatch 提交作业。 .sh代码如下:

#!/bin/bash
##----------------------- Start job description ----------------------- 
#SBATCH --partition=standard
#SBATCH --job-name=multi_Leaspy
#SBATCH --nodes=1
#SBATCH --ntasks=40
#SBATCH --mem-per-cpu=4096
#SBATCH --time=160:00:00
#SBATCH --mail-type=ALL
#SBATCH --output=out-%j.log
#SBATCH --error=err-%j.log
##------------------------ End job description ------------------------ 

这是我并行化代码的片段:

num_workers = ntasks = int(os.environ.get('SLURM_NTASKS', 1))
if __name__ == "__main__":
        with ProcessPoolExecutor(max_workers = num_workers - 1) as executor:       
            arg_list = [(i, row, df_test, id_test, btstrp, classes, classes_auc, 
                      results_table, MAE_table, features_set, vector_range) for i, row in feat_sub.iterrows()]
            for result, MAE_row in executor.map(multiLeaspyIter, arg_list):
                if result is not None and MAE_row is not None:
                    results_table = results_table.append(result, ignore_index=True)
                    MAE_table = MAE_table.append(MAE_row, ignore_index = True)

然后,我通过 ssh 和 htop 查看资源利用率,并且执行进程数多于请求的进程数。此外,还会出现许多等待过程,从而减慢一切。

h 顶级结果:

任务 = 1627,第 501 个,正在运行 40 个 平均负载 = 201.3, 180.94, 117.36

每个节点有 40 个 cpu,启用超线程。

以前,我使用的是 ProcessPoolExecutor,相同的代码,而且速度要慢得多。

我不确定多重处理是否适合 slurm 环境,或者我遗漏了一些东西。

以前,我使用的是 ProcessPoolExecutor,相同的代码,而且速度较慢。

当我将 .sh 配置为 --ntasks = 1 并将 .py 配置为 max_workers = 1 时,代码运行得更快。如果 --ntasks = 5 且 max_workers = 5,它会变慢并创建额外的等待进程。

除此之外,我注意到只有 1 个进程,就创建了许多线程。

我在 Windows 上尝试过相同的代码,速度更快。

python parallel-processing multiprocessing slurm process-pool
1个回答
0
投票

htop 显示登录节点上的作业,而您应该查询执行节点,请使用

squeue -u $USER
或适当的东西

© www.soinside.com 2019 - 2024. All rights reserved.