#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
в сценарии отправки на, все будет работать нормально… Это не обязательно идеально (я бы предпочел использовать один и тот же сценарий отправки в разных системах), но это приемлемое решение.