在 HPC 集群上使用 python 代码 (mpi4py) 提交作业
Submit job with python code (mpi4py) on HPC cluster
我正在使用 MPI (mpi4py) 编写 python 代码,我想在一个队列中跨多个节点(每个节点有 16 个处理器)实现我的代码在 HPC 集群中。
我的代码结构如下:
from mpi4py import MPI
comm = MPI.COMM_WORLD
size = comm.Get_size()
rank = comm.Get_rank()
count = 0
for i in range(1, size):
if rank == i:
for j in range(5):
res = some_function(some_argument)
comm.send(res, dest=0, tag=count)
我能够使用命令
在集群的头节点上运行这段代码完全正常
$mpirun -np 48 python codename.py
此处 "code" 是 python 脚本的名称,在给定的示例中,我选择了 48 个处理器。在头节点上,对于我的特定任务,作业大约需要 1 秒才能完成(并且它成功地给出了所需的输出)。
但是,当我 运行 尝试提交与 HPC 集群队列之一上的作业完全相同的代码时,它会保持 运行ning 很长时间很长时间(许多小时)(未完成),我必须在一天左右后手动终止工作。此外,它没有给出预期的输出。
这是我正在使用的 pbs 文件,
#!/bin/sh
#PBS -l nodes=3:ppn=16
#PBS -N phy
#PBS -m abe
#PBS -l walltime=23:00:00
#PBS -j eo
#PBS -q queue_name
cd $PBS_O_WORKDIR
echo 'This job started on: ' `date`
module load python27-extras
mpirun -np 48 python codename.py
我使用命令qsub jobname.pbs提交作业。
我很困惑为什么代码在头节点上 运行 完全没问题,但是当我将此作业提交给 运行 跨多个代码时 运行 却遇到了这个问题队列中的处理器。我假设我可能需要更改 pbs 脚本。如果有人可以建议我应该如何处理 运行 这样的 MPI 脚本作为 HPC 集群中队列上的作业,我将非常感激。
不需要更改我的代码。这是有效的 pbs 脚本。 =)
显然,我需要在作业脚本中调用适当的 mpirun,以便当代码在集群中运行时,它使用与在头节点中使用的相同的 mpirun。
这是造成差异的行:/opt/intel/impi/4.1.1.036/intel64/bin/mpirun
这是有效的作业脚本。
#!/bin/sh
#PBS -l nodes=3:ppn=16
#PBS -N phy
#PBS -m abe
#PBS -l walltime=23:00:00
#PBS -j eo
#PBS -q queue_name
cd $PBS_O_WORKDIR
export OMP_NUM_THREADS=16
export I_MPI_PIN=off
echo 'This job started on: ' `date`
/opt/intel/impi/4.1.1.036/intel64/bin/mpirun -np 48 python codename.py
我正在使用 MPI (mpi4py) 编写 python 代码,我想在一个队列中跨多个节点(每个节点有 16 个处理器)实现我的代码在 HPC 集群中。
我的代码结构如下:
from mpi4py import MPI
comm = MPI.COMM_WORLD
size = comm.Get_size()
rank = comm.Get_rank()
count = 0
for i in range(1, size):
if rank == i:
for j in range(5):
res = some_function(some_argument)
comm.send(res, dest=0, tag=count)
我能够使用命令
在集群的头节点上运行这段代码完全正常$mpirun -np 48 python codename.py
此处 "code" 是 python 脚本的名称,在给定的示例中,我选择了 48 个处理器。在头节点上,对于我的特定任务,作业大约需要 1 秒才能完成(并且它成功地给出了所需的输出)。
但是,当我 运行 尝试提交与 HPC 集群队列之一上的作业完全相同的代码时,它会保持 运行ning 很长时间很长时间(许多小时)(未完成),我必须在一天左右后手动终止工作。此外,它没有给出预期的输出。
这是我正在使用的 pbs 文件,
#!/bin/sh
#PBS -l nodes=3:ppn=16
#PBS -N phy
#PBS -m abe
#PBS -l walltime=23:00:00
#PBS -j eo
#PBS -q queue_name
cd $PBS_O_WORKDIR
echo 'This job started on: ' `date`
module load python27-extras
mpirun -np 48 python codename.py
我使用命令qsub jobname.pbs提交作业。
我很困惑为什么代码在头节点上 运行 完全没问题,但是当我将此作业提交给 运行 跨多个代码时 运行 却遇到了这个问题队列中的处理器。我假设我可能需要更改 pbs 脚本。如果有人可以建议我应该如何处理 运行 这样的 MPI 脚本作为 HPC 集群中队列上的作业,我将非常感激。
不需要更改我的代码。这是有效的 pbs 脚本。 =)
显然,我需要在作业脚本中调用适当的 mpirun,以便当代码在集群中运行时,它使用与在头节点中使用的相同的 mpirun。
这是造成差异的行:/opt/intel/impi/4.1.1.036/intel64/bin/mpirun
这是有效的作业脚本。
#!/bin/sh
#PBS -l nodes=3:ppn=16
#PBS -N phy
#PBS -m abe
#PBS -l walltime=23:00:00
#PBS -j eo
#PBS -q queue_name
cd $PBS_O_WORKDIR
export OMP_NUM_THREADS=16
export I_MPI_PIN=off
echo 'This job started on: ' `date`
/opt/intel/impi/4.1.1.036/intel64/bin/mpirun -np 48 python codename.py