Μετάβαση στο περιεχόμενο

MPI Εργασίες

Υποβολή MPI εργασίας

Μία σύντομη εισαγωγή στον παράλληλο προγραμματισμό και στη χρήση του MPI, υπάρχει εδώ.

Έστω ότι θέλουμε να τρέξουμε παράλληλα ενα MPI script γραμμένο σε Python με όνομα example.py.

Αρχικά, δημιουργούμε το batch script προς υποβολή, έστω mpi-nefeli.sh με τις κατάλληλες SBATCH μακροεντολές, οι οποίες θα επιτρέψουν την παράλληλη χρήση επεξεργαστών. Η εκτέληση του script μας θα γίνει παράλληλα, σε όσες CPU έχουν γίνει allocate για το job μας, χρησιμοποιώντας την εντολή srun python example.py.

Παράδειγμα

#!/bin/bash
#SBATCH --job-name=MPI-nefeli
#SBATCH --output=%results.out
#SBATCH --partition=highcpu
#SBATCH --nodes=2                    
#SBATCH --ntasks-per-node=4         
#SBATCH --time=00:10:00              

module purge
module load openmpi/4.1.x
source mpi4pyenv/bin/activate

echo "Starting Python MPI job on $(hostname)"
srun python example.py

Με την εντολή load φορτώνουμε τα απαραίτητα modules (στη προκειμένη περίπτωση τη βιβλιοθήκη OpenMPI). Ακολούθως, εγκαθιστούμε τη βιβλιοθήκη mpi4py, η οποία επιτρέπει στα Python scripts να επικοινωνούν με το περιβάλλον MPI.

Τα βήματα αυτά είναι απαραίτητα ώστε το σύστημα να μπορεί να αναγνωρίζει τις εντολές παράλληλης επεξεργασίας και να διαθέτει τους κατάλληλους compilers που απαιτούνται για τη μεταγλώττιση και την εκτέλεση των εφαρμογών μας.

  module load openmpi/v4.1.x
  python3 -m venv mpi4pyenv
  source mpi4pyenv/bin/activate
  pip3 install --user mpi4py
Python virtual environments

Επιπλέον πληροφορίες για τα python virtual environments είναι διαθέσιμες εδώ.

Terminal Output

  Installing collected packages: mpi4py
  Successfully installed mpi4py-4.1.1

Για να υποβάλουμε την εργασία, τρέχουμε την παρακάτω εντολή από το directory στο οποίο βρίσκεται το αρχείο mpi-nefeli.sh:

Terminal Output

  sbatch mpi-nefeli.sh
  Submitted batch job 280

Τέλος, μέσω της εντολής cat results.out εμφανίζουμε την έξοδο της παράλληλης εκτέλεσης του προγράμματος MPI.

Terminal Output

  cat results.out
  Starting job on: nefeli-highcpunodeset-0
  Hello form processor nefeli-highcpunodeset-0, rank 1 out of 8
  Hello form processor nefeli-highcpunodeset-0, rank 2 out of 8
  Hello form processor nefeli-highcpunodeset-0, rank 3 out of 8
  Hello form processor nefeli-highcpunodeset-0, rank 0 out of 8
  Hello form processor nefeli-highcpunodeset-1, rank 4 out of 8
  Hello form processor nefeli-highcpunodeset-1, rank 5 out of 8
  Hello form processor nefeli-highcpunodeset-1, rank 6 out of 8
  Hello form processor nefeli-highcpunodeset-1, rank 7 out of 8