Запуск программы helloworld.py в сетке с использованием slurm

Это длинный вопрос, поэтому сначала я дам резюме:

Я новичок в параллельном программировании и грид-системах. Я хочу запустить первый пример в http://jeremybejarano.zzl.org/MPIwithPython/introMPI.html в сетке У меня есть аккаунт. Сопровождающие предоставили пример на языке C. Я могу это сделать. Но с версией на Python я получаю все нули для рангов. В чем может быть проблема?

Расширенная версия вопроса:

У меня есть этот код, написанный на python 2.7 (+ numpy + matplotlib + mayavi), который требует много времени для запуска. Поскольку у меня есть учетная запись в какой-то сетке, я хочу переместить код туда и тратить меньше времени на ожидание завершения испытаний.

К сожалению, я новичок в параллелизме, сетках и т. Д. У меня также нет прав администратора в сетке.

Предоставляется некоторая документация. В системе используется SLURM. Вы готовите пакетный файл и отправляете задание до sbatch filename. Вот пример программы helloworld, написанной на C:

#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 [email protected]


. /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 нет программы-примера. Питон в системе старый: 2.6.x. Итак, я загрузил дистрибутив anaconda и установил его в пользовательском пространстве. Я попытался адаптировать приведенный выше пример helloworld.slurm. Я хочу запустить пример helloworld здесь: http://jeremybejarano.zzl.org/MPIwithPython/introMPI.html. Я могу отправить задание, но получаю helloworlds с таким же рангом, как вы можете видеть из выходных файлов. Например. похоже, что это не работает в разных процессах.

Примечание: у меня такая же ошибка с версией c, но она все еще работает и выдает разные ранги.

версия python helloworld:

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

файл slurm для python hello world (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 [email protected]

. /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

Итак, в чем может быть причина проблемы? Как я могу это решить?

Я явно отправил сообщение админу, но он пока не ответил.


person ozi    schedule 02.05.2014    source источник
comment
Убедитесь, что mpi4py связан с той же версией Open MPI, то есть с установкой Open MPI 1.4.3 в используемой вами системе. Несоответствие между версией библиотеки, используемой для создания программного обеспечения, и версией среды выполнения является причиной № 1 для процессов MPI, которые не возвращаются к одноэлементной инициализации (следовательно, все ранги равны 0).   -  person Hristo Iliev    schedule 03.09.2014


Ответы (1)


В Linux mpi4py от Anaconda связан с mpich (и использует OpenMPI с OS X.) Поскольку вы используете OpenMPI mpirun, этим можно объяснить одноэлементный эффект. У вас есть два варианта:

  1. перекомпилируйте Anaconda из исходного кода для использования openmpi-1.4.3 / gcc
  2. попробуйте найти программу mpirun от Anaconda и использовать ее с чем-то вроде /scratch/username/anaconda/bin/mpirun /scratch/username/anaconda/bin/python /scratch/username/test/main.py

Ошибка, с которой вы сталкиваетесь со Slurm, заявляет, что плагин cgroup Slurm не был скомпилирован с поддержкой hwloc, и, следовательно, привязка задач (привязка процессов к ядрам) не поддерживается. Это не должно быть причиной одноэлементной проблемы.

person damienfrancois    schedule 19.11.2014