如何在具有并行 Python 代码的集群上使用多个 nodes/cores
How to use multiple nodes/cores on a cluster with parellelized Python code
我有一段 Python 代码,其中我使用 joblib and multiprocessing 并行生成部分代码 运行。我可以在桌面上 运行 毫无问题地使用任务管理器查看它是否使用了所有四个内核并 运行 并行执行代码。
我最近了解到我可以访问具有 100+ 20 个核心节点的 HPC 集群。集群使用 SLURM 作为工作负载管理器。
第一个问题是:是否可以在集群上运行并行化Python代码?
如果可以的话,
我的 Python 代码是否需要在集群上完全更改为 运行,并且
需要在作业提交文件中放入什么#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+
通常 MPI 被认为是高性能计算的事实标准。 Python:
有几个 MPI 绑定
- MPI for Python
- pyMPI
- Boost.MPI 有 Python 个绑定。
还有很多框架 - list
您的代码至少需要进行最少的更改,但不应太多。
当你移植到 MPI 时,你可以 运行 每个核心一个进程,你将不需要使用 multiprocessing
因此,例如,如果您有 100 个节点,每个节点有 24 个核心,您将 运行 2400 Python 个进程。
我有一段 Python 代码,其中我使用 joblib and multiprocessing 并行生成部分代码 运行。我可以在桌面上 运行 毫无问题地使用任务管理器查看它是否使用了所有四个内核并 运行 并行执行代码。
我最近了解到我可以访问具有 100+ 20 个核心节点的 HPC 集群。集群使用 SLURM 作为工作负载管理器。
第一个问题是:是否可以在集群上运行并行化Python代码?
如果可以的话,
我的 Python 代码是否需要在集群上完全更改为 运行,并且
需要在作业提交文件中放入什么#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+
通常 MPI 被认为是高性能计算的事实标准。 Python:
有几个 MPI 绑定- MPI for Python
- pyMPI
- Boost.MPI 有 Python 个绑定。
还有很多框架 - list
您的代码至少需要进行最少的更改,但不应太多。
当你移植到 MPI 时,你可以 运行 每个核心一个进程,你将不需要使用 multiprocessing
因此,例如,如果您有 100 个节点,每个节点有 24 个核心,您将 运行 2400 Python 个进程。