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

Περιγραφή

Python is a high-level, general-purpose programming language.

Python versions

Με την παρακάτω εντολή μπορούμε να δούμε όλες τις κεντρικά εγκατεστημένες εκδόσεις της python:

$ module spider python

Αφού επιλέξουμε μία έκδοση, μπορούμε να τρέξουμε την εντολή module spider ώστε να εντοπίσουμε τα modules που θα χρειαστεί να κάνουμε load για να την χρησιμοποιήσουμε. Για παράδειγμα:

$ module spider python/3.10.10
Terminal output
You will need to load all module(s) on any one of the lines below before the "python/3.10.10-abxdifo" module is available to load.

  gcc/12.2.0

Help:
  The Python programming language.

Επομένως, για να χρησιμοποιήσουμε την python/3.10.10, θα χρειαστεί να κάνουμε προηγουμένως load το module gcc/12.2.0. Επομένως, μπορούμε να τρέξουμε την module load ως εξής:

$ module load gcc/12.2.0 python/3.10.10 

Παράδειγμα χρήσης

Σε αυτό το παράδειγμα θα δούμε πώς υποβάλλουμε δοκιμαστικά μία εργασία Python.

Δημιουργούμε ένα Python script, το οποίο χρησιμοποιεί το built-in module math και τυπώνει την τετραγωνική ρίζα ενός αριθμού, έστω math_example.py:

Python script

import math
x = math.sqrt(64)
print(x) 

Για την υποβολή της εργασίας, χρησιμοποιούμε το submission script, έστω python-test-case.sh:

Submission Script

#!/bin/bash
#SBATCH -J python-test-case
#SBATCH -t 01:00

# Load the required modules
module load gcc/12.2.0 python/3.10.10

# Print python version
python -c 'import sys; print(sys.version)'

# Run a python script
python math_example.py

Υποβάλλουμε το παραπάνω script προς εκτέλεση με την εντολή:

$ sbatch python-test-case.sh

Παρακολουθούμε την πορεία της εργασίας με την εντολή squeue.

Το αναμενόμενο αποτέλεσμα φαίνεται στο αρχείο slurm-*.out:

Terminal output
3.10.10 (main, Sep  7 2023, 09:23:54) [GCC 12.2.0]
8.0

Κεντρικά εγκατεστημένα Python packages

Για να χρησιμοποιήσουμε κάποιο από τα κεντρικά εγκατεστημένα Python packages, θα χρειαστεί να ενεργοποιήσουμε στο terminal ή στο script υποβολής το αντίστοιχο module:

$ module load gcc/12.2.0 py-jupyter-core

How to find the available packages

Ένας σύντομος τρόπος για να εντοπίσουμε τα κεντρικά διαθέσιμα Python packages είναι να ενεργοποιήσουμε ένα gcc module και στην συνέχεια να τρέξουμε την εντολή module avail:

Module avail
$ module load gcc/12.2.0 
$ module avail py-

Python built-in virtual environments (venv)

Για να προσθέσουμε κάποιο Python package που δεν είναι κεντρικά εγκατεστημένο, είναι προτιμότερο να δημιουργήσουμε ένα virtual environment.

Info

Τα virtual environments προσφέρουν την δυνατότητα εγκατάστασης Python packages σε ξεχωριστό περιβάλλον για κάθε διαφορετικό project. Έτσι, μπορούμε να ενεργοποιούμε το virtual environment που χρειαζόμαστε κατά περίπτωση. Επίσης, διευκολύνουν την μεταφορά ενός project, καθώς, αφού δημιουργήσουμε ένα python virtual environment μπορούμε εύκολα να το "αντιγράψουμε" σε άλλο περιβάλλον.

Ο απλούστερος και πιο σύντομος τρόπος να δημιουργήσουμε ένα python virtual environment είναι είναι να χρησιμοποιήσουμε το built-in venv module της Python. Για παράδειγμα, μπορούμε να δημιουργήσουμε και να ενεργοποιήσουμε το environment myenv ως εξής:

$ module load gcc/12.2.0 python/3.10.10
$ python -m venv myenv
$ source myenv/bin/activate

Στο περιβάλλον που έχουμε δημιουργήσει είναι χρήσιμο να κάνουμε upgrade τον standard package manager της Python (pip) στην latest διαθέσιμη έκδοση, πριν προχωρήσουμε στην έγκατάστση επιπλέον packages.

Upgrade pip
$ pip install --upgrade pip

Για να εγκαταστήσουμε επιπλέον packages στο environment, θα χρησιμοποιήσουμε την εντολή pip install ως εξής:

Install python packages

$ pip install numpy pandas
$ pip install ray

Για να απενεργοποιήσουμε το python venv μπορούμε να χρησιμοποιήσουμε την εντολή deactivate.

Deactivate virtual environment
(myenv) $ deactivate
$

Στην συνέχεια μπορούμε να ενεργοποιήσουμε όποιο virtual environment επιλέξουμε. Σημειώνουμε ότι δεν χρειάζεται να προσθέσουμε εκ νέου τα python packages που έχουμε ήδη εγκαταστήσει σε αυτό.

Activate virtual environment
$ source <virtual_env_name>/bin/activate

Επίσης μπορούμε να πάρουμε μία λίστα των εγκατεστημένων πακέτων με την εντολή pip freeze. Έτσι, μπορούμε να μεταφέρουμε την εγκατάσταση σε άλλο υπολογιστικό περιβάλλον ή για να δημιουργήσουμε ένα πανομοιότυπο virtual environment.

Freeze and copy environment

$ pip freeze > requirements.txt
$ python -m venv myenv2
$ source myenv2/bin/activate
(myenv2) $ pip install -r requirements.txt

Μπορούμε να χρησιμοποιήσουμε ένα virtual environment στις εργασίες που υποβάλλουμε στην υπολογιστική συστοιχία, προσθέτοντας την αντίστοιχη εντολή source <env>/bin/activate στο script υποβολής της εργασίας.