Slurm: «Произошла ошибка в MPI_Init на нулевом коммуникаторе»

#ubuntu #slurm #openmpi

Вопрос:

Обзор: Я пытаюсь установить Slurm на одноузловую вычислительную рабочую станцию, чтобы облегчить организованную отправку заданий пользователям. В основном это делается для запуска самокодированной параллельной программы (здесь: binary ), которая успешно запускается при выполнении через mpirun -np n binary .

Версии:

  • ОС: Ubuntu 20.04.3 (обновлена)
  • Слурм: 19.05.5-1 (через apt)
  • OpenMPI: 4.0.3 (через apt)

Установка/настройка Slurm: Я следовал приведенным здесь инструкциям по установке и настройке Slurm, и мой slurm.conf файл прикреплен. По завершении Slurm, похоже, функционирует правильно, например, sinfo показывает:

 PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
debug*       up   infinite      1   idle nodename
 

и srun -n 2 echo "Look at me" дает:

 Look at me
Look at me
 

и, при использовании команды srun -n8 sleep 10 , squeue показывает:

 JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
   44     debug    sleep username  R       0:04      1 nodename
 

Ошибки:
Я пытаюсь запустить программу binary , используя сценарий оболочки runslurm.sh , с помощью команды sbatch runslurm.sh . Вот сценарий оболочки:

 #!/bin/bash
#SBATCH -J testjob
#SBATCH -e error.%A
#SBATCH -o output.%A
#SBATCH -N 1
#SBATCH -n 2

srun binary
 

Задание выполняется немедленно, и записывается только файл ошибки, содержащий:

 *** An error occurred in MPI_Init
*** on a NULL communicator
*** MPI_ERRORS_ARE_FATAL (processes in this communicator will now abort,
***    and potentially your MPI job)
[nodename:470173] Local abort before MPI_INIT completed completed successfully, but am not able to aggregate error messages, and n
ot able to guarantee that all other processes were killed!
*** An error occurred in MPI_Init
*** on a NULL communicator
*** MPI_ERRORS_ARE_FATAL (processes in this communicator will now abort,
***    and potentially your MPI job)
[nodename:470174] Local abort before MPI_INIT completed completed successfully, but am not able to aggregate error messages, and n
ot able to guarantee that all other processes were killed!
srun: error: nodename: tasks 0-1: Exited with exit code 1

 

