מתחברים לאשכול 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 באמצעות 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 נאכפת כדי למנוע הפעלה של עומס עבודה בצומת הראשי.
במסוף Google Cloud , עוברים לדף Ray on Vertex AI.
בשורה של האשכול שיצרתם, לוחצים על פתיחה ב-Colab Enterprise.
ה-notebook של Colab Enterprise ייפתח. פועלים לפי ההוראות לשימוש ב-Vertex AI SDK ל-Python כדי להתחבר לאשכול Ray ב-Vertex AI.
אם מופיע תיבת דו-שיח עם בקשה להפעיל ממשקי API, לוחצים על הפעלה.
אם זו הפעם הראשונה שאתם מתחברים לאשכול, לוחצים על Connect (חיבור). אם אתם מתחברים מחדש לאשכול, לוחצים על Reconnect (חיבור מחדש). יחלפו כמה דקות עד שה-notebook יתחבר ל-Runtime.
לוחצים על +יצירה כדי ליצור מחברת חדשה.
לוחצים על
כדי לפתוח את החלונית Ray on Vertex AI.
יוצגו אשכולות קיימים.בוחרים אשכול ולוחצים על CONNECT (חיבור).
קוד מופיע במחברת הפתוחה שמקושרת לאשכול שבחרתם.פעולות אחרות (אופציונלי): כדי לפתוח את דף רשימת האשכולות של Ray ב-Vertex AI, לוחצים על Manage clusters (ניהול אשכולות) בחלונית Ray ב-Vertex AI.
- בוחרים אשכול ולוחצים על תפריט
more actions.
מופיעות אפשרויות נוספות:

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