Ray-Cluster in Vertex AI erstellen

Sie können die Google Cloud Console oder das Vertex AI SDK für Python verwenden, um einen Ray-Cluster zu erstellen. Ein Cluster kann bis zu 2.000 Knoten haben. Es gilt eine Obergrenze von 1.000 Knoten in einem Worker-Pool. Es gibt keine Begrenzung für die Anzahl der Worker-Pools. Eine große Anzahl von Worker-Pools, z. B. 1.000 Worker-Pools mit jeweils einem Knoten, kann jedoch die Clusterleistung beeinträchtigen.

Lesen Sie zuerst die Ray in Vertex AI-Übersicht und richten Sie alle erforderlichen Tools ein.

Nach dem Erstellen eines Ray-Clusters in Vertex AI kann es 10 bis 20 Minuten dauern, bis ein Ray-Cluster gestartet wird.

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 on 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 zum Ausführen der einzelnen Schritte auf Weiter:

    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 in Vertex AI, 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. Damit können Sie Python-Abhängigkeiten hinzufü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. Optional: Wenn Sie für Ihren Cluster einen privaten Endpunkt anstelle eines öffentlichen Endpunkts festlegen möchten, geben Sie ein VPC-Netzwerk an, das mit Ray on Vertex AI verwendet werden soll. Weitere Informationen finden Sie unter Private und öffentliche Verbindungen.

      Wenn Sie für Ihr VPC-Netzwerk keine Verbindung eingerichtet haben, klicken Sie auf Verbindung einrichten. Führen Sie im Feld Erstellen einer Verbindung für den Zugriff auf private Dienste die folgenden Schritte aus und klicken Sie auf Weiter:

      1. Aktivieren Sie die Service Networking API.

      2. Für IP-Bereich zuweisen können Sie einen IP-Bereich auswählen, erstellen oder Google erlauben, einen IP-Bereich automatisch zuzuweisen.

      3. Prüfen Sie unter Verbindung erstellen die Informationen zu Netzwerk und Zugewiesener IP-Bereich.

      4. Klicken Sie auf Verbindung erstellen.

  4. Klicken Sie auf Erstellen.

Ray on Vertex AI SDK

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.

So erstellen Sie in einer interaktiven Python-Umgebung einen Ray-Cluster in Vertex AI:

import ray
import vertex_ray
from google.cloud import aiplatform
from vertex_ray import Resources

# Define a default CPU cluster, machine_type is n1-standard-16, 1 head node and 1 worker node
head_node_type = Resources()
worker_node_types = [Resources()]

# Or define a GPU cluster.
head_node_type = Resources(
  machine_type="n1-standard-16",
  node_count=1,
  custom_image="us-docker.pkg.dev/my-project/ray-custom.2-9.py310:latest",  # Optional. When not specified, a prebuilt image is used.
)

worker_node_types = [Resources(
  machine_type="n1-standard-16",
  node_count=2,  # Must be >= 1
  accelerator_type="NVIDIA_TESLA_T4",
  accelerator_count=1,
  custom_image="us-docker.pkg.dev/my-project/ray-custom.2-9.py310:latest",  # When not specified, a prebuilt image is used.
)]

aiplatform.init()
# Initialize Vertex AI to retrieve projects for downstream operations.
# Create the Ray cluster on Vertex AI
CLUSTER_RESOURCE_NAME = vertex_ray.create_ray_cluster(
  head_node_type=head_node_type,
  network=NETWORK, #Optional
  worker_node_types=worker_node_types,
  python_version="3.10",  # Optional
  ray_version="2.33",  # Optional
  cluster_name=CLUSTER_NAME, # Optional
  service_account=SERVICE_ACCOUNT,  # Optional
  enable_metrics_collection=True,  # Optional. Enable metrics collection for monitoring.
  labels=LABELS,  # Optional.

)

