הפעלת עומס עבודה של אצווה קטנה באמצעות מעבדי TPU ומכונות וירטואליות עם Flex-start

במדריך הזה מוסבר איך להשתמש במכונות וירטואליות עם הפעלה גמישה כדי לייעל את הקצאת ה-TPU לעומסי עבודה של אימון בקנה מידה בינוני וקטן. מכונות וירטואליות מסוג Flex-start נוצרות באמצעות אפשרות הצריכה flex-start. במדריך הזה תשתמשו במכונות וירטואליות עם הפעלה גמישה כדי לפרוס עומס עבודה שמורכב ממאגר צמתים של פרוסת TPU.

המדריך הזה מיועד למהנדסי למידת מכונה (ML), לאדמינים ולאופרטורים של פלטפורמות ולמומחים בתחום הנתונים וה-AI שרוצים להשתמש ביכולות של Kubernetes לניהול קונטיינרים כדי להריץ עומסי עבודה של אצווה. מידע נוסף על תפקידים נפוצים ועל משימות לדוגמה שאנחנו מתייחסים אליהן ב Google Cloud תוכן, זמין במאמר תפקידי משתמשים נפוצים ומשימות ב-GKE.

תמחור Flex-start

מומלץ להשתמש ב-Flex-start אם נפח העבודה שלכם מחייב הקצאה דינמית של משאבים לפי הצורך, למשך עד שבעה ימים עם הזמנות לטווח קצר, ללא ניהול מורכב של מכסות וגישה חסכונית. התכונה 'התחלה גמישה' מבוססת על Dynamic Workload Scheduler והחיוב מתבצע לפי התמחור של Dynamic Workload Scheduler:

  • הנחה (עד 53%) על vCPU,‏ GPU ו-TPU.
  • אתם משלמים לפי השימוש.

לפני שמתחילים

לפני שמתחילים, חשוב לוודא שביצעתם את הפעולות הבאות:

  • מפעילים את ממשק Google Kubernetes Engine API.
  • הפעלת Google Kubernetes Engine API
  • אם רוצים להשתמש ב-CLI של Google Cloud למשימה הזו, צריך להתקין ואז להפעיל את ה-CLI של gcloud. אם התקנתם בעבר את ה-CLI של gcloud, מריצים את הפקודה gcloud components update כדי לקבל את הגרסה העדכנית. יכול להיות שגרסאות קודמות של ה-CLI של gcloud לא יתמכו בהרצת הפקודות שמופיעות במסמך הזה.

יצירת מאגר צמתים עם flex-start

אם אתם משתמשים באשכול במצב Autopilot, דלגו על הקטע הזה ועברו לקטע הפעלת עומס עבודה של אצווה.

כדי ליצור מאגר צמתים עם הפעלה גמישה באשכול קיים מסוג Standard, משתמשים ב-CLI של gcloud.

יצירת מאגר צמתים של פלח TPU עם מארח יחיד

