I think the SLURM code in Open MPI is making an assumption that is failing in your case: we assume that your nodes will have a specific naming convention:

mycluster.example.com --> head node
mycluster01.example.com --> cluster node 1
mycluster02.example.com --> cluster node 2
...etc.

OMPI is therefore parsing the SLURM environment and not correctly groking the "master,wolf1" string because, to be honest, I didn't even know that SLURM supported that scenario. I.e., I thought SLURM required the naming convention I listed above. In hindsight, that's a pretty silly assumption, but to be fair, you're the first user that ever came to us with this problem (i.e., we use pretty much the same string parsing in LAM/MPI, which has had SLURM support for several years). Oops!

We can fix this, but I don't know if it'll make the v1.2 cutoff or not. :-\

Thanks for bringing this to our attention!



On Jan 19, 2007, at 1:50 PM, Robert Bicknell wrote:

Thanks for your response. The program that I have been using for testing purposes is a simple hello:


#include <stdio.h>

#include <mpi.h>


#include <sys/time.h>
#include <sys/resource.h>
#include <unistd.h>
#include <stdio.h>
main(int argc, char *argv)
{
  char name[BUFSIZ];
  int length;
  int rank;
  struct rlimit rlim;
  FILE *output;

  MPI_Init(&argc, &argv);
  MPI_Get_processor_name(name, &length);
  MPI_Comm_rank(MPI_COMM_WORLD, &rank);
  rank = 0;
  MPI_Comm_rank(MPI_COMM_WORLD, &rank);

// while(1) {
  printf("%s: hello world from rank %d\n", name, rank);
  sleep(1);
// }
  MPI_Finalize();
}

If I run this program not in a slurm environment I get the following

mpirun -np 4 -mca btl tcp,self -host wolf1,master ./hello

master: hello world from rank 1
wolf1: hello world from rank 0
wolf1: hello world from rank 2
master: hello world from rank 3

This is exactly what I expect. Now if I create a slurm environment using the following:

srun -n 4 -A

The output of printenv|grep SLRUM gives me:

SLURM_NODELIST=master,wolf1
SLURM_SRUN_COMM_PORT=58929
SLURM_MEM_BIND_TYPE=
SLURM_CPU_BIND_VERBOSE=quiet
SLURM_MEM_BIND_LIST=
SLURM_CPU_BIND_LIST=
SLURM_NNODES=2
SLURM_JOBID=66135
SLURM_TASKS_PER_NODE=2(x2)
SLURM_SRUN_COMM_HOST=master
SLURM_CPU_BIND_TYPE=
SLURM_MEM_BIND_VERBOSE=quiet
SLURM_NPROCS=4

This seems to indicate that both master and wolf1 have been allocated and that each node should run 2 tasks, which is correct since both master and wolf1 are dual processor machines.

Now if I run:

mpirun -np 4 -mca btl tcp,self ./hello

The output is:

master: hello world from rank 1
master: hello world from rank 2
master: hello world from rank 3
master: hello world from rank 0


All four processes are running on master and none on wolf1.

If I try the following and specify the hosts. I get the following error message.

mpirun -np 4 -host wolf1,master -mca btl tcp,self ./hello

---------------------------------------------------------------------- ---- Some of the requested hosts are not included in the current allocation for the
application:
  ./hello
The requested hosts were:
  wolf1,master

Verify that you have mapped the allocated resources properly using the
--host specification.
---------------------------------------------------------------------- ---- [master:28022] [0,0,0] ORTE_ERROR_LOG: Out of resource in file rmgr_urm.c at line 377
[master:28022] mpirun: spawn failed with errno=-2


I'm at a loss to figure out how to get this working correctly. Any help would be greatly appreciated.

Bob

On 1/19/07, Ralph Castain <r...@lanl.gov> wrote: Open MPI and SLURM should work together just fine right out-of-the-box. The
typical command progression is:

srun -n x -A
mpirun -n y .....


If you are doing those commands and still see everything running on the head
node, then two things could be happening:

(a) you really aren't getting an allocation from slurm. Perhaps you don't have slurm setup correctly and aren't actually seeing the allocation in your environment. Do a "printenv | grep SLURM" and see if you find the following
variables:
SLURM_NPROCS=8
SLURM_CPU_BIND_VERBOSE=quiet
SLURM_CPU_BIND_TYPE=
SLURM_CPU_BIND_LIST=
SLURM_MEM_BIND_VERBOSE=quiet
SLURM_MEM_BIND_TYPE=
SLURM_MEM_BIND_LIST=
SLURM_JOBID=47225
SLURM_NNODES=2
SLURM_NODELIST=odin[013-014]
SLURM_TASKS_PER_NODE=4(x2)
SLURM_SRUN_COMM_PORT=43206
SLURM_SRUN_COMM_HOST=odin

Obviously, the values will be different, but we really need the
TASKS_PER_NODE and NODELIST ones to be there

(b) the master node is being included in your nodelist and you aren't
running enough mpi processes to need more nodes (i.e., the number of slots on the master node is greater than or equal to the num procs you requested).
You can force Open MPI to not run on your master node by including
"--nolocal" on your command line.

Of course, if the master node is the only thing on the nodelist, this will
cause mpirun to abort as there is nothing else for us to use.

Hope that helps
Ralph


On 1/18/07 11:03 PM, "Robert Bicknell" <robbickn...@gmail.com> wrote:

> I'm trying to get slurm and openmpi to work together on a debian, two > node cluster. Slurm and openmpi seem to work fine seperately, but when > I try to run a mpi program in a slurm allocation, all the processes get > run on the master node, and not distributed to the second node. What am
> I doing wrong?
>
> Bob
> _______________________________________________
> users mailing list
> us...@open-mpi.org
> http://www.open-mpi.org/mailman/listinfo.cgi/users


_______________________________________________
users mailing list
us...@open-mpi.org
http://www.open-mpi.org/mailman/listinfo.cgi/users

_______________________________________________
users mailing list
us...@open-mpi.org
http://www.open-mpi.org/mailman/listinfo.cgi/users


--
Jeff Squyres
Server Virtualization Business Unit
Cisco Systems

Reply via email to