【问题标题】:Running a helloworld.py program on a grid using slurm使用 slurm 在网格上运行 helloworld.py 程序
【发布时间】:2014-06-19 16:04:58
【问题描述】:

这是一个很长的问题,所以我先总结一下:

我是并行编程和网格系统的新手。我想在我有帐户的网格中运行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 的“hello worlds”。例如rank 对每个进程采用不同的值。不错!

问题是,没有用 Python 编写的示例程序。系统中的python是旧的:2.6.x。所以我下载了anaconda发行版并安装在用户空间。我尝试改编上面的示例 helloworld.slurm。我想在这里运行 helloworld 示例:http://jeremybejarano.zzl.org/MPIwithPython/introMPI.html。我可以提交工作,但我得到的 helloworlds 排名都相同,正如您从输出文件中看到的那样。例如。这似乎没有在不同的进程上运行。

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

helloworld python 版本:

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

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

#!/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

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

我明明给管理员发了消息,但他还没有回复。

【问题讨论】:

  • 确保 mpi4py 链接到相同的 Open MPI 版本,即您正在使用的系统上安装的 Open MPI 1.4.3。用于构建软件的库版本和运行时版本不匹配是 MPI 进程失败返回单例初始化的第一大原因(因此所有等级均为 0)。

标签: python mpi openmpi mpi4py slurm


【解决方案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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-27
    • 2021-05-23
    • 1970-01-01
    • 2019-12-13
    • 2020-11-13
    • 2020-10-24
    • 2012-01-26
    相关资源
    最近更新 更多