פיתוח אפליקציה באשכול Ray ב-Gemini Enterprise Agent Platform

אפשר להתחבר לאשכול Ray ב-Gemini Enterprise Agent Platform ולפתח אפליקציה באמצעות השיטות הבאות:

  • מתחברים לאשכול Ray ב-Gemini Enterprise Agent Platform דרך Ray Client באמצעות הגרסה של Agent Platform SDK for Python שכוללת את הפונקציונליות של Ray Client. האפשרות הזו מתאימה אם אתם מעדיפים סביבת פיתוח אינטראקטיבית של Python.

    • משתמשים ב-Agent Platform SDK for Python ב-notebook של Colab Enterprise במסוף Google Cloud .

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

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

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

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

כדי להשתמש בלקוח האינטראקטיבי של Ray, צריך להתחבר לאשכול Ray ב-Gemini Enterprise Agent Platform. הרשת של סביבת החיבור תלויה בהגדרת הרשת של האשכול. אין הגבלות על סביבת החיבור כל עוד לאשכול יש גישה לאינטרנט הציבורי. כלומר, לא ציינתם רשת VPC במהלך יצירת האשכול. עם זאת, אם האשכול נמצא ברשת VPC פרטית שמבצעת פעולת Peering עם Gemini Enterprise Agent Platform, סביבת החיבור צריכה להיות באותה רשת 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. נכנסים לדף Ray on Agent Platform במסוף Google Cloud .

    כניסה לדף Ray on Agent Platform

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

  3. מחברת Colab Enterprise תיפתח. פועלים לפי ההוראות לשימוש ב-Agent Platform SDK for Python כדי להתחבר לאשכול Ray ב-Gemini Enterprise Agent Platform.

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

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

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

    • לוחצים על החלונית של Ray ב-Agent Platform כדי לפתוח את החלונית Ray on Agent Platform.
      מוצגים אשכולות קיימים.

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

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

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

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 ב-Gemini Enterprise Agent Platform.

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

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

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

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

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

אחרי שמתחברים לאשכול Ray ב-Gemini Enterprise Agent Platform, מפתחים תוכנית Ray באותו אופן שבו מפתחים תוכנית עבור קצה עורפי רגיל של Ray בקוד פתוח.

@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 ב-Gemini Enterprise Agent Platform באמצעות 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 ב-Gemini Enterprise Agent Platform.

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

  • CLUSTER_NAME: השם של אשכול Ray ב-Gemini Enterprise Agent Platform, שצוין כשנוצר האשכול. כדי לראות את רשימת שמות האשכולות בפרויקט, עוברים אל 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 עבור האשכול. אפשר למצוא את כתובת מרכז הבקרה באמצעות Agent Platform 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 on Agent Platform תומך ב-Ray Client וב-Ray Jobs API‏ (JobSubmissionClient) ברשת ציבורית עבור סוכן שירות ברירת מחדל וחשבונות שירות בהתאמה אישית.

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

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

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

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

אם מגדירים NFS mount כשיוצרים את אשכול Ray, אפשר לקרוא ולכתוב את נפחי ה-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 ב-Gemini Enterprise Agent Platform.

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