יצירת אשכול GKE באמצעות Pathways

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

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

לפני שממשיכים, צריך לבצע את הפעולות הבאות:

הגדרת הסביבה המקומית

נכנסים ל-CLI של gcloud באמצעות פרטי הכניסה של Google Cloud :

gcloud auth login

אם אתם משתמשים ב-Cluster Toolkit, אתם צריכים גם ליצור Application Default Credentials ‏(ADC) שמשמשים את Terraform:

gcloud auth application-default login

יצירת אשכול GKE

בדוגמה הבאה יוצרים אשכול עם מאגרי צמתים של TPU v6e 2x4. אתם יכולים ליצור אשכול באמצעות Cluster Toolkit או ה-CLI של gcloud.

Cluster Toolkit

  1. פורסים אשכול GKE TPU לפי ההוראות במאמר פריסת אשכול GKE TPU v6e. במאמר סקירה כללית על פריסות של Cloud TPU תוכלו לקרוא על כל האפשרויות לפריסת TPU.

    כשמגדירים את תוכנית הפריסה, מבצעים את הפעולות הבאות:

    • מגדירים את enable_pathways_for_tpus לערך true (מופעל כברירת מחדל בתבניות TPU של Cluster Toolkit). ההגדרה הזו מקצה באופן אוטומטי את מאגר הצמתים הנדרש של מעבד (CPU) ב-cpu-np (n4-standard-64) ואת ההגדרות האישיות של Kueue לבקר של Pathways. ‫Cluster Toolkit מחיל את הגדרת ברירת המחדל של Pathways Kueue רק אם לא מציינים קובץ תצורה מותאם אישית של Kueue במשתנה kueue_configuration_path.
    • מגדירים את num_slices למספר מאגרי הצמתים של פרוסות TPU שנדרשים לעומס העבודה.
    • מגדירים את tpu_topology לטופולוגיית פרוסת ה-TPU שנבחרה (לדוגמה, 2x4 או 4x4).
    • בוחרים אפשרות צריכה. כברירת מחדל, קובץ הפריסה של TPU v6e צורך מקום שמור ספציפי ב-TPU, לכן צריך לציין את שם המקום השמור במשתנה reservation_affinity. כדי להשתמש באפשרות צריכה אחרת, קראו את המאמר אפשרויות צריכה של GKE.
  2. מוודאים שלצמתים של האשכול יש STATUS של Ready:

    kubectl get nodes
    

    אחרי שיוצרים את האשכול, אפשר לשלוח עומסי עבודה של Pathways באמצעות הפקודה gcluster job submit עם הדגלים --pathways ו---pathways-gcs-location. מידע נוסף זמין במאמר הרצת עומסי עבודה באמצעות Pathways.

gcloud

