פיתוח אפליקציה באשכול Ray ב-Vertex AI

אפשר להתחבר לאשכול Ray ב-Vertex AI ולפתח אפליקציה באמצעות השיטות הבאות:

  • מתחברים לאשכול Ray ב-Vertex AI דרך Ray Client באמצעות הגרסה של Vertex AI SDK ל-Python שכוללת את הפונקציונליות של Ray Client. האפשרות הזו מתאימה למי שמעדיף סביבת פיתוח אינטראקטיבית בשפת Python.

    • משתמשים ב-Vertex AI SDK ל-Python בתוך מחברת Colab Enterprise במסוף Google Cloud .

    • משתמשים ב-Vertex AI SDK ל-Python בסשן Python, במעטפת או ב-notebook של Jupyter.

  • כותבים סקריפט Python ושולחים אותו לאשכול Ray ב-Vertex AI באמצעות Ray Jobs API. אם אתם מעדיפים לשלוח משרות באופן אוטומטי, אתם יכולים להשתמש באפשרות הזו.

לפני שמתחילים, חשוב לקרוא את סקירת Ray ב-Vertex AI ולהגדיר את כל הכלים הנדרשים.

התחברות לאשכול Ray באמצעות Ray Client

כדי להשתמש בלקוח האינטראקטיבי של Ray, מתחברים לאשכול Ray ב-Vertex AI. הרשת של סביבת החיבור תלויה בהגדרות הרשת של האשכול. לא חלות הגבלות על סביבת החיבור, כל עוד יש לאשכול גישה לאינטרנט הציבורי. כלומר, לא ציינתם רשת VPC במהלך יצירת האשכול. עם זאת, אם האשכול נמצא ברשת VPC פרטית שמקושרת ל-Vertex AI, סביבת החיבור צריכה להיות באותה רשת VPC כמו האשכול.

גרסת Ray בצד הלקוח צריכה להיות זהה לגרסת Ray באשכול. pip install "google-cloud-aiplatform[ray]" מתקין את Ray בגרסה 2.47 בצד הלקוח כברירת מחדל. אם גרסת Ray של האשכול ישנה יותר, למשל 2.42, צריך להשתמש ב-pip install ray==2.42.0 כדי להתאים את גרסת Ray בצד הלקוח לגרסת Ray באשכול.

המסוף

בהתאם להמלצה של השיטה המומלצת ל-OSS Ray, הגדרת מספר המעבדים הלוגיים ל-0 בצומת הראשי של Ray נאכפת כדי למנוע הפעלה של עומס עבודה בצומת הראשי.

  1. במסוף Google Cloud , עוברים לדף Ray on Vertex AI.

    מעבר לדף בנושא Ray ב-Vertex AI

  2. בשורה של האשכול שיצרתם, לוחצים על פתיחה ב-Colab Enterprise.

  3. ה-notebook של Colab Enterprise ייפתח. פועלים לפי ההוראות לשימוש ב-Vertex AI SDK ל-Python כדי להתחבר לאשכול Ray ב-Vertex AI.

    • אם מופיע תיבת דו-שיח עם בקשה להפעיל ממשקי API, לוחצים על הפעלה.

    • אם זו הפעם הראשונה שאתם מתחברים לאשכול, לוחצים על Connect (חיבור). אם אתם מתחברים מחדש לאשכול, לוחצים על Reconnect (חיבור מחדש). יחלפו כמה דקות עד שה-notebook יתחבר ל-Runtime.

    • לוחצים על +יצירה כדי ליצור מחברת חדשה.

    • לוחצים על החלונית Ray on Vertex AI כדי לפתוח את החלונית Ray on Vertex AI.
      יוצגו אשכולות קיימים.

    • בוחרים אשכול ולוחצים על CONNECT (חיבור).
      קוד מופיע במחברת הפתוחה שמקושרת לאשכול שבחרתם.

    • פעולות אחרות (אופציונלי): כדי לפתוח את דף רשימת האשכולות של Ray ב-Vertex AI, לוחצים על Manage clusters (ניהול אשכולות) בחלונית Ray ב-Vertex AI.

      • בוחרים אשכול ולוחצים על תפריט more actions.
        מופיעות אפשרויות נוספות:
        אפשרויות נוספות
    • מריצים את תא הקוד Getting started כדי לייבא את Vertex AI SDK ל-Python ולהתחבר לאשכול Ray ב-Vertex AI.

Python

בהתאם להמלצה של השיטה המומלצת ל-OSS Ray, הגדרת מספר המעבדים הלוגיים ל-0 בצומת הראשי של Ray נאכפת כדי למנוע הפעלה של עומס עבודה בצומת הראשי.

מסביבת Python אינטראקטיבית:

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

כאשר:

  • LOCATION: המיקום שצוין לאשכול Ray ב-Vertex AI.

  • PROJECT_ID: מזהה הפרויקט ב- Google Cloud . מזהה הפרויקט מופיע בדף welcome במסוף Google Cloud .

  • CLUSTER_NAME: השם של אשכול Ray ב-Vertex AI, שצוין כשיוצרים את האשכול. כדי לראות את רשימת שמות האשכולות בפרויקט, עוברים אל Google Cloud המסוף.