אפשר ליצור מאגר צמתים של TPU slice עם מארח יחיד באמצעות התחלה גמישה (Flex-start):

  1. יוצרים מאגר צמתים עם flex-start:

    gcloud container node-pools create NODE_POOL_NAME \
        --cluster=CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --node-locations=NODE_ZONES \
        --machine-type=MACHINE_TYPE \
        --reservation-affinity=none \
        --enable-autoscaling \
        --flex-start \
        --num-nodes 0 \
        --min-nodes=0 \
        --max-nodes=1 \
        --consolidation-delay=CONSOLIDATION_DELAY
    

    מחליפים את מה שכתוב בשדות הבאים:

    • NODE_POOL_NAME: השם שבחרתם למאגר הצמתים.
    • CLUSTER_NAME: שם האשכול.
    • CONTROL_PLANE_LOCATION: האזור של שירותי Compute למישור הבקרה של האשכול.
    • NODE_ZONES: רשימה מופרדת בפסיקים של אזור אחד או יותר שבהם GKE יוצר את מאגר הצמתים.
    • CONSOLIDATION_DELAY: אופציונלי. משך הזמן שבו Cluster Autoscaler ממתין לפני שהוא יכול להקטין את מספר הצמתים שלא נעשה בהם שימוש מלא. ההגדרה הזו מאפשרת להשהות את הקטנת הקיבולת ולשמור את מאגר הצמתים לשימוש חוזר מאוחר יותר על ידי Pods אחרים. המספר שאתם מזינים חייב להסתיים ב-s. לדוגמה, כדי לציין שעה אחת, מזינים 3600s. זמין ב-GKE מגרסה 1.34.1-gke.2364000 ואילך.
    • MACHINE_TYPE: סוג המכונה לשימוש בצמתים. מידע נוסף על סוגי מכונות שתואמים ל-TPU זמין בטבלה שבמאמר בחירת גרסת ה-TPU.

      לדוגמה, הפקודה ליצירת מאגר הצמתים יכולה לכלול את הפרמטרים הבאים:

      ...
      --machine-type=ct6e-standard-4t \
      --tpu-topology=4x4 \
      --enable-autoscaling \
      --num-nodes=0 \
      --max-nodes=4 \
      

      הפקודה הזו מגדירה את השדה --max-nodes ל-4 כי טופולוגיה של 4x4 מורכבת מ-16 שבבים, ולכל מכונת VM מסוג ct6e-standard-4t יש 4 שבבים.

      התאמה אוטומטית לעומס באשכול מגדילה את מספר הצמתים עד למספר שנדרש לעומס העבודה. אחרי שהעומס יסתיים, התוסף לאוטומטי של שינוי גודל האשכול יקטין את האשכול לאפס צמתים.

    • --reservation-affinity=none: בשיטת התשלום 'תשלום גמיש בתחילת החודש' לא משתמשים בהזמנות ולא נדרשות הזמנות.

יצירת מאגר צמתים של פרוסת TPU עם כמה מארחים

השלבים ליצירת מאגר צמתים של פרוסת TPU עם כמה מארחים שונים, בהתאם לגרסת ה-TPU שבה אתם משתמשים: Ironwood‏ (TPU7x) או גרסה קודמת של TPU.

‫Ironwood ‏ (TPU7x)

אפשר ליצור מאגר צמתים של פרוסת TPU מרובת-מארחים בגרסה Ironwood‏ (TPU7x) באמצעות Google Cloud CLI או Terraform:

gcloud