כדי ליצור אשכול GKE ולהגדיר אותו להרצת עומסי עבודה של Pathways, מבצעים את השלבים הבאים:

  1. מגדירים את משתני הסביבה הבאים:

    CLUSTER=GKE_CLUSTER_NAME
    PROJECT=PROJECT_ID
    ZONE=ZONE
    REGION=REGION
    CLUSTER_VERSION=GKE_CLUSTER_VERSION
    PW_CPU_MACHINE_TYPE="n2-standard-64"
    NETWORK=NETWORK
    SUBNETWORK=SUB_NETWORK
    CLUSTER_NODEPOOL_COUNT=3
    TPU_MACHINE_TYPE="ct6e-standard-4t"
    WORKERS_PER_SLICE=2
    TOPOLOGY="2x4"
    NUM_CPU_NODES=1

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

    • ‫GKE_CLUSTER_NAME: השם של אשכול GKE.
    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud .
    • ‫ZONE: האזור שבו יוצרים את האשכול. בוחרים אזור שבו TPU v6e זמין. למידע נוסף, קראו את המאמר אזורים וזונים של Cloud TPU.
    • ‫REGION: אופציונלי: האזור שבו יוצרים משאבים אם משתמשים באשכול אזורי.
    • ‫GKE_CLUSTER_VERSION: אופציונלי, גרסת אשכול GKE. צריך להשתמש בגרסה 1.32.2-gke.1475000 ואילך, ולבחור גרסה שנכללת בתמיכה הרגילה. למידע נוסף, קראו את לוח הזמנים להשקה של GKE. אם לא מציינים גרסה, צריך להסיר את הדגל --cluster-version מהפקודה הבאה של gcloud container clusters create.
    • ‫NETWORK: אופציונלי: השם של רשת ענן וירטואלי פרטי (VPC). הרשת צריכה להיות קיימת לפני שיוצרים את האשכול. אם לא מציינים רשת, מסירים את הדגל --network מהפקודה הבאה של gcloud container clusters create.
    • ‫SUB_NETWORK: אופציונלי: השם של רשת משנה. רשת המשנה חייבת להיות קיימת לפני שיוצרים את האשכול. אם לא מציינים רשת משנה, צריך להסיר את הדגל --subnetwork מהפקודה gcloud container clusters create הבאה.

    בדוגמה הזו מוגדרים ערכי ברירת מחדל למשתנים הנותרים, שאותם אפשר לשנות בהתאם לעומס העבודה:

    • ‫PW_CPU_MACHINE_TYPE: סוג המכונה של מאגר הצמתים שמוגדר כברירת מחדל באשכול, ושל מאגר הצמתים של המעבד (CPU) שמריץ את ה-head של Pathways (מנהל המשאבים והפרוקסי של Pathways).
    • ‫NUM_CPU_NODES: מספר הצמתים במאגר הצמתים של המעבד (CPU).
    • ‫CLUSTER_NODEPOOL_COUNT: מספר פרוסות ה-TPU. כל פרוסה היא מאגר צמתים נפרד.
    • ‫TPU_MACHINE_TYPE ו-TOPOLOGY: סוג מכונת ה-TPU והטופולוגיה של ה-TPU בכל פרוסה.
    • ‫WORKERS_PER_SLICE: מספר הצמתים בכל פרוסה, שהוא מספר שבבי ה-TPU בטופולוגיה חלקי מספר השבבים בכל צומת. לדוגמה, בטופולוגיה של 2x4 יש 8 צ'יפים ובצומת של ct6e-standard-4t יש 4 צ'יפים, כך שבכל פרוסה יש 2 צמתים.
  2. יוצרים אשכול GKE באמצעות הפקודה gcloud container clusters create:

    gcloud container clusters create ${CLUSTER} \
        --project=${PROJECT} \
        --zone=${ZONE} \
        --cluster-version=${CLUSTER_VERSION} \
        --scopes=storage-full,gke-default,cloud-platform \
        --machine-type=${PW_CPU_MACHINE_TYPE} \
        --network=${NETWORK} \
        --subnetwork=${SUBNETWORK}
    
  3. יוצרים את מאגרי הצמתים של פרוסות ה-TPU באמצעות הפקודה gcloud container node-pools create:

    for i in $(seq 1 ${CLUSTER_NODEPOOL_COUNT}); do
        gcloud container node-pools create "tpu-np-${i}" \
            --project=${PROJECT} \
            --zone=${ZONE} \
            --cluster=${CLUSTER} \
            --machine-type=${TPU_MACHINE_TYPE} \
            --num-nodes=${WORKERS_PER_SLICE} \
            --placement-type=COMPACT \
            --tpu-topology=${TOPOLOGY} \
            --scopes=storage-full,gke-default,cloud-platform \
            --workload-metadata=GCE_METADATA
    done
    

    הפקודות האלה לא מיועדות לבקשה ספציפית. כדי להשתמש בהזמנת TPU, מוסיפים את הדגלים --reservation-affinity=specific ו---reservation=RESERVATION_NAME, כאשר RESERVATION_NAME הוא השם של הזמנת ה-TPU. כדי להשתמש ב-VM במודל Spot, מוסיפים את הדגל --spot.

  4. יוצרים מאגר צומתי CPU ל-Pathways head, שמריץ את מנהל המשאבים ואת שרת ה-proxy של Pathways. נותנים למאגר הצמתים את השם cpu-np כדי שהפקודה gcluster job submit --pathways תוכל לזהות אותו:

    gcloud container node-pools create cpu-np \
        --project=${PROJECT} \
        --zone=${ZONE} \
        --cluster=${CLUSTER} \
        --machine-type=${PW_CPU_MACHINE_TYPE} \
        --num-nodes=${NUM_CPU_NODES} \
        --scopes=storage-full,gke-default,cloud-platform \
        --workload-metadata=GCE_METADATA
    
  5. מקבלים את פרטי הכניסה לאשכול ומגדירים את מרחב השמות שמוגדר כברירת מחדל ל-kubectl:

    gcloud container clusters get-credentials ${CLUSTER} \
        --zone=${ZONE} \
        --project=${PROJECT} \
        && kubectl config set-context --current --namespace=default
    
  6. כדי להשתמש בארכיטקטורת Pathways באשכול GKE, צריך להתקין את ה-API של JobSet:

    kubectl apply --server-side -f https://github.com/kubernetes-sigs/jobset/releases/download/v0.12.0/manifests.yaml
    
  7. מוודאים שהערך של STATUS בצמתים הוא Ready, ושהערך של STATUS ב-pod‏ jobset-controller-manager הוא Running:

    kubectl get nodes
    kubectl get pods --namespace=jobset-system
    

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

    NAME                                      STATUS   ROLES    AGE   VERSION
    gke-cluster-cpu-np-12345678-abcd          Ready    <none>   5m    v1.32.2-gke.1475000
    gke-cluster-tpu-np-1-12345678-efgh        Ready    <none>   5m    v1.32.2-gke.1475000
    ...
    NAME                                         READY   STATUS    RESTARTS   AGE
    jobset-controller-manager-6f7b8c9d4-xyz12    1/1     Running   0          2m
    

הסרת המשאבים

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

  • ‫Cluster Toolkit: מריצים את הפקודה הבאה כדי להשמיד את הפריסה:

    ./gcluster destroy DEPLOYMENT_FOLDER_NAME

    מחליפים את DEPLOYMENT_FOLDER_NAME בשם של תיקיית הפריסה.

  • ה-CLI של gcloud: מריצים את הפקודה הבאה כדי למחוק את אשכול GKE ואת מאגרי הצמתים שלו:

    gcloud container clusters delete ${CLUSTER} \
        --project=${PROJECT} \
        --zone=${ZONE}
    

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