这个问题与这个问题有些相似, Slurm:使用多个节点的核心进行 R 并行化 但它是针对 python 的。
我有一个可以在PC上使用多核的python程序,它不使用MPI或OpenMP。它使用 CreateProcess 函数来使用 CPU 核心或 PC 上的线程。
我想知道,对于像这样的Python程序,在SLURM中,我可以使用多个节点的核心来运行它吗? 我的意思是,它可以将程序分配在一个节点上,如果SLURM集群中的节点有20个核心,那么这个程序当然可以在这个节点上运行,就像在一台有20个核心的笔记本电脑上运行一样。 但是,我想使用 100 个核心,所以需要 5 个节点。是否可以在 5 个节点上使用这 100 个核心来运行这个 python 程序?
我尝试了下面的脚本,并将作业提交到 slurm
#!/bin/bash
#SBATCH -n 100 # Number of CPU cores
#SBATCH -t 0-24:00 # wall time (D-HH:MM) set to 24h to test
#SBATCH -p slgrid # partition
#SBATCH -o myoutput.%j.out # STDOUT (%j = JobId)
#SBATCH -e myoutput.%j.err # STDERR (%j = JobId)
#SBATCH --mail-type=ALL # Send when job starts, stops, or fails
source /scratch/xxx/.venv/bin/activate ! the python package is install in venv, and I activate it.
python -m darwin.run_search template.txt tokens.json options.json ! The python run command
虽然SLURM成功为这项工作分配了5个节点和总共100个核心,但我检查了一下,python程序似乎只在第一个拥有20个核心的节点上运行。其余 4 个节点上的其余 80 个核心没有执行任何操作。
我再次想知道,这是一种让这样的Python程序能够使用来自不同节点的多个核心的方法吗?
或者有一些Python包或者其他东西可以让我实现这个目标吗?
提前非常感谢!
我在 sbatch 脚本中尝试了不同的选项,但似乎这个 python 程序实际上只在一个节点上运行。
mpi4py是用Python编写多节点并行代码的标准方法。但这需要您重写代码。