כדי ליצור מאגר צמתים של פרוסת TPU עם כמה מארחים באמצעות Ironwood‏ (TPU7x), צריך קודם ליצור מדיניות עומס עבודה.

  1. יוצרים מדיניות של עומס עבודה:

    gcloud compute resource-policies create workload-policy WORKLOAD_POLICY_NAME \
        --type=HIGH_THROUGHPUT \
        --accelerator-topology=TPU_TOPOLOGY \
        --project=PROJECT_ID \
        --region=REGION
    

    מחליפים את מה שכתוב בשדות הבאים:

    • WORKLOAD_POLICY_NAME: שם למדיניות של עומס העבודה.
    • TPU_TOPOLOGY: הטופולוגיה של TPU Ironwood‏ (TPU7x). לדוגמה, 2x2x2. כדי לראות את כל הטופולוגיות הנתמכות של Ironwood ‏ (TPU7x), אפשר לעיין בקטע על טופולוגיה.
    • PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
    • REGION: האזור של מדיניות עומס העבודה. מדיניות עומס עבודה היא משאב אזורי, ואפשר לעשות בה שימוש חוזר במאגרי צמתים שחולקים את אותה טופולוגיה.
  2. יוצרים את מאגר הצמתים עם מדיניות עומס העבודה:

    gcloud container node-pools create NODE_POOL_NAME \
        --cluster=CLUSTER_NAME \
        --location=us-central1 \
        --node-locations=us-central1-c \
        --machine-type=tpu7x-standard-4t \
        --reservation-affinity=none \
        --enable-autoscaling \
        --num-nodes=0 --min-nodes=0 --max-nodes=MAX_NODES \
        --flex-start \
        --placement-policy=WORKLOAD_POLICY \
        --consolidation-delay=CONSOLIDATION_DELAY
    

    מחליפים את מה שכתוב בשדות הבאים:

    • NODE_POOL_NAME: השם של מאגר הצמתים החדש.
    • WORKLOAD_POLICY: השם של מדיניות עומס העבודה שיצרתם.
    • MAX_NODES: הגודל המקסימלי של מאגר הצמתים. חובה להשתמש בדגל --max-nodes אם מציינים את --enable-autoscaling, והוא חייב להיות שווה למכפלה של הערכים שמוגדרים ב-TPU_TOPOLOGY ({A}x{B}x{C}) חלקי מספר השבבים בכל מכונה וירטואלית. לדוגמה, אם הערך של TPU_TOPOLOGY הוא 2x2x2, המוצר הוא 8. מכיוון שלכל מכונה וירטואלית ב-tpu7x-standard-4t יש 4 שבבים, מספר הצמתים הוא 2.
    • CONSOLIDATION_DELAY: אופציונלי. משך הזמן שבו Cluster Autoscaler ממתין לפני שהוא יכול להקטין את מספר הצמתים שלא נעשה בהם שימוש מלא. ההגדרה הזו מאפשרת להשהות את הקטנת הקיבולת ולשמור את מאגר הצמתים לשימוש חוזר מאוחר יותר על ידי Pods אחרים. המספר שאתם מזינים חייב להסתיים ב-s. לדוגמה, כדי לציין שעה אחת, מזינים 3600s. זמין ב-GKE מגרסה 1.34.1-gke.2364000 ואילך.

    הפקודה הזו יוצרת מאגר צמתים בשם NODE_POOL_NAME עם המאפיינים הבאים:

    • --machine-type=tpu7x-standard-4t מציין את סוג המכונה Ironwood ‏ (TPU7x).
    • --flex-start מאפשרת התחלה גמישה (Flex-start).

