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