Dabei gilt:

  • CLUSTER_NAME: Ein Name für den Ray-Cluster in Vertex AI, der in Ihrem Projekt eindeutig sein muss.

  • NETWORK: (Optional) Der vollständige Name Ihres VPC-Netzwerks im Format projects/PROJECT_ID/global/networks/VPC_NAME. Wenn Sie einen privaten Endpunkt anstelle eines öffentlichen Endpunkts für Ihren Cluster festlegen möchten, geben Sie ein VPC-Netzwerk an, das mit Ray in Vertex AI verwendet werden soll. Weitere Informationen finden Sie unter Private und öffentliche Verbindungen.

  • VPC_NAME: (Optional) Die VPC, in der die VM ausgeführt wird.

  • PROJECT_ID: Ihre Google Cloud-Projekt-ID. Sie finden die Projekt-ID auf der Begrüßungsseite der Google Cloud Console.

  • SERVICE_ACCOUNT: (Optional) Das Dienstkonto zum Ausführen von Ray-Anwendungen im Cluster. Erforderliche Rollen müssen gewährt werden.

  • LABELS: (Optional) Die Labels mit benutzerdefinierten Metadaten, mit denen Ray-Cluster organisiert werden. Labelschlüssel und -werte dürfen maximal 64 Zeichen (Unicode-Codepunkte) haben und dürfen nur Kleinbuchstaben, Ziffern, Unterstriche und Bindestriche enthalten. Internationale Zeichen sind zulässig. Weitere Informationen und Beispiele für Labels finden Sie unter https://goo.gl/xmQnxf.

Sie sollten die folgende Ausgabe sehen, bis sich der Status in RUNNING ändert:

[Ray on Vertex AI]: Cluster State = State.PROVISIONING
Waiting for cluster provisioning; attempt 1; sleeping for 0:02:30 seconds
...
[Ray on Vertex AI]: Cluster State = State.RUNNING

Bitte beachten Sie dabei Folgendes:

  • Der erste Knoten wird als Hauptknoten verwendet.

  • TPU-Maschinentypen werden nicht unterstützt.

Verwaltung des Lebenszyklus

Während des Lebenszyklus eines Ray-Clusters in Vertex AI wird jeder Aktion ein Status zugewiesen. In der folgenden Tabelle sind der Abrechnungsstatus und die Verwaltungsoption für jeden Status zusammengefasst. In der Referenzdokumentation finden Sie eine Definition für jeden dieser Status.

Aktion Status In Rechnung gestellt? Ist die Aktion „Löschen“ verfügbar? Ist die Aktion „Abbrechen“ verfügbar?
Der Nutzer erstellt einen Cluster BEREITSTELLUNG Nein Nein Nein
Der Nutzer skaliert manuell nach oben oder unten WIRD AKTUALISIERT Ja, entsprechend der Größe in Echtzeit Ja Nein
Der Cluster wird ausgeführt WIRD AUSGEFÜHRT Ja Ja Nicht zutreffend – Sie können löschen
Der Cluster wird durch Autoscaling hoch- oder herunterskaliert WIRD AKTUALISIERT Ja, entsprechend der Größe in Echtzeit Ja Nein
Der Nutzer löscht den Cluster WIRD BEENDET Nein Nein Nicht zutreffend – wird bereits angehalten
Der Cluster befindet sich im Fehlerstatus FEHLER Nein Ja Nicht zutreffend – Sie können löschen
Nicht zutreffend STATE_UNSPECIFIED Nein Ja Nicht zutreffend

Benutzerdefiniertes Image (optional)

Vordefinierte Images sind für die meisten Anwendungsfälle geeignet. Wenn Sie ein eigenes Image erstellen möchten, empfehlen wir, die vordefinierten Ray in Vertex-Images als Basis-Image zu verwenden. In der Docker-Dokumentation erfahren Sie, wie Sie Ihre Images aus einem Basis-Image erstellen.

Diese Basis-Images enthalten eine Installation von Python, Ubuntu und Ray. Sie enthalten auch Abhängigkeiten wie:

  • python-json-logger
  • google-cloud-resource-manager
  • ca-certificates-jav
  • libatlas-base-dev
  • liblapack-dev
  • g++, libio-all-perl
  • libyaml-0-2.
  • rsync

Wenn Sie Ihr eigenes Image ohne unser Basis-Image erstellen möchten (fortgeschrittene Nutzer), muss es Folgendes enthalten:

  • Ray 2.33.0 oder 2.9.3
  • Python 3.10
  • python-json-logger==2.0.7

Private und öffentliche Verbindungen

Standardmäßig erstellt Ray in Vertex AI einen öffentlichen, sicheren Endpunkt für die interaktive Entwicklung mit dem Ray-Client auf Ray-Clustern in Vertex AI. Es wird empfohlen, öffentliche Verbindungen für Entwicklung oder sitzungsspezifische Anwendungsfälle zu verwenden. Dieser öffentliche Endpunkt ist über das Internet zugänglich. Nur autorisierte Nutzer, die mindestens die Berechtigungen für Vertex AI-Nutzerrollen für das Nutzerprojekt des Ray-Clusters haben, können auf den Cluster zugreifen.