Terraform

  1. חשוב לוודא שאתם משתמשים בגרסה 4.84.0 ואילך של ספק google.
  2. יוצרים מדיניות של עומס עבודה:

    resource "google_compute_resource_policy" {
      name   = "WORKLOAD_POLICY_NAME"
      region = CLUSTER_LOCATION
      workload_policy {
        type = "HIGH_THROUGHPUT"
        accelerator_topology = "TPU_TOPOLOGY"
      }
    }
    

    מחליפים את מה שכתוב בשדות הבאים:

    • WORKLOAD_POLICY_NAME: שם למדיניות של עומס העבודה.
    • CLUSTER_LOCATION: מיקום החישוב של האשכול. מומלץ להשתמש באשכול אזורי כדי לשפר את המהימנות של מישור הבקרה של Kubernetes. אפשר גם להשתמש באשכול אזורי. מידע נוסף זמין במאמר בחירת גרסה וטופולוגיה של TPU.
    • TPU_TOPOLOGY: הטופולוגיה של TPU Ironwood‏ (TPU7x). לדוגמה, 2x2x2. כדי לראות את כל הטופולוגיות הנתמכות של Ironwood‏ (TPU7x), אפשר לעיין במאמר בנושא תכנון של יחידות TPU.

    מידע נוסף על ההפניה google_compute_resource_policy זמין במאמר Terraform Provider.

  3. מוסיפים את הבלוק הבא להגדרות של Terraform:

    resource "google_container_node_pool" "NODE_POOL_RESOURCE_NAME" {
      provider           = google
      project            = PROJECT_ID
      cluster            = CLUSTER_NAME
      name               = POOL_NAME
      location           = CLUSTER_LOCATION
      node_locations     = [NODE_ZONES]
      initial_node_count = NUM_NODES
    
      autoscaling {
        max_node_count = MAX_NODES
        location_policy      = "ANY"
      }
      node_config {
        machine_type = MACHINE_TYPE
        reservation_affinity {
          consume_reservation_type = "NO_RESERVATION"
        }
        flex_start = true
      }
    
      placement_policy {
        policy_name = WORKLOAD_POLICY_NAME
      }
    }
    

    מחליפים את מה שכתוב בשדות הבאים:

    • NODE_POOL_RESOURCE_NAME: השם של משאב מאגר הצמתים בתבנית Terraform.
    • PROJECT_ID: מזהה הפרויקט.
    • CLUSTER_NAME: השם של האשכול הקיים שאליו רוצים להוסיף את מאגר הצמתים.
    • POOL_NAME: השם של מאגר הצמתים שרוצים ליצור.
    • NODE_ZONES: רשימה מופרדת בפסיקים של אזור אחד או יותר שבהם GKE יוצר את מאגר הצמתים.

      אופציונלי: אפשר להשתמש באזור AI, כמו us-central1-ai1a. אזורי AI הם מיקומים ייעודיים שעברו אופטימיזציה לעומסי עבודה של AI/ML בתוך Google Cloud אזורים.

    • NUM_NODES: מספר הצמתים במאגר הצמתים. הערך צריך להיות אפס או מכפלה של מספר שבבי ה-TPU חלקי ארבע, כי בכל צומת של פרוסת TPU עם כמה מארחים יש ארבעה שבבים. לדוגמה, אם TPU_TOPOLOGY הוא 4x8, יש 32 צ'יפים, ולכן NUM_NODES צריך להיות 8. מידע נוסף על טופולוגיות של TPU זמין בטבלה שבמאמר בחירת גרסת ה-TPU.
    • TPU_TOPOLOGY: מציין את הטופולוגיה הפיזית שנבחרה עבור פרוסת ה-TPU. הפורמט של הטופולוגיה תלוי בגרסת ה-TPU שבה אתם משתמשים. למידע נוסף על טופולוגיות של TPU, אפשר לעיין בטבלה שבמאמר בחירת טופולוגיה.

    אפשר גם להשתמש במשתנים הבאים:

    • RESERVATION_NAME: אם משתמשים בהזמנת TPU, צריך לספק רשימה של תוויות משאבי הזמנה לשימוש כשיוצרים את מאגר הצמתים. מידע נוסף על אכלוס השדה RESERVATION_LABEL_VALUES ב-reservation_affinity זמין במאמר בנושא Terraform Provider.
    • autoscaling: יצירת מאגר צמתים עם הפעלה של שינוי גודל אוטומטי. כש-GKE משנה את גודל המאגר של צומתי TPU עם כמה מארחים, הוא משנה את גודל מאגר הצמתים מאפס לגודל המקסימלי באופן אטומי.
      • MAX_NODES: הגודל המקסימלי של מאגר הצמתים. הערך צריך להיות שווה למכפלה של הערכים שמוגדרים ב-TPU_TOPOLOGY ({A}x{B}x{C}) חלקי מספר השבבים בכל מכונה וירטואלית. לדוגמה, אם הערך של TPU_TOPOLOGY הוא 2x2x2, המוצר הוא 8. מכיוון שלכל מכונה וירטואלית ב-tpu7x-standard-4t יש 4 שבבים, מספר הצמתים הוא 2.
    • spot: מאגר הצמתים שישתמש במכונות וירטואליות במודל Spot עבור צמתי חלוקת ה-TPU. אי אפשר לשנות את ההגדרה הזו אחרי שיוצרים את מאגר הצמתים. מידע נוסף זמין במאמר בנושא מכונות וירטואליות מסוג Spot.
    • flex_start: מאגר הצמתים שישתמש באפשרות הצריכה flex-start. אי אפשר להגדיר את ההגדרה הזו לערך true אם ההגדרה spot מופעלת.

