Anwendung im Ray-Cluster in Vertex AI entwickeln

Sie können eine Verbindung zu einem Ray-Cluster in Vertex AI herstellen und eine Anwendung mit den folgenden Methoden entwickeln:

  • Stellen Sie mit der Version des Vertex AI SDK für Python, die die Funktionalität des Ray-Clients umfasst, eine Verbindung zum Ray-Cluster in Vertex AI über den Ray-Client her. Verwenden Sie diese Option, wenn Sie eine interaktive Python-Entwicklungsumgebung bevorzugen.

    • Verwenden Sie das Vertex AI SDK für Python im Colab Enterprise-Notebook in der Google Cloud Console.

    • Vertex AI SDK für Python in einer Python-Sitzung, einer Shell oder einem Jupyter-Notebook verwenden.

  • Python-Script schreiben und mithilfe der Ray Jobs API an den Ray-Cluster in Vertex AI senden. Verwenden Sie diese Option, wenn Sie Jobs programmatisch senden möchten.

Bevor Sie beginnen, sollten Sie den Überblick über Ray in Vertex AI lesen und alle erforderlichen Tools einrichten.

Verbindung zu einem Ray-Cluster über den Ray Client herstellen

Stellen Sie eine Verbindung zu Ihrem Ray-Cluster in Vertex AI her, um den interaktiven Ray-Client zu verwenden. Das Netzwerk der Verbindungsumgebung hängt von der Netzwerkkonfiguration des Clusters ab. Es gibt keine Einschränkungen für die Verbindungsumgebung, solange der Cluster öffentlichen Internetzugang hat. Das heißt, dass bei der Clustererstellung kein VPC-Netzwerk angegeben wurde. Befindet sich der Cluster jedoch in einem privaten VPC-Netzwerk, das über Peering mit Vertex AI verbunden ist, muss sich die Verbindungsumgebung im selben VPC-Netzwerk wie der Cluster befinden.

Die Ray-Version auf der Clientseite muss mit der Ray-Version des Clusters übereinstimmen. pip install "google-cloud-aiplatform[ray]" installiert standardmäßig Ray-Version 2.33 auf der Clientseite. Wenn die Ray-Version des Clusters 2.9 ist, müssen Sie pip install ray==2.9.3 verwenden, um die Ray-Version auf der Clientseite mit der Ray-Version des Clusters abzugleichen.

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 in der Zeile für den von Ihnen erstellten Cluster auf In Colab Enterprise öffnen.

  3. Das Colab Enterprise-Notebook wird geöffnet. Folgen Sie der Anleitung, um mit dem Vertex AI SDK für Python eine Verbindung zum Ray-Cluster in Vertex AI herzustellen.

    • Wenn Sie in einem Dialogfeld aufgefordert werden, APIs zu aktivieren, klicken Sie auf Aktivieren.

    • Klicken Sie auf Verbinden, wenn Sie zum ersten Mal eine Verbindung zum Cluster herstellen, oder auf Noch einmal verbinden, wenn Sie noch einmal eine Verbindung zum Cluster herstellen. Das Notebook benötigt einige Minuten, um eine Verbindung zur Laufzeit herzustellen.

    • Klicken Sie auf +Erstellen, um ein neues Notebook zu erstellen.

    • Klicken Sie auf Bereich „Ray on Vertex AI“, um das Feld „Ray in Vertex AI“ zu öffnen.
      Die Anzeige vorhandener Cluster wird angezeigt.

    • Wählen Sie einen Cluster aus und klicken Sie auf VERBINDEN.
      Code wird in Ihrem offenen Notebook angezeigt, der eine Verbindung zum ausgewählten Cluster herstellt.

    • Andere Aktionen (optional): Klicken Sie im Bereich „Ray on Vertex AI“ auf Cluster verwalten, um die Seite mit der Liste der Ray in Vertex AI-Cluster zu öffnen.

      • Wählen Sie einen Cluster aus und klicken Sie auf das Menü Weitere Aktionen.
        Weitere Optionen werden angezeigt:
        Es werden weitere Optionen angezeigt.
    • Führen Sie die Codezelle Erste Schritte aus, um das Vertex AI SDK für Python zu importieren und eine Verbindung zum Ray-Cluster in Vertex AI herzustellen.

Python

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.

In einer interaktiven Python-Umgebung:

import ray

# Necessary even if aiplatform.* symbol is not directly used in your program.
from google.cloud import aiplatform
import vertex_ray

import vertexai
vertexai.init()
# The CLUSTER_RESOURCE_NAME is the one returned from vertex_ray.create_ray_cluster.
CLUSTER_RESOURCE_NAME='projects/{}/locations/{}/persistentResources/{}'.format(PROJECT_ID, LOCATION, CLUSTER_NAME)

ray.init('vertex_ray://{}'.format(CLUSTER_RESOURCE_NAME))

Dabei gilt:

  • LOCATION: Der Standort, den Sie für Ihren Ray-Cluster in Vertex AI angegeben haben.

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

  • CLUSTER_NAME: Der Name des Ray-Clusters in Vertex AI, der beim Erstellen des Clusters angegeben wurde. Rufen Sie die Google Cloud Console auf, um die Liste der Clusternamen für ein Projekt aufzurufen.

Die Ausgabe sollte in etwa so ausssehen:

Python version:  3.10.12
Ray version: 2.33
Vertex SDK version: 1.46.0
Dashboard: xxxx-dot-us-central1.aiplatform-training.googleusercontent.com