Wenn Sie eine private Verbindung zu Ihrem Cluster benötigen oder VPC Service Controls verwenden, wird VPC-Peering für Ray-Cluster in Vertex AI unterstützt. Cluster mit einem privaten Endpunkt sind nur über einen Client in einem VPC-Netzwerk zugänglich, das per Peering mit Vertex AI verbunden ist.

Wählen Sie beim Erstellen des Clusters ein VPC-Netzwerk aus, um eine private Verbindung mit VPC-Peering für Ray in Vertex AI einzurichten. Das VPC-Netzwerk erfordert eine private Dienstverbindung zwischen Ihrem VPC-Netzwerk und Vertex AI. Wenn Sie Ray on Vertex AI in der Console verwenden, können Sie Ihre Verbindung für den Zugriff auf private Dienste einrichten, während Sie den Cluster erstellen.

Wenn Sie VPC Service Controls und VPC-Peering mit Ray-Clustern in Vertex AI verwenden möchten, ist eine zusätzliche Einrichtung erforderlich, um das Ray-Dashboard und die interaktive Shell zu verwenden. Folgen Sie der Anleitung unter Ray-Dashboard und interaktive Shell mit VPC-SC + VPC-Peering, um die interaktive Shell-Einrichtung mit VPC-SC und VPC-Peering in Ihrem Nutzerprojekt zu konfigurieren.

Nachdem Sie Ihren Ray-Cluster in Vertex AI erstellt haben, können Sie mit dem Vertex AI SDK für Python eine Verbindung zum Head-Knoten herstellen. Die Verbindungsumgebung, z. B. eine Compute Engine-VM oder Vertex AI Workbench-Instanz, muss sich in dem VPC-Netzwerk befinden, das über Peering mit Vertex AI verbunden ist. Beachten Sie, dass eine private Dienstverbindung eine begrenzte Anzahl an IP-Adressen hat, was zu einer Ausschöpfung der IP-Adressen führen kann. Daher wird für langlebige Cluster die Verwendung privater Verbindungen empfohlen.

Ray-Dashboard und interaktive Shell mit VPC-SC + VPC-Peering

  1. Konfigurieren Sie peered-dns-domains.

    {
      VPC_NAME=NETWORK_NAME
      REGION=LOCATION
      gcloud services peered-dns-domains create training-cloud \
      --network=$VPC_NAME \
      --dns-suffix=$REGION.aiplatform-training.cloud.google.com.
    
      # Verify
      gcloud beta services peered-dns-domains list --network $VPC_NAME);
    }
        
    • NETWORK_NAME: Zu einem Peering-Netzwerk wechseln.

    • LOCATION: Gewünschter Standort (z. B. us-central1)

  2. Konfigurieren Sie DNS managed zone.

    {
      PROJECT_ID=PROJECT_ID
      ZONE_NAME=$PROJECT_ID-aiplatform-training-cloud-google-com
      DNS_NAME=aiplatform-training.cloud.google.com
      DESCRIPTION=aiplatform-training.cloud.google.com
    
      gcloud dns managed-zones create $ZONE_NAME  \
      --visibility=private  \
      --networks=https://www.googleapis.com/compute/v1/projects/$PROJECT_ID/global/networks/$VPC_NAME  \
      --dns-name=$DNS_NAME  \
      --description="Training $DESCRIPTION"
    }
        
    • PROJECT_ID ist die Projekt-ID. Sie finden die Projekt-IDs auf der Begrüßungsseite der Google Cloud Console.

  3. DNS-Transaktion aufzeichnen.

    {
      gcloud dns record-sets transaction start --zone=$ZONE_NAME
    
      gcloud dns record-sets transaction add \
      --name=$DNS_NAME. \
      --type=A 199.36.153.4 199.36.153.5 199.36.153.6 199.36.153.7 \
      --zone=$ZONE_NAME \
      --ttl=300
    
      gcloud dns record-sets transaction add \
      --name=*.$DNS_NAME. \
      --type=CNAME $DNS_NAME. \
      --zone=$ZONE_NAME \
      --ttl=300
    
      gcloud dns record-sets transaction execute --zone=$ZONE_NAME
    }
        
  4. Reichen Sie einen Trainingsjob mit aktivierter interaktiver Shell, VPC-SC und VPC-Peering ein.

Nächste Schritte