גרסאות TPU אחרות

אפשר ליצור מאגר צמתים של פרוסת TPU עם כמה מארחים בגרסאות v3,‏ v4,‏ v5p,‏ v5e ו-Trillium ‏ (v6e) באמצעות Google Cloud CLI,‏ Terraform או Google Cloud המסוף.

gcloud

  gcloud container node-pools create NODE_POOL_NAME \
      --cluster=CLUSTER_NAME \
      --location=CONTROL_PLANE_LOCATION \
      --node-locations=NODE_ZONES \
      --machine-type=MACHINE_TYPE \
      --tpu-topology=TPU_TOPOLOGY \
      --reservation-affinity=none \
      --enable-autoscaling \
      --num-nodes=0 --min-nodes=0 --max-nodes=MAX_NODES \
      --flex-start \
      --consolidation-delay=CONSOLIDATION_DELAY
      

מחליפים את מה שכתוב בשדות הבאים:

  • NODE_POOL_NAME: השם של מאגר הצמתים החדש.
  • CLUSTER_NAME: שם האשכול.
  • CONTROL_PLANE_LOCATION: שם האזור בהתאם לגרסת ה-TPU שבה רוצים להשתמש. כדי לזהות מיקום זמין, אפשר לעיין במאמר זמינות של TPU ב-GKE.
  • NODE_ZONES: רשי��ה מופרדת בפסיקים של אזור אחד או יותר שבהם GKE יוצר את מאגר הצמתים.

    אופציונלי: אפשר להשתמש באזור AI, כמו us-central1-ai1a. אזורי AI הם מיקומים ייעודיים שעברו אופטימיזציה לעומסי עבודה של AI/ML בתוך Google Cloud אזורים.

  • MACHINE_TYPE: סוג המכונה לשימוש בצמתים. מידע נוסף על סוגי מכונות שתואמים ל-TPU זמין בטבלה שבמאמר בחירת גרסת ה-TPU.
  • TPU_TOPOLOGY: טופולוגיית ה-TPU. לדוגמה, 2x2x2. כדי לראות את כל הטופולוגיות הנתמכות של TPU, אפשר לעיין בקטע בנושא טופולוגיה.
  • MAX_NODES: הגודל המקסימלי של מאגר הצמתים. חובה להשתמש בדגל --max-nodes אם מציינים את --enable-autoscaling, והוא חייב להיות שווה למכפלה של הערכים שמוגדרים ב-TPU_TOPOLOGY ({A}x{B}x{C}) חלקי מספר השבבים בכל מכונה וירטואלית.
  • CONSOLIDATION_DELAY: אופציונלי. משך הזמן שבו Cluster Autoscaler ממתין לפני שהוא יכול להקטין את מספר הצמתים שלא נעשה בהם שימוש מלא. ההגדרה הזו מאפשרת להשהות את הקטנת הקיבולת ולשמור את מאגר הצמתים לשימוש חוזר מאוחר יותר על ידי Pods אחרים. המספר שאתם מזינים חייב להסתיים ב-s. לדוגמה, כדי לציין שעה אחת, מזינים 3600s. זמין ב-GKE מגרסה 1.34.1-gke.2364000 ואילך.

    הפקודה הזו יוצרת מאגר צמתים בשם NODE_POOL_NAME עם הפעלה גמישה.