Sie können die URL Dashboard verwenden, um über einen Browser auf das Ray-Dashboard zuzugreifen. Der URI hat das Format https://xxxx-dot-us-central1.aiplatform-training.googleusercontent.com/. Im Dashboard werden gesendete Jobs, die Anzahl der GPUs oder CPUs sowie der Speicherplatz jeder Maschine im Cluster angezeigt.

Nachdem Sie eine Verbindung zum Ray-Cluster in Vertex AI hergestellt haben, können Sie ein Ray-Programm genauso wie für ein normales OSS-Ray-Backend entwickeln.

@ray.remote
def square(x):
  print(x)
  return x * x

# Launch four parallel square tasks.
futures = [square.remote(i) for i in range(4)]

print(ray.get(futures))
# Returns [0, 1, 4, 9]

Anwendung mit der Ray Jobs API entwickeln

In diesem Abschnitt wird beschrieben, wie Sie mithilfe der Ray Jobs API ein Python-Programm an den Ray-Cluster in Vertex AI senden.

Python-Script schreiben

Entwickeln Sie Ihre Anwendung als Python-Script in einem beliebigen Texteditor. Fügen Sie das folgende Script beispielsweise in eine my_script.py-Datei ein:

import ray
import time

@ray.remote
def hello_world():
    return "hello world"

@ray.remote
def square(x):
    print(x)
    time.sleep(100)
    return x * x

ray.init()  # No need to specify address="vertex_ray://...."
print(ray.get(hello_world.remote()))
print(ray.get([square.remote(i) for i in range(4)]))

Ray-Job mit der Ray Jobs API senden

Sie können einen Ray-Job mit Python, der Ray Jobs-Befehlszeile oder der öffentlichen Ray-Dashboard-Adresse senden.

Python – Name der Clusterressource

Übergeben Sie einen Ray-Job mit einer Python-Umgebung:

import ray
import vertex_ray
from ray.job_submission import JobSubmissionClient
from google.cloud import aiplatform  # Necessary even if aiplatform.* symbol is not directly used in your program.

CLUSTER_RESOURCE_NAME='projects/{}/locations/REGION/persistentResources/{}'.format(PROJECT_ID, CLUSTER_NAME)

client = JobSubmissionClient("vertex_ray://{}".format(CLUSTER_RESOURCE_NAME))

job_id = client.submit_job(
  # Entrypoint shell command to execute
  entrypoint="python my_script.py",
  # Path to the local directory that contains the my_script.py file.
  runtime_env={
    "working_dir": "./directory-containing-my-script",
    "pip": ["numpy",
            "setuptools<70.0.0",
            "xgboost",
            "ray==CLUSTER_RAY_VERSION", # pin the Ray version to the same version as the cluster
           ]
  }
)

# Ensure that the Ray job has been created.
print(job_id)

Dabei gilt:

  • REGION: Die Region, die Sie für Ihren Ray-Cluster in Vertex AI angegeben haben.

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

  • CLUSTER_NAME: Der Name des Ray-Clusters in Vertex AI, der beim Erstellen des Clusters angegeben wurde. Rufen Sie die Google Cloud Console auf, um die Liste der Clusternamen für ein Projekt aufzurufen.

  • CLUSTER_RAY_VERSION: Die Ray-Version an dieselbe Version wie den Cluster anpinnen. Beispiel: 2.33.0.

Python – Ray-Dashboard

Auf die Adresse des Ray-Dashboards kann von außerhalb der VPC zugegriffen werden, einschließlich des öffentlichen Internets. Beachten Sie, dass vertex_ray erforderlich ist, um die Authentifizierung automatisch abzurufen.

from ray.job_submission import JobSubmissionClient
import vertex_ray

DASHBOARD_ADDRESS=DASHBOARD_ADDRESS

client = JobSubmissionClient(
  "vertex_ray://{}".format(DASHBOARD_ADDRESS),
)

job_id = client.submit_job(
  # Entrypoint shell command to execute
  entrypoint="python my_script.py",
  # Path to the local directory that contains the my_script.py file
  runtime_env={
    "working_dir": "./directory-containing-my-script",
    "pip": ["numpy",
            "setuptools<70.0.0",
            "xgboost",
            "ray==CLUSTER_RAY_VERSION", # pin the Ray version to the same version as the cluster
           ]
  }
)
print(job_id)

Dabei gilt:

DASHBOARD_ADDRESS: Die Ray-Dashboard-Adresse für Ihren Cluster. Sie finden die Dashboard-Adresse mit dem Vertex AI SDK für Python.

Ray Jobs-Befehlszeile

Beachten Sie, dass Sie die Befehle der Ray Jobs-Befehlszeile nur innerhalb des Peering-VPC-Netzwerks verwenden können.

$ ray job submit --working-dir ./ --address vertex_ray://{CLUSTER_RESOURCE_NAME} -- python my_script.py

Unterstützung für VPC-Peering und benutzerdefiniertes Dienstkonto

Ray in Vertex AI unterstützt die Ray Client und die Ray Jobs API (JobSubmissionClient) in einem öffentlichen Netzwerk für Standard-Dienst-Agent- und benutzerdefinierte Dienstkonten.

Die Ray in Vertex AI-Unterstützung für VPC-Peering bei der Erstellung des Ray-Clusters mit dem VPC-Netzwerk ist in dieser Tabelle dargestellt:

VPC-Peering Standard-Dienst-Agent Benutzerdefiniertes Dienstkonto
Ray Client (interaktiver Modus) Ja Nein
Ray JobSubmissionClient Ja Ja

VPC Service Controls (VPC-SC) erfordert zusätzliche Konfigurationen. Weitere Informationen finden Sie unter Private und öffentliche Konnektivität.

Nächste Schritte