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

Περιγραφή

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 τα αποτελέσματα όσον αφορά τον χρόνο εκτέλεσης φαίνονται στο παρακάτω διάγραμμα:

TIME RAY

GPU support

Τo Ray Framework μπορεί να χρησιμοποιηθεί για την παράλληλη εκτέλεση κώδικα Python σε GPUs, επομένως θα μπορούσε να χρησιμοποιηθεί σε εργασίες που υποβάλλονται στα partitions gpu και ampere.

Αναλυτικές πληροφορίες και παραδείγματα είναι διαθέσιμα στο documentation του Ray.