Terraform

  1. חשוב לוודא שאתם משתמשים בגרסה 4.84.0 ואילך של ספק google.
  2. מוסיפים את הבלוק הבא להגדרות של Terraform:

    resource "google_container_node_pool" "NODE_POOL_RESOURCE_NAME" {
      provider           = google
      project            = PROJECT_ID
      cluster            = CLUSTER_NAME
      name               = POOL_NAME
      location           = CLUSTER_LOCATION
      node_locations     = [NODE_ZONES]
      initial_node_count = NUM_NODES
    
      autoscaling {
        max_node_count = MAX_NODES
        location_policy      = "ANY"
      }
      node_config {
        machine_type = MACHINE_TYPE
        reservation_affinity {
          consume_reservation_type = "NO_RESERVATION"
        }
        flex_start = true
      }
    
      placement_policy {
        type = "COMPACT"
        tpu_topology = TPU_TOPOLOGY
      }
    }
    

    מחליפים את מה שכתוב בשדות הבאים:

    • NODE_POOL_RESOURCE_NAME: השם של משאב מאגר הצמתים בתבנית Terraform.
    • PROJECT_ID: מזהה הפרויקט.
    • CLUSTER_NAME: השם של האשכול הקיים שאליו רוצים להוסיף את מאגר הצמתים.
    • POOL_NAME: השם של מאגר הצמתים שרוצים ליצור.
    • CLUSTER_LOCATION: מיקום החישוב של האשכול. מומלץ להשתמש באשכול אזורי כדי לשפר את המהימנות של מישור הבקרה של Kubernetes. אפשר גם להשתמש באשכול אזורי. מידע נוסף זמין במאמר בנושא בחירת גרסה וטופולוגיה של TPU.
    • NODE_ZONES: רשימה מופרדת בפסיקים של אזור אחד או יותר שבהם GKE יוצר את מאגר הצמתים.

      אופציונלי: אפשר להשתמש באזור AI, כמו us-central1-ai1a. אזורי AI הם מיקומים ייעודיים שעברו אופטימיזציה לעומסי עבודה של AI/ML בתוך Google Cloud אזורים.

    • NUM_NODES: מספר הצמתים במאגר הצמתים. הערך צריך להיות אפס או מכפלה של מספר שבבי ה-TPU חלקי ארבע, כי בכל צומת של פרוסת TPU מרובת מארחים יש 4 שבבים. לדוגמה, אם TPU_TOPOLOGY הוא 4x8, יש 32 צ'יפים, ולכן NUM_NODES צריך להיות 8. מידע נוסף על טופולוגיות של TPU זמין בטבלה שבמאמר בחירת גרסת ה-TPU.
    • TPU_TOPOLOGY: מציין את הטופולוגיה הפיזית של חלוקת ה-TPU. הפורמט של הטופולוגיה תלוי בגרסת ה-TPU שבה אתם משתמשים. למידע נוסף על טופולוגיות של TPU, אפשר לעיין בטבלה שבמאמר בחירת טופולוגיה.

    אפשר גם להשתמש במשתנים הבאים:

    • RESERVATION_NAME: אם משתמשים בהזמנת TPU, זוהי רשימת התוויות של משאבי ההזמנה שבהן צריך להשתמש כשיוצרים את מאגר הצמתים. מידע נוסף על אכלוס השדה RESERVATION_LABEL_VALUES ב-reservation_affinity זמין במאמר בנושא Terraform Provider.
    • autoscaling: יצירת מאגר צמתים עם הפעלה של שינוי גודל אוטומטי. כש-GKE משנה את גודל המאגר של צומתי TPU עם כמה מארחים, הוא משנה את גודל מאגר הצמתים מאפס לגודל המקסימלי באופן אטומי.
      • MAX_NODES: הגודל המקסימלי של מאגר הצמתים. הוא צריך להיות שווה למכפלת הערכים שמוגדרים ב-TPU_TOPOLOGY ({A}x{B}x{C}) חלקי מספר השבבים בכל מכונה וירטואלית).
    • spot: מאפשרת למאגר הצמתים להשתמש במכונות וירטואליות במודל Spot עבור צמתי פרוסת ה-TPU. אי אפשר לשנות את ההגדרה הזו אחרי שיוצרים את מאגר הצמתים. מידע נוסף זמין במאמר בנושא מכונות וירטואליות מסוג Spot.
    • flex_start: מגדיר את מאגר הצמתים לשימוש באפשרות הצריכה flex-start. אי אפשר להגדיר את הערך true אם האפשרות spot מופעלת.

