Difference between revisions of "Mpi4py hello world"

From ScientificComputing
Jump to: navigation, search
(Created page with "This examples shows how to use MPI in Python. == Load modules == On the login node, load the new software stack $ env2lmod Or, set the new software stack as the default...")
 
 
(4 intermediate revisions by the same user not shown)
Line 1: Line 1:
This examples shows how to use MPI in Python.  
+
__NOTOC__
 +
{{back_to_tutorials}}
 +
 
 +
This example shows how to use MPI library in a Python script by using the package [https://mpi4py.readthedocs.io/en/stable/index.html mpi4py].
  
 
== Load modules ==
 
== Load modules ==
Line 12: Line 15:
 
Load necessary modules
 
Load necessary modules
  
  $ module load gcc/6.3.0 openmpi/4.0.2 eth_proxy
+
  $ module load gcc/6.3.0 openmpi/4.0.2 python/3.8.5 eth_proxy
  
 
If not provided, install the package mpi4py locally
 
If not provided, install the package mpi4py locally
Line 47: Line 50:
  
 
Run the Python script with '''mpirun'''
 
Run the Python script with '''mpirun'''
  [jarunanp@eu-ms-002-19 mpi4py]$ mpirun -n 4 python hello_mpi4py.py
+
  [jarunanp@eu-ms-002-19 mpi4py]$ mpirun -np 4 python hello_mpi4py.py
 
  Hello world from processor eu-ms-002-19, rank 0 out of 4 processors
 
  Hello world from processor eu-ms-002-19, rank 0 out of 4 processors
 
  Hello world from processor eu-ms-004-25, rank 1 out of 4 processors
 
  Hello world from processor eu-ms-004-25, rank 1 out of 4 processors
Line 53: Line 56:
 
  Hello world from processor eu-ms-005-42, rank 3 out of 4 processors
 
  Hello world from processor eu-ms-005-42, rank 3 out of 4 processors
 
  [jarunanp@eu-ms-002-19 mpi4py]$
 
  [jarunanp@eu-ms-002-19 mpi4py]$
 +
 +
== Submit a job from the command line ==
 +
$ bsub -n 4 -R "span[ptile=1]" "mpirun -n 4 python hello_mpi4py.py"
 +
 +
You should see similar screen output in the LSF output file.
 +
 +
{{back_to_tutorials}}

Latest revision as of 13:36, 8 November 2021

< Examples

This example shows how to use MPI library in a Python script by using the package mpi4py.

Load modules

On the login node, load the new software stack

$ env2lmod

Or, set the new software stack as the default

$ set_software_stack.sh new

Load necessary modules

$ module load gcc/6.3.0 openmpi/4.0.2 python/3.8.5 eth_proxy

If not provided, install the package mpi4py locally

$ pip install --user mpi4py

mpi4py Hello World

Go to $SCRATCH and create a work directory

$ cd $SCRATCH
$ mkdir mpi4py
$ cd mpi4py
$ pwd
/cluster/jarunanp/scratch/mpi4py

Create a file called hello_mpi4py.py and add these lines

from mpi4py import MPI

comm = MPI.COMM_WORLD
rank = comm.Get_rank()
size = comm.Get_size()
procname = MPI.Get_processor_name()

print("Hello world from processor {}, rank {:d} out of {:d} processors".format(procname, rank, size))

Get an interactive session on compute nodes

Request 4 processors on 4 nodes, one processor on each node

$ bsub -n 4 -R "span[ptile=1]" -Is bash
Generic job.
Job <187694829> is submitted to queue <normal.4h>.
<<Waiting for dispatch ...>>
<<Starting on eu-ms-002-19>>
FILE: /sys/fs/cgroup/cpuset/lsf/euler/job.187694829.29543.1633967743/tasks
[jarunanp@eu-ms-002-19 mpi4py]$

Run the Python script with mpirun

[jarunanp@eu-ms-002-19 mpi4py]$ mpirun -np 4 python hello_mpi4py.py
Hello world from processor eu-ms-002-19, rank 0 out of 4 processors
Hello world from processor eu-ms-004-25, rank 1 out of 4 processors
Hello world from processor eu-ms-005-34, rank 2 out of 4 processors
Hello world from processor eu-ms-005-42, rank 3 out of 4 processors
[jarunanp@eu-ms-002-19 mpi4py]$

Submit a job from the command line

$ bsub -n 4 -R "span[ptile=1]" "mpirun -n 4 python hello_mpi4py.py"

You should see similar screen output in the LSF output file.

< Examples