如何通过并行化 Python 代码在集群上使用多个节点/核心

der*_*oop 6 python hpc python-2.7 slurm

我有一段 Python 代码,其中使用joblib多处理来使部分代码并行运行。我在桌面上运行它没有遇到任何问题,我可以使用任务管理器来查看它使用所有四个核心并并行运行代码。

我最近了解到我可以访问一个具有 100+ 20 个核心节点的 HPC 集群。集群使用SLURM作为工作负载管理器。

第一个问题是:是否可以在集群上运行并行化的Python代码?

如果可能的话,

  1. 我的 Python 代码是否需要更改才能在集群上运行,以及

  2. 需要在作业提交文件中放入哪些 #SBATCH 指令来告诉它代码的并行部分应该在四个核心上运行(或者是四个节点)?

我有权访问的集群具有以下属性:

PARTITION      CPUS(A/I/O/T)       NODES(A/I)  TIMELIMIT      MEMORY  CPUS  SOCKETS CORES 
standard       324/556/16/896      34/60       5-00:20:00     46000+  8+    2       4+
Run Code Online (Sandbox Code Playgroud)

dmg*_*dmg 5

通常,MPI被认为是高性能计算的事实上的标准。Python 有一些 MPI 绑定:

还有很多相应的框架 -列表

您的代码至少需要进行最少的更改,但不应太多。

当您移植到 MPI 时,您可以为每个核心运行一个进程,并且不需要使用multiprocessing

因此,举例来说,如果您有 100 个节点,每个节点有 24 个核心,那么您将运行 2400 个 Python 进程。