Mengembangkan aplikasi di cluster Ray pada Vertex AI

Anda dapat terhubung ke cluster Ray di Vertex AI dan mengembangkan aplikasi menggunakan metode berikut:

  • Hubungkan ke cluster Ray di Vertex AI menggunakan versi Vertex AI SDK untuk Python yang menyertakan fungsi Ray Client. Gunakan opsi ini jika Anda lebih memilih lingkungan pengembangan Python interaktif.

    • Gunakan Vertex AI SDK untuk Python dalam notebook Colab Enterprise di Konsol Google Cloud.

    • Gunakan Vertex AI SDK untuk Python dalam sesi Python, shell, atau notebook Jupyter.

  • Tulis skrip Python dan kirimkan skrip ke cluster Ray di Vertex AI menggunakan Ray Jobs API. Gunakan opsi ini jika Anda lebih suka mengirimkan tugas secara terprogram.

Sebelum memulai, pastikan untuk membaca ringkasan Ray on Vertex AI dan menyiapkan semua alat prasyarat yang Anda butuhkan.

Mengembangkan aplikasi menggunakan Vertex AI SDK untuk Python

Untuk terhubung ke cluster Ray di Vertex AI menggunakan Vertex AI SDK untuk Python, lingkungan penghubung harus berada di jaringan VPC yang di-peering yang sama.

Konsol

  1. Di Konsol Google Cloud, buka halaman Ray on Vertex AI.

    Buka halaman Ray on Vertex AI

  2. Di baris untuk cluster yang Anda buat, klik Buka di Colab Enterprise.

  3. Notebook Colab Enterprise akan terbuka. Ikuti petunjuk cara menggunakan Vertex AI SDK untuk Python agar dapat terhubung ke cluster Ray di Vertex AI.

    • Jika layar dialog meminta Anda untuk mengaktifkan API, klik Enable.

    • Klik Connect jika Anda terhubung ke cluster untuk pertama kalinya, atau Re-connect jika Anda terhubung kembali ke cluster. Notebook ini memerlukan waktu beberapa menit untuk terhubung ke Runtime.

    • Jalankan sel kode Memulai untuk mengimpor Vertex AI SDK untuk Python dan terhubung ke cluster Ray di Vertex AI.

Python

Dari lingkungan Python interaktif:

import ray

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

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

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

Dengan keterangan:

  • REGION: Region yang Anda tentukan untuk cluster Ray di Vertex AI.

  • PROJECT_ID: ID project Google Cloud Anda. Anda dapat menemukan project ID di halaman welcome Google Cloud Console.

  • CLUSTER_NAME: Nama cluster Ray di Vertex AI, yang ditentukan saat Anda membuat cluster.

Anda akan melihat output yang mirip dengan berikut ini:

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

Anda dapat menggunakan URL Dashboard untuk mengakses dasbor Ray dari browser. URI menggunakan format https://xxxx-dot-us-central1.aiplatform-training.googleusercontent.com/. Dasbor ini menampilkan tugas yang dikirimkan, jumlah GPU atau CPU, dan kapasitas disk setiap mesin di cluster.

Setelah terhubung ke cluster Ray di Vertex AI, Anda dapat mengembangkan program Ray dengan cara yang sama seperti mengembangkan program untuk backend OSS Ray biasa.

@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]

Mengembangkan aplikasi menggunakan Ray Jobs API

Bagian ini menjelaskan cara mengirimkan program Python ke cluster Ray di Vertex AI menggunakan Ray Jobs API.

Menulis skrip Python

Kembangkan aplikasi Anda sebagai skrip Python di editor teks apa pun. Misalnya, tempatkan skrip berikut dalam file my_script.py:

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

Mengirim tugas Ray menggunakan Ray Jobs API

Anda dapat mengirimkan tugas Ray menggunakan Python, Ray Jobs CLI, atau alamat dasbor Ray publik.

Python - nama resource cluster

Dalam jaringan yang di-peering VPC, kirimkan tugas Ray menggunakan lingkungan Python:

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",
            "xgboost",
            "ray==2.9.3", # pin the Ray version to prevent it from being overwritten
           ]
  }
)

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

Dengan keterangan:

  • REGION: Region yang Anda tentukan untuk cluster Ray di Vertex AI.

  • PROJECT_ID: Nomor project Google Cloud Anda. Anda dapat menemukan project ID di halaman welcome Google Cloud Console.

  • CLUSTER_NAME: Nama cluster Ray di Vertex AI, yang ditentukan saat Anda membuat cluster.

Dasbor Python - Ray

Alamat dasbor Ray dapat diakses dari luar VPC, termasuk internet publik. Perhatikan bahwa vertex_ray diperlukan untuk mendapatkan autentikasi secara otomatis.

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",
            "xgboost",
            "ray==2.9.3", # pin the Ray version to prevent it from being overwritten
           ]
  }
)
print(job_id)

Dengan keterangan:

DASHBOARD_ADDRESS: Alamat dasbor Ray untuk cluster Anda. Anda dapat menemukan alamat dasbor menggunakan Vertex AI SDK untuk Python.

CLI Ray Jobs

Perlu diperhatikan bahwa Anda hanya dapat menggunakan perintah CLI Ray Jobs dalam jaringan VPC yang di-peering.

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

Langkah selanjutnya