הפלט אמור להיראות כך:

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

אפשר להשתמש בכתובת ה-URL‏ Dashboard כדי לגשת ללוח הבקרה של Ray מדפדפן. ה-URI הוא בפורמט https://xxxx-dot-us-central1.aiplatform-training.googleusercontent.com/. בלוח הבקרה מוצגים המשימות שנשלחו, מספר המעבדים הגרפיים או המעבדים המרכזיים ושטח הדיסק של כל מכונה באשכול.

אחרי שמתחברים לאשכול Ray ב-Vertex AI, מפתחים תוכנת Ray באותו אופן שבו מפתחים אותה עבור קצה עורפי רגיל של Ray ב-OSS.

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

פיתוח אפליקציה באמצעות Ray Jobs API

בקטע הזה מוסבר איך לשלוח תוכנית Python לאשכול Ray ב-Vertex AI באמצעות Ray Jobs API.

כתיבת סקריפט Python

מפתחים את האפליקציה כסקריפט Python בכל כלי לעריכת טקסט. לדוגמה, אפשר להציב את הסקריפט הבא בקובץ 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)]))

שליחת משימת Ray באמצעות Ray Jobs API

שולחים עבודת Ray באמצעות Python,‏ Ray Jobs CLI או כתובת Ray dashboard ציבורית.

Python – שם משאב של אשכול

שליחת משימת Ray באמצעות סביבת 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)

כאשר:

  • REGION: האזור שאתם מציינים לאשכול Ray ב-Vertex AI.

  • PROJECT_ID: מספר הפרויקט ב- Google Cloud . מזהה הפרויקט מופיע בדף welcome במסוף Google Cloud .

  • CLUSTER_NAME: השם של אשכול Ray ב-Vertex AI, שצוין כשיוצרים את האשכול. כדי לראות את רשימת שמות האשכולות בפרויקט, עוברים אל Google Cloud המסוף.

  • CLUSTER_RAY_VERSION: מצמידים את גרסת Ray לאותה גרסה של האשכול. לדוגמה, 2.47.1.

Python - Ray dashboard

אפשר לגשת לכתובת של לוח הבקרה של Ray מחוץ ל-VPC, כולל מהאינטרנט הציבורי. שימו לב: נדרש vertex_ray כדי לקבל אימות באופן אוטומטי.

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)

כאשר:

DASHBOARD_ADDRESS: כתובת מרכז הבקרה של Ray לאשכול. אפשר למצוא את כתובת מרכז הבקרה באמצעות Vertex AI SDK ל-Python.

Ray Jobs CLI

אפשר להשתמש בפקודות של Ray Jobs CLI רק ברשת VPC שנוצרה לה שותפות.

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

אחרי ששולחים משימת Ray ממושכת, אם רוצים לעקוב אחרי סטטוס המשימה באמצעות client.get_job_status(job_id), צריך ליצור מחדש את המופע של JobSubmissionClient(client = JobSubmissionClient("vertex_ray://{}".format(CLUSTER_RESOURCE_NAME)) ) כדי לרענן את טוקן האימות.

תמיכה ב-VPC Peering ובחשבון שירות מותאם אישית

‫Ray ב-Vertex AI תומך ב-Ray Client וב-Ray Jobs API‏ (JobSubmissionClient) ברשת ציבורית עבור סוכן שירות ברירת מחדל וחשבונות שירות בהתאמה אישית.

בטבלה הבאה מוצגת התמיכה ב-Ray ב-Vertex AI בקישור בין רשתות VPC שכנות (peering) כשיוצרים את אשכול Ray עם רשת ה-VPC:

קישור בין רשתות VPC שכנות (peering) סוכן שירות שמוגדר כברירת מחדל חשבון שירות בהתאמה אישית
Ray Client (מצב אינטראקטיבי) כן לא
Ray JobSubmissionClient כן כן

כדי להשתמש ב-VPC Service Controls (VPC-SC) צריך לקבוע הגדרות נוספות. מידע נוסף זמין במאמר בנושא קישוריות פרטית וציבורית.

שימוש ב-Network File System ‏ (NFS) בקוד Ray

אם מגדירים NFS mount כשיוצרים את Ray cluster, אפשר לקרוא ולכתוב את נפחי ה-NFS האלה בקוד האפליקציה.

RayClient

בקטע הזה מוסבר איך להשתמש ב-Network File System ‏ (NFS) בקוד Ray.

  1. אתחול RayClient בסביבת 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. הרצת סקריפט של משימה

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

שולחים משימת Ray באמצעות Python,‏ Ray Jobs CLI או כתובת לוח הבקרה הציבורי של Ray. מידע נוסף זמין במאמר פיתוח אפליקציה באשכול Ray ב-Vertex AI.

המאמרים הבאים