Freigeben über


Starten eines Ray-Clusters in Azure Databricks

Azure Databricks behandelt die Cluster- und Auftragskonfiguration auf die gleiche Weise wie bei jedem Apache Spark-Auftrag und vereinfacht so das Starten eines Ray-Clusters. Das liegt daran, dass der Ray-Cluster eigentlich auf Basis des verwalteten Apache Spark-Clusters gestartet wird.

Ausführen von Ray auf einem lokalen Computer

import ray

ray.init()

Ausführen von 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)

Dieser Ansatz funktioniert bei jeder Clustergröße – von einigen wenigen Knoten bis hin zu mehreren hundert Knoten. Ray-Cluster in Azure Databricks unterstützen auch die automatische Skalierung.

Nach Erstellung des Ray-Clusters können Sie beliebigen Ray-Anwendungscode in einem Azure Databricks-Notebook ausführen.

Wichtig

Databricks empfiehlt, alle ggf. erforderlichen Bibliotheken für Ihre Anwendung mit %pip install <your-library-dependency> zu installieren, um sicherzustellen, dass sie für Ihren Ray-Cluster und ihre Anwendung verfügbar sind. Die Angabe von Abhängigkeiten im Aufruf der Ray-Initialisierungsfunktion installiert die Abhängigkeiten an einem für die Apache Spark-Workerknoten unzugänglichen Ort, was zu Versionsinkompatibilitäten und Importfehlern führt.

Eine einfache Ray-Anwendung kann beispielsweise wie folgt in einem Azure Databricks-Notebook ausgeführt werden:

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

Herunterfahren eines Ray-Clusters

Ray-Cluster werden unter folgenden Umständen automatisch heruntergefahren:

  • Sie Ihr interaktives Notebook von Ihrem Azure Databricks-Cluster trennen.
  • Ihr Azure Databricks-Auftrag ist abgeschlossen.
  • Ihr Azure Databricks-Cluster neu gestartet oder beendet wird.
  • Es gibt keine Aktivität für die angegebene Leerlaufzeit.

Wenn Sie einen Ray-Cluster herunterfahren möchten, der in Azure Databricks ausgeführt wird, können Sie die API ray.utils.spark.shutdown_ray_cluster aufrufen.

from ray.utils.spark import shutdown_ray_cluster
import ray

shutdown_ray_cluster()
ray.shutdown()

Nächste Schritte