Περιγραφή¶
Ray is an open-source unified compute framework that makes it easy to scale AI and Python workloads
Installation¶
Προτείνεται η εγκατάσταση του Ray framework σε ένα Python virtual environment
.
Create virtual env and install Ray
$ module load gcc/12.2.0 python/3.10.10
$ python -m venv ray.env
$ source ray.env/bin/activate
$ pip install --upgrade pip
$ pip install numpy ray
$ deactivate
Παράδειγμα χρήσης (CPU)¶
Ray key concepts
Τα key concepts που χρησιμοποιεί το Ray
framework για την ανάπτυξη κατανεμημένων εφαρμογών είναι τα Tasks
, Actors
και Objects
Σε αυτό το παράδειγμα θα υποβάλλουμε μία εργασία Python
που χρησιμοποιεί το Ray
framework για παραλληλοποίηση. Το python script του παραδείγματος είναι βασισμένο στο walkthrough που είναι διαθέσιμο στο documentation του Ray
, έστω ray_matsum.py
:
Python script using Ray to calculate matrix sum
import ray
import numpy as np
ray.init(num_cpus=8)
ray.available_resources()
# Define a task that sums the values in a matrix.
@ray.remote
def sum_matrix(matrix):
return np.sum(matrix)
# Call the task with a literal argument value.
print(ray.get(sum_matrix.remote(np.ones((100, 100)))))
# -> 10000.0
# Put a large array into the object store.
matrix_ref = ray.put(np.ones((10000, 10000)))
# Call the task with the object reference as an argument.
print(ray.get(sum_matrix.remote(matrix_ref)))
# -> 1000000.0
Για την υποβολή της εργασίας, χρησιμοποιούμε το submission script, έστω python-ray-example.sh
:
Submission Script
#!/bin/bash
#SBATCH -J ray-python-job
#SBATCH --partition=batch
#SBATCH --ntasks=8
#SBATCH --time=10:00
source ~/ray.env/bin/activate
time python ray_matsum.py
Υποβάλλουμε το παραπάνω script ως εργασία στην υπολογιστική συστοιχία με την εντολή:
$ sbatch python-ray-example.sh
Παρακολουθούμε την πορεία της εργασίας με την εντολή squeue
.
Το αναμενόμενο αποτέλεσμα φαίνεται στο αρχείο slurm-*.out
:
Terminal output
10000.0
100000000.0
Warning
Είναι σημαντικό να προσέξουμε ότι ο αριθμός των tasks
που δεσμεύουμε στο script υποβολής με ένα slurm directive όπως το --ntasks
, θα πρέπει να συμφωνεί με τον αριθμό num_cpus
που ορίζουμε στην συνάρτηση ray.init()
.
Αυξάνοντας τον αριθμό των CPUs
(num_cpus
) που χρησιμοποιεί το Ray Framework
θα πρέπει να παρατηρήσουμε μείωση του χρόνου εκτέλεσης. Για το συγκεκριμένο παράδειγμα που έτρεξε στο partition batch
με 2, 4 και 8 CPUs
τα αποτελέσματα όσον αφορά τον χρόνο εκτέλεσης φαίνονται στο παρακάτω διάγραμμα:
GPU support¶
Τo Ray
Framework μπορεί να χρησιμοποιηθεί για την παράλληλη εκτέλεση κώδικα Python
σε GPUs
, επομένως θα μπορούσε να χρησιμοποιηθεί σε εργασίες που υποβάλλονται στα partitions gpu
και ampere
.
Αναλυτικές πληροφορίες και παραδείγματα είναι διαθέσιμα στο documentation του Ray.