במדריך הזה נסביר איך לכוונן מודל Gemma 3 באמצעות מסגרת Ray באשכול GKE מרובה צמתים. האשכול משתמש בשתי מכונות וירטואליות (VM) מסוג A4, שלכל אחת מהן מצורפים שמונה מעבדי GPU מסוג NVIDIA B200.
התוכן של המדריך הזה מחולק לשני חלקים:
- הכנת אשכול Ray על גבי אשכול GKE Autopilot.
- הפעלת משימת אימון מבוזרת, באמצעות 2 מופעי A4, עם 8 יחידות GPU מסוג B200 בכל אחד.
המדריך הזה מיועד למהנדסי למידת מכונה (ML), לחוקרים, לאדמינים ולאופרטורים של פלטפורמות ולמומחי נתונים ו-AI שמתעניינים בהפצת עומס עבודה של AI על פני כמה צמתים ומעבדי GPU.
מטרות
גישה למודל Gemma 3 באמצעות Hugging Face.
מכינים את הסביבה.
יוצרים אשכול GKE Autopilot עם Ray Operator מותקן.
מגדירים את אשכול Ray באשכול GKE כך שיקבל משימות Ray.
הגדרה והרצה של משימת Ray שמכוונת את מודל Gemma 3 על סמך קלט ויזואלי.
עוקבים אחרי עומס העבודה.
לפנות.
עלויות
במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:
כדי להעריך את ההוצאות בהתאם לתחזית השימוש שלכם, אתם יכולים להיעזר במחשבון העלויות.
לפני שמתחילים
- נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים Google Cloud פרויקט.
תפקידים שנדרשים כדי לבחור או ליצור פרויקט
- Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים
-
יוצרים Google Cloud פרויקט:
gcloud projects create PROJECT_ID
מחליפים את
PROJECT_IDבשם של פרויקט Google Cloud שיוצרים. -
בוחרים את הפרויקט שיצרתם: Google Cloud
gcloud config set project PROJECT_ID
מחליפים את
PROJECT_IDבשם הפרויקט ב- Google Cloud .
מפעילים את ממשק ה-API הנדרש:
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, נדרשת ההרשאה
serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין של Service Usage' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידיםgcloud services enable compute.googleapis.com logging.googleapis.com cloudresourcemanager.googleapis.com servicenetworking.googleapis.com container.googleapis.com
-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
כדי לאתחל את ה-CLI של gcloud, הריצו את הפקודה הבאה:
gcloud init -
יוצרים או בוחרים Google Cloud פרויקט.
תפקידים שנדרשים כדי לבחור או ליצור פרויקט
- Select a project: כדי לבחור פרויקט לא צריך תפקיד IAM ספציפי – אפשר לבחור כל פרויקט שקיבלתם בו תפקיד.
-
יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד Project Creator (יצירת פרויקטים) (
roles/resourcemanager.projectCreator), שכולל את ההרשאהresourcemanager.projects.create. איך מקצים תפקידים
-
יוצרים Google Cloud פרויקט:
gcloud projects create PROJECT_ID
מחליפים את
PROJECT_IDבשם של פרויקט Google Cloud שיוצרים. -
בוחרים את הפרויקט שיצרתם: Google Cloud
gcloud config set project PROJECT_ID
מחליפים את
PROJECT_IDבשם הפרויקט ב- Google Cloud .
מפעילים את ממשק ה-API הנדרש:
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, נדרשת ההרשאה
serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין של Service Usage' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידיםgcloud services enable compute.googleapis.com logging.googleapis.com cloudresourcemanager.googleapis.com servicenetworking.googleapis.com container.googleapis.com
-
מעניקים תפקידים לחשבון המשתמש. מריצים את הפקודה הבאה לכל אחד מהתפקידים הבאים ב-IAM:
roles/compute.admin, roles/iam.serviceAccountUser, roles/file.editor, roles/storage.admin, roles/container.clusterAdmin, roles/serviceusage.serviceUsageAdmingcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט. -
USER_IDENTIFIER: המזהה של חשבון המשתמש . לדוגמה,myemail@example.com. -
ROLE: תפקיד ה-IAM שאתם מקצים לחשבון המשתמש.
-
- מפעילים את חשבון השירות שמוגדר כברירת מחדל עבור Google Cloud הפרויקט:
gcloud iam service-accounts enable PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --project=PROJECT_ID
מחליפים את PROJECT_NUMBER במספר הפרויקט. כדי לבדוק את מספר הפרויקט, אפשר לעיין במאמר איך מקבלים פרויקט קיים.
- מקצים את התפקיד 'עריכה' (
roles/editor) לחשבון השירות שמוגדר כברירת מחדל:gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" \ --role=roles/editor
- יצירת פרטי כניסה לאימות מקומי בחשבון המשתמש:
gcloud auth application-default login
- נכנסים לחשבון Hugging Face או יוצרים חשבון.
גישה ל-Gemma 3 באמצעות Hugging Face
כדי להשתמש ב-Hugging Face כדי לגשת ל-Gemma 3:
מעתיקים ושומרים את ערך הטוקן
read access. תשתמשו בו בהמשך המדריך הזה.
הכנת הסביבה
מכינים את הסביבה על ידי הגדרת ההגדרות הנדרשות והגדרת משתני הסביבה.
מריצים את הפקודה הבאה:
מחליפים את מה שכתוב בשדות הבאים:
-
YOUR_PROJECT_ID: השם של Google Cloud הפרויקט שבו רוצים ליצור את אשכול GKE. -
YOUR_RESERVATION_ID: כתובת ה-URL של ההזמנה שבה רוצים להשתמש כדי ליצור את האשכול. בהתאם לפרויקט שבו קיימת ההזמנה, מציינים אחד מהערכים הבאים:- ההזמנה קיימת בפרויקט: מציינים את שם ההזמנה (למשל,
my-reservation). - המקום השמור קיים בפרויקט אחר: מציינים את הנתיב המלא בפורמט
projects/RESERVATION_PROJECT_ID/reservations/RESERVATION_NAME.
- ההזמנה קיימת בפרויקט: מציינים את שם ההזמנה (למשל,
-
YOUR_REGION: האזור שבו רוצים ליצור את אשכול GKE. אפשר ליצור את האשכול רק באזור שבו קיימת ההזמנה. -
YOUR_CLUSTER_NAME: השם של אשכול GKE שרוצים ליצור. -
YOUR_HF_TOKEN: האסימון של Hugging Face שיצרתם בשלב קודם. -
YOUR_RAY_SA: השם של חשבון השירות בתוך אשכול Kubernetes. -
YOUR_GSA_NAME: השם של חשבון השירות של Google. -
YOUR_GCS_BUCKET: השם של הקטגוריה שבה מאחסנים את התוצאות מנקודת הבדיקה של האימון.
יצירת אשכול GKE במצב אוטומטי
כדי ליצור אשכול GKE במצב אוטומטי, מריצים את הפקודה הבאה:
יכול להיות שיעבור קצת זמן עד להשלמת היצירה של אשכול GKE. כדי לוודא ש- Google Cloud סיים ליצור את האשכול, עוברים אל Kubernetes clusters במסוף Google Cloud .
יצירת סוד של Kubernetes לפרטי הכניסה של Hugging Face
כדי ליצור סוד של Kubernetes לפרטי הכניסה של Hugging Face ב-Cloud Shell:
מגדירים את
kubectlכך שיתחבר לאשכול:יוצרים סוד של Kubernetes לאחסון הטוקן של Hugging Face:
יצירת קטגוריה של Cloud Storage
אם רוצים להשתמש בקטגוריה חדשה לאחסון פריטי המידע של האימון, מריצים את הפקודה הבאה:
אם רוצים להשתמש בדלי קיים, אפשר לדלג על השלב הזה. עם זאת, אתם צריכים לוודא שהקטגוריה נמצאת באותו אזור כמו האשכול.
יצירת חשבון שירות ב-IAM
כדי ליצור ב-Cloud Shell חשבון שירות IAM (שנקרא גם חשבון שירות של Google או GSA) ולהעניק לו הרשאות גישה לקטגוריה של Cloud Storage, מבצעים את הפעולות הבאות:
יוצרים חשבון שירות ב-IAM:
מקצים לחשבון השירות שלכם ב-IAM את התפקיד 'אדמין של Storage' (
roles/storage.admin) עבור הקטגוריה שלכם ב-Cloud Storage:
יצירת חשבון שירות של Kubernetes
ב-Cloud Shell, יוצרים חשבון שירות של Kubernetes ומגדירים Workload Identity כדי להעניק לקבוצות Pod של Ray גישה למשאבים: Google Cloud
יוצרים חשבון שירות ב-Kubernetes:
כדי להפעיל את Workload Identity, צריך לקשר את חשבון השירות של Kubernetes לחשבון השירות של IAM שיצרתם קודם:
מוסיפים לחשבון השירות של Kubernetes את כתובת האימייל של חשבון השירות ב-IAM:
שמירת קוד האימון כ-ConfigMap
כדי להימנע מהצורך להטמיע את סקריפט ההדרכה בקובץ אימג' של קונטיינר, אפשר לאחסן אותו כ-ConfigMap באשכול. ה-ConfigMap הזה מותקן במערכות הקבצים של ה-Pod, וכך מאפשר לעדכן את סקריפט האימון בלי ליצור מחדש את כל אשכול Ray.
כדי לאחסן את סקריפט האימון כ-ConfigMap באשכול, מבצעים את השלבים הבאים:
יוצרים ספרייה בשם
code, ובספרייה הזו יוצרים קובץ בשםvision_train.py.מעתיקים את הקוד הבא לקובץ
vision_train.py:שומרים את הקובץ.
יוצרים אובייקט ConfigMap באשכול:
כדי לעדכן את סקריפט האימון, מריצים מחדש את הפקודה הקודמת. יכול להיות שיעבור זמן מה עד שהשינויים יתעדכנו בכל הפודים.
הגדרת אשכול Ray
כדי ליצור אשכול Ray באשכול GKE, שומרים את קובץ ה-YAML הבא כקובץ בשם
ray_cluster.yaml.מחילים את הגדרת ה-YAML הזו על האשכול באמצעות הפקודה הבאה:
הדגל$RESERVATIONמוחלף אוטומטית בשם שהגדרתם כמשתנה סביבה.Ray Operator יוצר את ה-pods של raylet, שבתורם מפעילים את ההתאמה האוטומטית לעומס (autoscaling) של האשכול כדי לספק לאותם pods את הצמתים המתאימים. שלושה פודים נוצרים באשכול: צומת ראש אחד ושני צומתי worker. צמתי העובדים מצוידים במעבדי B200 GPU.
כדי לוודא שכל שלושת ה-pods מוכנים, מריצים את הפקודה הבאה:
רשימת ה-pods של אשכול Ray מוכן נראית בערך כך:NAME READY STATUS RESTARTS AGE gemma3-tuning-gpu-group-worker-s4h8f 2/2 Running 0 16m gemma3-tuning-gpu-group-worker-stg5f 2/2 Running 0 5m34s gemma3-tuning-head-zbdvp 2/2 Running 0 16m
תזמון משימת אימון
שומרים את הקובץ הבא כקובץ
ray_job.yaml:שולחים את הגדרת RayJob אל RayCluster:
בודקים אם יש Pod חדש באשכול:
רושמים בצד את השם המלא של ה-Pod
test-ray-job-שמופיע בפלט. השם הזה ייחודי לעבודה שלכם.בודקים את התקדמות האימון. מחליפים את
gemma-training-ray-job-UNIQUE_IDבשם הייחודי של ה-Pod שרשמתם בשלב הקודם.הפלט שיוצג יהיה דומה לזה:
2025-08-20 08:29:34,966 INFO cli.py:41 -- Job submission server address: http://gemma3-tuning-head-svc.default.svc.cluster.local:8265 2025-08-20 08:29:34,991 SUCC cli.py:65 -- ----------------------------------------------- 2025-08-20 08:29:34,991 SUCC cli.py:66 -- Job 'test-ray-job-82mm7' submitted successfully 2025-08-20 08:29:34,991 SUCC cli.py:67 -- ----------------------------------------------- 2025-08-20 08:29:34,992 INFO cli.py:291 -- Next steps 2025-08-20 08:29:34,992 INFO cli.py:292 -- Query the logs of the job: 2025-08-20 08:29:34,992 INFO cli.py:294 -- ray job logs test-ray-job-82mm7 2025-08-20 08:29:34,992 INFO cli.py:296 -- Query the status of the job: 2025-08-20 08:29:34,992 INFO cli.py:298 -- ray job status test-ray-job-82mm7 2025-08-20 08:29:34,992 INFO cli.py:300 -- Request the job to be stopped: 2025-08-20 08:29:34,992 INFO cli.py:302 -- ray job stop test-ray-job-82mm7 2025-08-20 08:29:35,003 INFO cli.py:312 -- Tailing logs until the job exits (disable with --no-wait): 2025-08-20 08:29:34,982 INFO job_manager.py:531 -- Runtime env is setting up. Starting training task! Commencing training! 2025-08-20 08:30:08,498 INFO worker.py:1606 -- Using address 10.76.0.17:6379 set in the environment variable RAY_ADDRESS 2025-08-20 08:30:08,506 INFO worker.py:1747 -- Connecting to existing Ray cluster at address: 10.76.0.17:6379... 2025-08-20 08:30:08,527 INFO worker.py:1918 -- Connected to Ray cluster. View the dashboard at 10.76.0.17:8265 2025-08-20 08:30:08,701 INFO tune.py:253 -- Initializing Ray automatically. For cluster usage or custom Ray initialization, call `ray.init(...)` before `<FrameworkTrainer>(...)`. 2025-08-20 08:30:08,951 WARNING tune_controller.py:2132 -- The maximum number of pending trials has been automatically set to the number of available cluster CPUs, which is high (519 CPUs/pending trials). If you're running an experiment with a large number of trials, this could lead to scheduling overhead. In this case, consider setting the `TUNE_MAX_PENDING_TRIALS_PG` environment variable to the desired maximum number of concurrent pending trials. 2025-08-20 08:30:08,953 WARNING tune_controller.py:2132 -- The maximum number of pending trials has been automatically set to the number of available cluster CPUs, which is high (519 CPUs/pending trials). If you're running an experiment with a large number of trials, this could lead to scheduling overhead. In this case, consider setting the `TUNE_MAX_PENDING_TRIALS_PG` environment variable to the desired maximum number of concurrent pending trials. View detailed results here: YOUR_GCS_BUCKET/gemma_vision_train_2025_08_20_08_30_07 To visualize your results with TensorBoard, run: `tensorboard --logdir /tmp/ray/session_2025-08-20_04-43-14_215096_1/artifacts/2025-08-20_08-30-08/gemma_vision_train_2025_08_20_08_30_07/driver_artifacts` Training started with configuration: ╭──────────────────────────────────────────────────────────────────────╮ │ Training config │ ├──────────────────────────────────────────────────────────────────────┤ │ train_loop_config/dataset_name ...-descriptions-vlm │ │ train_loop_config/gcs_bucket ...-bucket-yooo-west │ │ train_loop_config/gradient_accumulation_steps 4 │ │ train_loop_config/learning_rate 0.0002 │ │ train_loop_config/logging_steps 10 │ │ train_loop_config/lora_alpha 16 │ │ train_loop_config/lora_dropout 0.05 │ │ train_loop_config/lora_r 16 │ │ train_loop_config/max_seq_length 512 │ │ train_loop_config/model_id google/gemma-3-4b-it │ │ train_loop_config/num_train_epochs 3 │ │ train_loop_config/output_dir ...-4b-seo-optimized │ │ train_loop_config/per_device_train_batch_size 1 │ │ train_loop_config/push_to_hub False │ │ train_loop_config/save_steps 100 │ │ train_loop_config/save_strategy epoch │ ╰──────────────────────────────────────────────────────────────────────╯ (RayTrainWorker pid=45455, ip=10.76.0.71) Setting up process group for: env:// [rank=0, world_size=16] (TorchTrainer pid=45197, ip=10.76.0.71) Started distributed worker processes: (TorchTrainer pid=45197, ip=10.76.0.71) - (node_id=4c934ab2f646a578b03cc335586f30b943e811b645526a74c50bfca1, ip=10.76.0.71, pid=45455) world_rank=0, local_rank=0, node_rank=0 (TorchTrainer pid=45197, ip=10.76.0.71) - (node_id=4c934ab2f646a578b03cc335586f30b943e811b645526a74c50bfca1, ip=10.76.0.71, pid=45450) world_rank=1, local_rank=1, node_rank=0 (TorchTrainer pid=45197, ip=10.76.0.71) - (node_id=4c934ab2f646a578b03cc335586f30b943e811b645526a74c50bfca1, ip=10.76.0.71, pid=45454) world_rank=2, local_rank=2, node_rank=0 (TorchTrainer pid=45197, ip=10.76.0.71) - (node_id=4c934ab2f646a578b03cc335586f30b943e811b645526a74c50bfca1, ip=10.76.0.71, pid=45448) world_rank=3, local_rank=3, node_rank=0 (TorchTrainer pid=45197, ip=10.76.0.71) - (node_id=4c934ab2f646a578b03cc335586f30b943e811b645526a74c50bfca1, ip=10.76.0.71, pid=45453) world_rank=4, local_rank=4, node_rank=0 (TorchTrainer pid=45197, ip=10.76.0.71) - (node_id=4c934ab2f646a578b03cc335586f30b943e811b645526a74c50bfca1, ip=10.76.0.71, pid=45452) world_rank=5, local_rank=5, node_rank=0 (TorchTrainer pid=45197, ip=10.76.0.71) - (node_id=4c934ab2f646a578b03cc335586f30b943e811b645526a74c50bfca1, ip=10.76.0.71, pid=45451) world_rank=6, local_rank=6, node_rank=0 (TorchTrainer pid=45197, ip=10.76.0.71) - (node_id=4c934ab2f646a578b03cc335586f30b943e811b645526a74c50bfca1, ip=10.76.0.71, pid=45449) world_rank=7, local_rank=7, node_rank=0 (TorchTrainer pid=45197, ip=10.76.0.71) - (node_id=c0db52b44f891f3d6a1cedcbea4c6beb2c8434c66ef414dc15e65743, ip=10.76.0.135, pid=45729) world_rank=8, local_rank=0, node_rank=1 (TorchTrainer pid=45197, ip=10.76.0.71) - (node_id=c0db52b44f891f3d6a1cedcbea4c6beb2c8434c66ef414dc15e65743, ip=10.76.0.135, pid=45726) world_rank=9, local_rank=1, node_rank=1 (TorchTrainer pid=45197, ip=10.76.0.71) - (node_id=c0db52b44f891f3d6a1cedcbea4c6beb2c8434c66ef414dc15e65743, ip=10.76.0.135, pid=45728) world_rank=10, local_rank=2, node_rank=1 (TorchTrainer pid=45197, ip=10.76.0.71) - (node_id=c0db52b44f891f3d6a1cedcbea4c6beb2c8434c66ef414dc15e65743, ip=10.76.0.135, pid=45727) world_rank=11, local_rank=3, node_rank=1 (TorchTrainer pid=45197, ip=10.76.0.71) - (node_id=c0db52b44f891f3d6a1cedcbea4c6beb2c8434c66ef414dc15e65743, ip=10.76.0.135, pid=45725) world_rank=12, local_rank=4, node_rank=1 (TorchTrainer pid=45197, ip=10.76.0.71) - (node_id=c0db52b44f891f3d6a1cedcbea4c6beb2c8434c66ef414dc15e65743, ip=10.76.0.135, pid=45724) world_rank=13, local_rank=5, node_rank=1 (TorchTrainer pid=45197, ip=10.76.0.71) - (node_id=c0db52b44f891f3d6a1cedcbea4c6beb2c8434c66ef414dc15e65743, ip=10.76.0.135, pid=45723) world_rank=14, local_rank=6, node_rank=1 (TorchTrainer pid=45197, ip=10.76.0.71) - (node_id=c0db52b44f891f3d6a1cedcbea4c6beb2c8434c66ef414dc15e65743, ip=10.76.0.135, pid=45722) world_rank=15, local_rank=7, node_rank=1 ... Training finished iteration 3 at 2025-08-20 08:40:43. Total running time: 10min 34s ╭─────────────────────────────────────────╮ │ Training result │ ├─────────────────────────────────────────┤ │ checkpoint_dir_name checkpoint_000002 │ │ time_this_iter_s 152.6374 │ │ time_total_s 525.88585 │ │ training_iteration 3 │ │ epoch 2.75294 │ │ grad_norm 47.27161 │ │ learning_rate 0.0002 │ │ loss 22.5275 │ │ mean_token_accuracy 0.90325 │ │ num_tokens 1583017. │ │ step 60 │ ╰─────────────────────────────────────────╯ ... Training completed after 3 iterations at 2025-08-20 08:40:52. Total running time: 10min 43s 2025-08-20 08:40:53,113 INFO tune.py:1009 -- Wrote the latest version of all result files and experiment state to 'YOUR_GCS_BUCKET/gemma_vision_train_2025_08_20_08_30_07' in 0.1663s. 2025-08-20 08:40:58,304 SUCC cli.py:65 -- ---------------------------------- 2025-08-20 08:40:58,305 SUCC cli.py:66 -- Job 'test-ray-job-82mm7' succeeded 2025-08-20 08:40:58,305 SUCC cli.py:67 -- ----------------------------------מעקב אחרי עומס העבודה
אפשר להשתמש בלוח הבקרה ב-Ray כדי לעקוב אחרי עומסי העבודה שמתוזמנים באשכול.
כדי לגשת ללוח הבקרה הזה, צריך להגדיר העברת יציאות לאשכול על ידי הפעלת הפקודה הבאה בחלון טרמינל חדש:
פותחים את הקישור הבא בדפדפן:
http://localhost:8265.אופציונלי: אם אתם משתמשים ב-Cloud Shell, אחרי שמריצים את הפקודה בשלב הקודם, אפשר ללחוץ על הלחצן תצוגה מקדימה באינטרנט.
בוחרים באפשרות שינוי יציאה, מזינים
8265ולוחצים על שינוי ותצוגה מקדימה. לוח הבקרה של Ray ייפתח בכרטיסייה חדשה.
הסרת המשאבים
כדי להימנע מחיובים בחשבון Google Cloud בגלל השימוש במשאבים שנעשה במסגרת המדריך הזה, אפשר למחוק את הפרויקט שמכיל את המשאבים, או להשאיר את הפרויקט ולמחוק את המשאבים בנפרד.
מחיקת המשאבים
כדי למחוק את אשכול Ray ולשחרר את הצומת שמבוסס על GPU, מריצים את הפקודה הבאה:
GKE מקטין את האשכול באופן אוטומטי ומשחרר את מכונות A4 שנעשה בהן שימוש על ידי Ray.כדי למחוק את כל אשכול GKE, מריצים את הפקודה הבאה:
כדי למחוק את כל הקטגוריה של Cloud Storage עם כל התוכן שבה, מריצים את הפקודה הבאה:
מחיקת פרויקט
כדי למחוק פרויקט Google Cloud :
gcloud projects delete PROJECT_ID