Other Attempts:
I have tried all available MPI types in the srun command in the shell script (i.e., srun --mpi=XXX binary , where XXX is determined via srun --mpi=list :

 srun: MPI types are...
srun: pmix_v3
srun: pmix
srun: openmpi
srun: none
srun: pmi2
 

When using --mpi=openmpi , --mpi=none , or --mpi=pmi2 , the error is the same as above.

When using --mpi=pmix_v3 or --mpi=pmix , the error is similar in both cases:

 srun: error: (null) [0] /mpi_pmix.c:133 [init] mpi/pmix: ERROR: pmi/pmix: can not load PMIx library
srun: error: Couldn't load specified plugin name for mpi/pmix_v3: Plugin init() callback failed
srun: error: cannot create mpi context for mpi/pmix_v3
srun: error: invalid MPI type 'pmix_v3', --mpi=list for acceptable types
 

Other Information:
Note that OpenMPI seems to be installed against Slurm (I can copy all ompi_info if necessary):

 ompi_info | grep slurm
  Configure command line: ...'--with-slurm'...
                 MCA ess: slurm (MCA v2.1.0, API v3.0.0, Component v4.0.3)
                 MCA plm: slurm (MCA v2.1.0, API v2.0.0, Component v4.0.3)
                 MCA ras: slurm (MCA v2.1.0, API v2.0.0, Component v4.0.3)
              MCA schizo: slurm (MCA v2.1.0, API v1.0.0, Component v4.0.3)
 

а также pmix:

 ompi_info | grep pmix
  Configure command line: ...'--with-pmix=/usr/lib/x86_64-linux-gnu/pmix'...
                MCA pmix: ext3x (MCA v2.1.0, API v2.0.0, Component v4.0.3)
                MCA pmix: flux (MCA v2.1.0, API v2.0.0, Component v4.0.3)
                MCA pmix: isolated (MCA v2.1.0, API v2.0.0, Component v4.0.3)
 

Вот slurm.conf :

 # slurm.conf file generated by configurator.html.
# Put this file on all nodes of your cluster.
# See the slurm.conf man page for more information.
#
SlurmctldHost=nodename
#SlurmctldHost=
#
#DisableRootJobs=NO
#EnforcePartLimits=NO
#Epilog=
#EpilogSlurmctld=
#FirstJobId=1
#MaxJobId=999999
#GresTypes=
#GroupUpdateForce=0
#GroupUpdateTime=600
#JobFileAppend=0
#JobRequeue=1
#JobSubmitPlugins=1
#KillOnBadExit=0
#LaunchType=launch/slurm
#Licenses=foo*4,bar
#MailProg=/bin/mail
#MaxJobCount=5000
#MaxStepCount=40000
#MaxTasksPerNode=128
MpiDefault=none
#MpiParams=ports=#-#
#PluginDir=
#PlugStackConfig=
#PrivateData=jobs
ProctrackType=proctrack/cgroup
#Prolog=
#PrologFlags=
#PrologSlurmctld=
#PropagatePrioProcess=0
#PropagateResourceLimits=
#PropagateResourceLimitsExcept=
#RebootProgram=
ReturnToService=1
#SallocDefaultCommand=
SlurmctldPidFile=/run/slurmctld.pid
SlurmctldPort=6817
SlurmdPidFile=/run/slurmd.pid
SlurmdPort=6818
SlurmdSpoolDir=/var/spool/slurmd
SlurmUser=root
#SlurmdUser=root
#SrunEpilog=
#SrunProlog=
StateSaveLocation=/var/spool
SwitchType=switch/none
#TaskEpilog=
TaskPlugin=task/affinity
#TaskProlog=
#TopologyPlugin=topology/tree
#TmpFS=/tmp
#TrackWCKey=no
#TreeWidth=
#UnkillableStepProgram=
#UsePAM=0
#
#
# TIMERS
#BatchStartTimeout=10
#CompleteWait=0
#EpilogMsgTime=2000
#GetEnvTimeout=2
#HealthCheckInterval=0
#HealthCheckProgram=
InactiveLimit=0
KillWait=30
#MessageTimeout=10
#ResvOverRun=0
MinJobAge=300
#OverTimeLimit=0
SlurmctldTimeout=120
SlurmdTimeout=300
#UnkillableStepTimeout=60
#VSizeFactor=0
Waittime=0
#
#
# SCHEDULING
#DefMemPerCPU=0
#MaxMemPerCPU=0
#SchedulerTimeSlice=30
SchedulerType=sched/backfill
SelectType=select/cons_tres
SelectTypeParameters=CR_Core
#
#
# JOB PRIORITY
#PriorityFlags=
#PriorityType=priority/basic
#PriorityDecayHalfLife=
#PriorityCalcPeriod=
#PriorityFavorSmall=
#PriorityMaxAge=
#PriorityUsageResetPeriod=
#PriorityWeightAge=
#PriorityWeightFairshare=
#PriorityWeightJobSize=
#PriorityWeightPartition=
#PriorityWeightQOS=
#
#
# LOGGING AND ACCOUNTING
#AccountingStorageEnforce=0
#AccountingStorageHost=
#AccountingStorageLoc=
#AccountingStoragePass=
#AccountingStoragePort=
AccountingStorageType=accounting_storage/none
#AccountingStorageUser=
AccountingStoreJobComment=YES
ClusterName=cluster
#DebugFlags=
#JobCompHost=
#JobCompLoc=
#JobCompPass=
#JobCompPort=
JobCompType=jobcomp/none
#JobCompUser=
#JobContainerType=job_container/none
JobAcctGatherFrequency=30
JobAcctGatherType=jobacct_gather/none
SlurmctldDebug=info
#SlurmctldLogFile=
SlurmdDebug=info
#SlurmdLogFile=
#SlurmSchedLogFile=
#SlurmSchedLogLevel=
#
#
# POWER SAVE SUPPORT FOR IDLE NODES (optional)
#SuspendProgram=
#ResumeProgram=
#SuspendTimeout=
#ResumeTimeout=
#ResumeRate=
#SuspendExcNodes=
#SuspendExcParts=
#SuspendRate=
#SuspendTime=
#
#
# COMPUTE NODES
NodeName=nodename Sockets=1 CoresPerSocket=8 ThreadsPerCore=2 State=UNKNOWN
PartitionName=debug Nodes=nodename Default=YES MaxTime=INFINITE State=UP
 

Комментарии:

1. В качестве примечания, если я srun binary заменю mpirun -np n binary в сценарии отправки на, все будет работать нормально… Это не обязательно идеально (я бы предпочел использовать один и тот же сценарий отправки в разных системах), но это приемлемое решение.