Ray-Cluster in Vertex AI skalieren

Es gibt zwei Optionen zum Skalieren von Ray-Clustern in Vertex AI: Autoscaling und manuelle Skalierung. Mit dem Autoscaling kann der Cluster die Anzahl der Worker-Knoten automatisch an die Ressourcen anpassen, die beispielsweise von Ray-Aufgaben und ‑Actors benötigt werden. Autoscaling wird empfohlen, wenn Sie eine hohe Arbeitslast ausführen und sich nicht sicher sind, welche Ressourcen erforderlich sind. Bei der manuellen Skalierung haben Nutzer eine detailliertere Kontrolle über die Knoten.

Das Autoscaling kann die Kosten für Arbeitslasten senken, führt aber zu einem zusätzlichen Aufwand beim Starten von Knoten und kann schwierig zu konfigurieren sein. Wenn Sie Ray zum ersten Mal verwenden, sollten Sie mit Clustern ohne Autoscaling beginnen und die manuelle Skalierungsfunktion verwenden.

Autoscaling

Sie können die Autoscaling-Funktion eines Ray-Clusters aktivieren, indem Sie die minimale (min_replica_count) und maximale (max_replica_count) Anzahl von Replicas für einen Worker-Pool angeben.

Hinweis:

  • Sie müssen die Autoscaling-Spezifikation aller Worker-Pools konfigurieren.
  • min_replica_count muss größer oder gleich 1 sein.
  • Benutzerdefinierte Geschwindigkeit für Upscaling und Downscaling wird nicht unterstützt. Standardwerte finden Sie in der Ray-Dokumentation unter Upscaling- und Downscaling-Geschwindigkeit.

Autoscaling-Spezifikation für Worker-Pool festlegen

Sie können die Google Cloud Console oder das Vertex AI SDK für Python verwenden, um die Funktion zur automatischen Skalierung eines Ray-Clusters zu aktivieren.

Ray on Vertex AI SDK

from google.cloud import aiplatform
import vertex_ray
from vertex_ray import AutoscalingSpec

autoscaling_spec = AutoscalingSpec(
 min_replica_count=1,
 max_replica_count=3,
)

head_node_type = Resources(
 machine_type="n1-standard-16",
 node_count=1,
)

worker_node_types = [Resources(
 machine_type="n1-standard-16",
 accelerator_type="NVIDIA_TESLA_T4",
 accelerator_count=1,
 autoscaling_spec=autoscaling_spec,
)]

# Create the Ray cluster on Vertex AI
CLUSTER_RESOURCE_NAME = vertex_ray.create_ray_cluster(
head_node_type=head_node_type,
worker_node_types=worker_node_types,
...
)

Console

Gemäß der Best Practice für OSS Ray wird die Festlegung der logischen CPU-Anzahl auf 0 auf dem Ray-Hauptknoten erzwungen, um zu vermeiden, dass Arbeitslasten auf dem Hauptknoten ausgeführt werden.

  1. Rufen Sie in der Google Cloud Console die Seite „Ray in Vertex AI“ auf.

    Zur Seite "Ray in Vertex AI"

  2. Klicken Sie auf Cluster erstellen, um den Bereich Cluster erstellen zu öffnen.

  3. Prüfen oder ersetzen Sie für jeden Schritt im Bereich Cluster erstellen die Standardclusterinformationen. Klicken Sie auf Weiter, um die einzelnen Schritte abzuschließen:

    1. Geben Sie unter Name und Region einen Namen an und wählen Sie einen Standort für den Cluster aus.
    2. Geben Sie für Compute-Einstellungen die Konfiguration des Hauptknotens des Ray-Clusters, einschließlich Maschinentyp, Beschleunigertyp und Anzahl, Laufwerkstyp und -größe und Replikatanzahl an. Optional können Sie einen benutzerdefinierten Image-URI hinzufügen, um ein benutzerdefiniertes Container-Image anzugeben, um Python-Abhängigkeiten hinzuzufügen, die nicht vom Standard-Container-Image bereitgestellt werden. Weitere Informationen finden Sie unter Benutzerdefiniertes Bild.

      Unter Erweiterte Optionen haben Sie folgende Möglichkeiten:

      • Geben Sie einen eigenen Verschlüsselungsschlüssel an.
      • Geben Sie ein benutzerdefiniertes Dienstkonto an.
      • Deaktivieren Sie die Erfassung von Messwerten, wenn Sie die Ressourcenstatistiken Ihrer Arbeitslast während des Trainings nicht beobachten müssen.
    3. Wenn Sie einen Cluster mit einem Worker-Pool mit automatischer Skalierung erstellen möchten, geben Sie einen Wert für die maximale Replikatanzahl des Worker-Pools an. autoscaling-compute-settings

  4. Klicken Sie auf Erstellen.

