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