Condividi tramite


Avviare un cluster Ray in Azure Databricks

Azure Databricks semplifica il processo di avvio di un cluster Ray gestendo il cluster e la configurazione dei processi allo stesso modo con qualsiasi processo Apache Spark. Ciò è dovuto al fatto che il cluster Ray viene effettivamente avviato sopra il cluster Apache Spark gestito.

Eseguire Ray in un computer locale

import ray

ray.init()

Eseguire Ray in Azure Databricks

from ray.util.spark import setup_ray_cluster
import ray

# If the cluster has four workers with 8 CPUs each as an example
setup_ray_cluster(num_worker_nodes=4, num_cpus_per_worker=8)

# Pass any custom configuration to ray.init
ray.init(ignore_reinit_error=True)

Questo approccio funziona su qualsiasi scala del cluster, da pochi a centinaia di nodi. I cluster Ray in Azure Databricks supportano anche la scalabilità automatica.

Dopo aver creato il cluster Ray, è possibile eseguire qualsiasi codice dell'applicazione Ray in un notebook di Azure Databricks.

Importante

Databricks consiglia di installare le librerie necessarie per l'applicazione per %pip install <your-library-dependency> assicurarsi che siano disponibili per il cluster Ray e l'applicazione di conseguenza. Se si specificano le dipendenze nella chiamata alla funzione Ray init, le dipendenze vengono installate in una posizione inaccessibile ai nodi del ruolo di lavoro Apache Spark, che causano incompatibilità della versione e errori di importazione.

Ad esempio, è possibile eseguire una semplice applicazione Ray in un notebook di Azure Databricks come indicato di seguito:

import ray
import random
import time
from fractions import Fraction

ray.init()

@ray.remote
def pi4_sample(sample_count):
    """pi4_sample runs sample_count experiments, and returns the
    fraction of time it was inside the circle.
    """
    in_count = 0
    for i in range(sample_count):
        x = random.random()
        y = random.random()
        if x*x + y*y <= 1:
            in_count += 1
    return Fraction(in_count, sample_count)

SAMPLE_COUNT = 1000 * 1000
start = time.time()
future = pi4_sample.remote(sample_count=SAMPLE_COUNT)
pi4 = ray.get(future)
end = time.time()
dur = end - start
print(f'Running {SAMPLE_COUNT} tests took {dur} seconds')

pi = pi4 * 4
print(float(pi))

Arrestare un cluster Ray

I cluster Ray vengono arrestati automaticamente nelle circostanze seguenti:

  • Scollegare il notebook interattivo dal cluster Azure Databricks.
  • Il processo di Azure Databricks è stato completato.
  • Il cluster Azure Databricks viene riavviato o terminato.
  • Non esiste alcuna attività per il tempo di inattività specificato.

Per arrestare un cluster Ray in esecuzione in Azure Databricks, è possibile chiamare l'API ray.utils.spark.shutdown_ray_cluster .

from ray.utils.spark import shutdown_ray_cluster
import ray

shutdown_ray_cluster()
ray.shutdown()

Passaggi successivi