המסוף

כדי ליצור מאגר צמתים עם מעבדי TPU:

  1. נכנסים לדף Google Kubernetes Engine במסוף Google Cloud .

    מעבר אל Google Kubernetes Engine

  2. ברשימת האשכולות, לוחצים על שם האשכול שרוצים לשנות.

  3. לוחצים על הכרטיסייה Nodes.

  4. לוחצים על Create user-managed node pool (יצירת מאגר צמתים בניהול המשתמש).

  5. בקטע פרטים של מאגר הצמתים, מסמנים את התיבה ציון מיקומי צמתים.

  6. בוחרים את שם האזור בהתאם לגרסת ה-TPU שרוצים להשתמש בה. כדי לזהות מיקום זמין, אפשר לעיין במאמר זמינות של TPU ב-GKE.

  7. בחלונית הניווט, לוחצים על צמתים.

  8. בקטע Machine Configuration (הגדרת המכונה), בוחרים באפשרות TPUs.

  9. בתפריט הנפתח סדרה, בוחרים אחת מהאפשרויות הבאות:

    • CT3: TPU v3, מכשיר עם מארח יחיד
    • CT3P: TPU v3, multi-host pod slice
    • CT4P: TPU v4
    • CT5LP: TPU v5e
    • CT5P: TPU v5p
    • CT6E: TPU Trillium‏ (v6e)
  10. בתפריט הנפתח Machine type (סוג המכונה), בוחרים את שם המכונה שרוצים להשתמש בה עבור הצמתים. בעזרת הטבלה בחירת גרסת ה-TPU אפשר להגדיר את סוג המכונה ואת טופולוגיית ה-TPU שיוצרים מאגר צמתים של פרוסת TPU מרובת מארחים.

  11. בתפריט הנפתח TPU Topology (טופולוגיית TPU), בוחרים את הטופולוגיה הפיזית של חלוקת ה-TPU.

  12. בתיבת הדו-שיח נדרשים שינויים, לוחצים על ביצוע שינויים.

  13. מוודאים שBoot disk type (סוג דיסק האתחול) הוא Standard persistent disk (דיסק מתמיד סטנדרטי) או SSD persistent disk (דיסק מתמיד שמבוסס על SSD).

  14. אופציונלי: מסמנים את תיבת הסימון Enable nodes on spot VMs כדי להשתמש במכונות וירטואליות מסוג Spot עבור הצמתים במאגר הצמתים.

  15. לוחצים על יצירה.

אימות הסטטוס של התחלה גמישה במאגר הצמתים

מריצים את הפקודה הבאה:

gcloud container node-pools describe NODE_POOL_NAME \
    --cluster CLUSTER_NAME \
    --location CONTROL_PLANE_LOCATION \
    --format="get(config.flexStart)"

אם האפשרות flex-start מופעלת במאגר הצמתים, השדה flexStart מוגדר ל-True.

הרצת עומס עבודה של קבוצת פעולות