Manuelle Skalierung

Wenn Ihre Arbeitslasten in Ihren Ray-Clustern in Vertex AI zu- oder abnehmen, können Sie die Anzahl der Replikate manuell an den Bedarf anpassen. Wenn Sie beispielsweise überschüssige Kapazität haben, können Sie Ihre Worker-Pools verkleinern, um Kosten zu sparen.

Beschränkungen

Beim Skalieren von Clustern können Sie nur die Anzahl der Replikate in vorhandenen Worker-Pools ändern. Sie können beispielsweise weder Worker-Pools zu Ihrem Cluster hinzufügen, noch aus ihm entfernen, noch den Maschinentyp Ihrer Worker-Pools ändern. Außerdem darf die Anzahl der Replikate für Ihre Worker-Pools nicht unter 1 sein.

Wenn Sie eine VPC-Peering-Verbindung für die Verbindung zu Ihren Clustern verwenden, ist die maximale Knotenanzahl begrenzt. Die maximale Anzahl an Knoten hängt von der Anzahl der Knoten ab, die der Cluster beim Erstellen hatte. Weitere Informationen finden Sie unter Berechnung der maximalen Anzahl an Knoten. Diese maximale Anzahl umfasst nicht nur Ihre Worker-Pools, sondern auch Ihren Head-Knoten. Wenn Sie die Standard-Netzwerkkonfiguration verwenden, darf die Anzahl der Knoten die in der Dokumentation Cluster erstellen vermerkten oberen Grenzwerte nicht überschreiten.

Berechnung der maximalen Anzahl von Knoten

Wenn Sie den Zugriff auf private Dienste (VPC-Peering) nutzen, um eine Verbindung zu Ihren Knoten herzustellen, verwenden Sie folgende Formeln, um zu prüfen, ob Sie die maximale Knotenanzahl (M) nicht überschreiten, wobei f(x) = min(29, (32 - ceiling(log2(x))) vorausgesetzt wird:

  • f(2 * M) = f(2 * N)
  • f(64 * M) = f(64 * N)
  • f(max(32, 16 + M)) = f(max(32, 16 + N))

Die maximale Anzahl von Knoten im Ray on Vertex AI-Cluster, auf die Sie hochskalieren können (M), hängt von der ursprünglichen Gesamtzahl der Knoten ab, die Sie eingerichtet haben (N). Nachdem Sie den Ray on Vertex AI-Cluster erstellt haben, können Sie die Gesamtzahl der Knoten auf eine beliebige Menge zwischen P und M (inklusive) skalieren, wobei P die Anzahl der Pools in Ihrem Cluster ist.

Die anfängliche Gesamtzahl der Knoten im Cluster und die Zielanzahl für die Skalierung müssen sich im selben Farbblock befinden.

number-of-nodes

Anzahl der Replikate aktualisieren

Sie können die Google Cloud Console oder das Vertex AI SDK für Python verwenden, um die Anzahl der Replikate des Worker-Pools zu aktualisieren. Wenn Ihr Cluster mehrere Worker-Pools enthält, können Sie die jeweilige Anzahl der Replikate in einer einzigen Anfrage ändern.

Ray on Vertex AI SDK

import vertexai
import vertex_ray

vertexai.init()
cluster = vertex_ray.get_ray_cluster("CLUSTER_NAME")

# Get the resource name.
cluster_resource_name = cluster.cluster_resource_name

# Create the new worker pools
new_worker_node_types = []
for worker_node_type in cluster.worker_node_types:
 worker_node_type.node_count = REPLICA_COUNT # new worker pool size
 new_worker_node_types.append(worker_node_type)

# Make update call
updated_cluster_resource_name = vertex_ray.update_ray_cluster(
 cluster_resource_name=cluster_resource_name,
 worker_node_types=new_worker_node_types,
)

Console

  1. Rufen Sie in der Google Cloud Console die Seite „Ray in Vertex AI“ auf.

    Zur Seite "Ray in Vertex AI"

  2. Klicken Sie in der Liste der Cluster auf den Cluster, den Sie ändern möchten.

  3. Klicken Sie auf der Seite Clusterdetails auf Cluster bearbeiten.

  4. Wählen Sie im Bereich Cluster bearbeiten den zu aktualisierenden Worker-Pool aus und ändern Sie dann die Anzahl der Replikate.

  5. Klicken Sie auf Aktualisieren.

    Warten Sie einige Minuten, bis der Cluster aktualisiert wurde. Nach Abschluss des Updates sehen Sie die aktualisierte Anzahl der Replikate auf der Seite Clusterdetails.

  6. Klicken Sie auf Erstellen.