Compartir vía


Inicio de un clúster de Ray en Azure Databricks

Azure Databricks simplifica el proceso de iniciar un clúster de Ray mediante el control de la configuración del clúster y del trabajo de la misma manera que lo hace con cualquier trabajo de Apache Spark. Esto se debe a que el clúster de Ray se inicia realmente sobre el clúster de Apache Spark administrado.

Ejecución de Ray en un equipo local

import ray

ray.init()

Ejecución de Ray en 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)

Este enfoque funciona a escala de clústeres, de unos pocos a cientos de nodos. Los clústeres de Ray en Azure Databricks también admiten el escalado automático.

Después de crear el clúster de Ray, puede ejecutar cualquier código de aplicación de Ray en un cuaderno de Azure Databricks.

Importante

Databricks recomienda instalar las bibliotecas necesarias para la aplicación con %pip install <your-library-dependency> para asegurarse de que están disponibles para el clúster de Ray y la aplicación en consecuencia. Al especificar las dependencias en la llamada a la función Ray init, se instalan las dependencias en una ubicación inaccesible a los nodos de trabajo de Apache Spark, lo que produce incompatibilidades de versión e errores de importación.

Por ejemplo, puede ejecutar una aplicación Ray sencilla en un cuaderno de Azure Databricks como se indica a continuación:

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))

Apagar un clúster de Ray

Los clústeres de Ray se apagan automáticamente en las siguientes circunstancias:

  • Desasocia el cuaderno interactivo del clúster de Azure Databricks.
  • Se ha completado el trabajo de Azure Databricks.
  • El clúster de Azure Databricks se reinicia o finaliza.
  • No hay actividad para el tiempo de inactividad especificado.

Para apagar un clúster de Ray que se ejecuta en Azure Databricks, puede llamar a la API ray.utils.spark.shutdown_ray_cluster.

from ray.utils.spark import shutdown_ray_cluster
import ray

shutdown_ray_cluster()
ray.shutdown()

Pasos siguientes