使用slurm在网格上运行helloworld.py程序

时间:2014-05-02 21:22:04

标签: python mpi openmpi mpi4py slurm

这是一个很长的问题,所以我先说一下摘要:

我是并行编程和网格系统的新手。我想在我有一个帐户的网格中运行http://jeremybejarano.zzl.org/MPIwithPython/introMPI.html中的第一个示例。维护者提供了一个C示例。我可以运行它。但是使用python版本,我得到的所有零都是排名。可能是什么问题?

问题的长版本:

我的代码用python 2.7(+ numpy + matplotlib + mayavi)编写,需要花费很多时间才能运行。由于我在某个网格中有一个帐户,我想在那里移动代码,花更少的时间等待审判完成。

不幸的是,我不熟悉并行性,网格等。我也没有网格中的管理员权限。

提供了一些文档。系统使用SLURM。您准备一个sbatch文件,并通过sbatch filename发送作业。有一个用C编写的helloworld程序示例:

#include <stdio.h>
#include <mpi.h>


int main (argc, argv)
     int argc;
     char *argv[];
{
  int rank, size;

  MPI_Init (&argc, &argv);      /* starts MPI */
  MPI_Comm_rank (MPI_COMM_WORLD, &rank);        /* get current process id */
  MPI_Comm_size (MPI_COMM_WORLD, &size);        /* get number of processes */
  printf( "Hello world from process %d of %d\n", rank, size );
  MPI_Finalize();
  return 0;
}

以及管理员提供的运行它的slurm文件:

#!/bin/bash
#SBATCH -M linux
#SBATCH -p mid1
#SBATCH -A username
#SBATCH -J mid1-test
#SBATCH -N 1 
#SBATCH -n 4 
#SBATCH --time=2-00:00:00 
#SBATCH --workdir=/truba_scratch/username/test
#SBATCH --output=slurm-%j.out
#SBATCH --error=slurm-%j.err
#SBATCH --mail-type=ALL
#SBATCH --mail-user=who@am.i


. /usr/share/Modules/init/sh
module load somehostithink/library/openmpi-1.4.3/gcc
export OMP_NUM_THREADS=1
echo "SLURM_NODELIST $SLURM_NODELIST"

mpirun helloworld

exit

我可以sbatch helloworld.slurm提交。最后,我看到“你好世界”从0到3。 rank为每个进程采用不同的值。尼斯!

问题是,没有用Python编写的示例程序。系统中的python是旧的:2.6.x.所以我下载了anaconda发行版并将其安装在用户空间中。我尝试调整上面的示例helloworld.slurm。我想在这里运行helloworld示例:http://jeremybejarano.zzl.org/MPIwithPython/introMPI.html。我可以提交这份工作,但是我可以从输出文件中看到具有相同等级的helloworld。例如。这似乎不适用于不同的流程。

注意:我在c版本中遇到了同样的错误,但它仍然运行并产生不同的等级。

helloworld python版本:

from mpi4py import MPI
comm = MPI.COMM_WORLD
rank = comm.Get_rank()
print "hello world from process ", rank

python hello world(main.py)的slurm文件

#!/bin/bash
#SBATCH -M linux
#SBATCH -p mid1
#SBATCH -A username
#SBATCH -J mid1-test
#SBATCH -N 1
#SBATCH -n 4
#SBATCH --time=2-00:00:00
#SBATCH --workdir=/scratch/username/test
#SBATCH --output=slurm-%j.out
#SBATCH --error=slurm-%j.err
#SBATCH --mail-type=ALL
#SBATCH --mail-user=who@am.i

. /usr/share/Modules/init/sh
module load somehost/library/openmpi-1.4.3/gcc
export OMP_NUM_THREADS=1
echo "SLURM_NODELIST $SLURM_NODELIST"

mpirun /scratch/username/anaconda/bin/python /scratch/username/test/main.py

exit

生成错误文件:

slurmd[shomehostithink]: task/cgroup: plugin not compiled with hwloc support, skipping affinity.

生成的输出文件:

SLURM_NODELIST hostidithink
hello world from process  0
hello world from process  0
hello world from process  0
hello world from process  0

那么,问题可能是什么原因?我该如何解决?

我显然向管理员发了一条消息,但他还没有回复。

1 个答案:

答案 0 :(得分:1)

在Linux下,Anaconda的mpi4pympich捆绑在一起(并且它在OS X中使用OpenMPI。)由于您使用的是OpenMPI mpirun,因此单例效果可以由此解释。您有两种选择:

  1. 从源代码重新编译Anaconda以使用openmpi-1.4.3 / gcc
  2. 尝试找到Anaconda的mpirun程序,并使用/scratch/username/anaconda/bin/mpirun /scratch/username/anaconda/bin/python /scratch/username/test/main.py
  3. 之类的程序

    您与Slurm遇到的错误是声明cgroup Slurm插件未使用hwloc支持进行编译,因此不支持任务关联(将核心固定到核心)。它不应该是单身人士问题的原因。