בקטע הזה יוצרים Job שמפעיל צומת TPU עם מכונות וירטואליות של Flex-start. ב-Kubernetes, בקר משימות יוצר פוד אחד או יותר ועוזר לוודא שהם מבצעים משימה ספציפית בהצלחה.

  1. בGoogle Cloud מסוף, לוחצים על סמל ההפעלה של Cloud Shell הפעלת Cloud Shell כדי להפעיל סשן של Cloud Shell. סשן נפתח בחלונית התחתונה של מסוף Google Cloud .

  2. יוצרים קובץ בשם dws-flex-start.yaml:

    מארח יחיד

    משתמשים במניפסט הבא לקובץ dws-flex-start.yaml:

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: job-1
    spec:
      template:
        spec:
          nodeSelector:
            cloud.google.com/gke-flex-start: "true"
            cloud.google.com/gke-tpu-accelerator: ACCELERATOR_TYPE
            cloud.google.com/gke-tpu-topology: TPU_TOPOLOGY
          containers:
          - name: container-1
            image: gcr.io/k8s-staging-perf-tests/sleep:latest
            args: ["3600s"] # Sleep for 1 hour
            resources:
              requests:
                  google.com/tpu: NUM_CHIPS
              limits:
                  google.com/tpu: NUM_CHIPS
          restartPolicy: OnFailure
    

    כמה מארחים

    משתמשים במניפסט הבא לקובץ dws-flex-start.yaml:

    apiVersion: v1
    kind: Service
    metadata:
      name: headless-svc
    spec:
      clusterIP: None
      selector:
        job-name: job-1
    ---
    apiVersion: batch/v1
    kind: Job
    metadata:
      name: job-1
    spec:
      backoffLimit: 0
      completions: 2
      parallelism: 2
      completionMode: Indexed
      template:
        spec:
          subdomain: headless-svc
          restartPolicy: Never
          nodeSelector:
              cloud.google.com/gke-flex-start: "true"
              cloud.google.com/gke-tpu-accelerator: ACCELERATOR_TYPE
              cloud.google.com/gke-tpu-topology: TPU_TOPOLOGY
          containers:
          - name: tpu-job
            image: us-docker.pkg.dev/cloud-tpu-images/jax-ai-image/tpu:latest
            ports:
            - containerPort: 8471 # Default port using which TPU VMs communicate
            - containerPort: 8431 # Port to export TPU runtime metrics, if supported.
            securityContext:
              privileged: true
            command:
            - bash
            - -c
            - |
              python -c 'import jax; print("TPU cores:", jax.device_count())'
            resources:
              requests:
                google.com/tpu: NUM_CHIPS
              limits:
                google.com/tpu: NUM_CHIPS
    

    מחליפים את מה שכתוב בשדות הבאים:

    • ACCELERATOR_TYPE: הסוג של האצת TPU שבו השתמשתם כשבניתם את מאגרי הצמתים. לדוגמה, tpu-v4-podslice או tpu-v5-lite-podslice.
    • TPU_TOPOLOGY: הטופולוגיה הפיזית של חלוקת ה-TPU. לדוגמה, הערך יכול להיות 4x4x4 או 2x2, בהתאם לגרסת ה-TPU.
    • NUM_CHIPS: מספר שבבי ה-TPU בכל מכונה וירטואלית הוא אחד, ארבע או שמונה. מידע נוסף זמין במאמר בנושא גרסאות TPU.
  3. החלת המניפסט dws-flex-start.yaml:

    kubectl apply -f dws-flex-start.yaml
    
  4. מוודאים שהעבודות פועלות באותו צומת:

    kubectl get pods
    

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

    NAME    READY   STATUS      RESTARTS   AGE   IP       NODE               NOMINATED NODE   READINESS GATES
    job-1   0/1     Completed   0          19m   10.(...) gke-flex-zonal-a2  <none>           <none>
    

הסרת המשאבים

כדי לא לצבור חיובים בחשבון Google Cloud על המשאבים שבהם השתמשתם בדף הזה, אתם יכולים למחוק את הפרויקט שמכיל את המשאבים או להשאיר את הפרויקט ולמחוק את המשאבים בנפרד.

מחיקת הפרויקט

  1. במסוף Google Cloud , נכנסים לדף Manage resources.

    כניסה לדף Manage resources

  2. ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
  3. כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.

מחיקת המשאב הספציפי

  1. מחיקת המשרות:

    kubectl delete job -l "job-name in (job-1,job-2)"
    
  2. מוחקים את מאגר הצמתים:

    gcloud container node-pools delete NODE_POOL_NAME \
          --location CONTROL_PLANE_LOCATION
    
  3. מחיקת האשכול:

    gcloud container clusters delete CLUSTER_NAME
    

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