Mengembangkan aplikasi di cluster Ray di Vertex AI

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

  • Terhubung ke cluster Ray di Vertex AI melalui Ray Client 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 tersebut 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.

Menghubungkan ke cluster Ray melalui Ray Client

Untuk menggunakan Ray Client interaktif, hubungkan ke cluster Ray di Vertex AI. Jaringan lingkungan yang terhubung bergantung pada konfigurasi jaringan cluster. Tidak ada batasan pada lingkungan koneksi selama cluster memiliki akses internet publik. Artinya, jaringan VPC tidak ditentukan selama pembuatan cluster. Namun, jika cluster berada di jaringan VPC pribadi yang di-peering dengan Vertex AI, lingkungan yang terhubung harus berada di jaringan VPC yang sama dengan cluster.

Versi Ray di sisi klien harus cocok dengan versi Ray cluster. pip install "google-cloud-aiplatform[ray]" menginstal Ray versi 2.33 di sisi klien secara default. Jika versi Ray cluster adalah 2.9, Anda harus menggunakan pip install ray==2.9.3 untuk mencocokkan versi Ray sisi klien dengan versi Ray cluster.

Konsol

Sesuai dengan rekomendasi praktik terbaik OSS Ray, menetapkan jumlah CPU logis ke 0 di node head Ray diterapkan untuk menghindari menjalankan beban kerja apa pun di node head.

  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 tentang cara menggunakan Vertex AI SDK untuk Python guna 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.

    • Klik +CREATE untuk membuat notebook baru.

    • Klik Panel Ray on Vertex AI untuk membuka panel Ray on Vertex AI.
      Tampilan cluster yang ada akan muncul.

    • Pilih cluster, lalu klik CONNECT.
      Kode akan muncul di notebook terbuka yang terhubung ke cluster yang Anda pilih.

    • Tindakan lainnya (Opsional): Untuk membuka halaman daftar cluster Ray on Vertex AI, klik Kelola cluster di panel Ray on Vertex AI.

      • Pilih cluster, lalu klik menu more actions.
        Opsi lainnya akan muncul:
        opsi lainnya akan muncul
    • Jalankan sel kode Memulai untuk mengimpor Vertex AI SDK untuk Python dan terhubung ke cluster Ray di Vertex AI.

Python

Sesuai dengan rekomendasi praktik terbaik OSS Ray, menetapkan jumlah CPU logis ke 0 di node head Ray diterapkan untuk menghindari menjalankan beban kerja apa pun di node head.

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

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

Dengan keterangan:

  • LOCATION: Lokasi yang Anda tentukan untuk cluster Ray di Vertex AI.

  • PROJECT_ID: ID project Google Cloud Anda. Anda dapat menemukan project ID di halaman sambutan Konsol Google Cloud.

  • CLUSTER_NAME: Nama cluster Ray on Vertex AI, yang ditentukan saat Anda membuat cluster. Buka konsol Google Cloud untuk melihat daftar nama cluster untuk project.

Anda akan melihat output yang mirip dengan berikut ini:

Python version:  3.10.12
Ray version: 2.33
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 mengembangkannya 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

Kirim 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",
            "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)

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 sambutan Konsol Google Cloud.

  • CLUSTER_NAME: Nama cluster Ray on Vertex AI, yang ditentukan saat Anda membuat cluster. Buka konsol Google Cloud untuk melihat daftar nama cluster untuk project.

  • CLUSTER_RAY_VERSION: Sematkan versi Ray ke versi yang sama dengan cluster. Misalnya, 2.33.0.

Python - Dasbor 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",
            "setuptools<70.0.0",
            "xgboost",
            "ray==CLUSTER_RAY_VERSION", # pin the Ray version to the same version as the cluster
           ]
  }
)
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

Setelah mengirimkan Tugas Ray yang berjalan lama, jika ingin memantau status tugas menggunakan client.get_job_status(job_id), Anda mungkin harus membuat instance ulang JobSubmissionClient(client = JobSubmissionClient("vertex_ray://{}".format(CLUSTER_RESOURCE_NAME)) ) untuk memuat ulang token autentikasi.

Dukungan untuk peering VPC dan akun layanan kustom

Ray on Vertex AI mendukung Ray Client dan Ray Jobs API (JobSubmissionClient) di jaringan publik untuk agen layanan default dan akun layanan kustom.

Dukungan Ray on Vertex AI untuk peering VPC, saat cluster Ray dibuat dengan jaringan VPC, ditampilkan dalam tabel ini:

Peering VPC Agen layanan default Akun layanan kustom
Ray Client (mode interaktif) Ya Tidak
Ray JobSubmissionClient Ya Ya

Kontrol Layanan VPC (VPC-SC) memerlukan konfigurasi tambahan. Lihat Konektivitas pribadi dan publik untuk mengetahui detail selengkapnya.

Menggunakan Network File System (NFS) dalam Kode Ray

Jika menetapkan mount NFS saat membuat cluster Ray, Anda dapat membaca dan menulis volume NFS tersebut dalam kode aplikasi.

RayClient

Bagian ini menunjukkan cara menggunakan Network File System (NFS) dalam kode Ray Anda.

  1. Melakukan inisialisasi RayClient di lingkungan Python

    import ray
    from google.cloud import aiplatform
    import vertex_ray
    aiplatform.init(project=PROJECT_ID, location=REGION)
    ray.init(address='vertex_ray://projects/{}/locations/us-central1/persistentResources/{}'.format(PROJECT_NUMBER, PERSISTENT_RESOURCE_ID))
  2. Menjalankan skrip tugas

    import ray
    import logging
    import os
    import sys
    
    @ray.remote
    def main():
    logging.info("list all files in mounted folder")
    return os.listdir("/mnt/nfs/test")
    
    print(''.join(ray.get(main.remote())))

Anda dapat mengirimkan tugas Ray menggunakan Python, Ray Jobs CLI, atau alamat dasbor Ray publik. Untuk mengetahui informasi selengkapnya, lihat Mengembangkan aplikasi di cluster Ray di Vertex AI).

Langkah selanjutnya