בדף הזה מוסבר למנהלי פלטפורמות ולמהנדסי למידת מכונה (ML) איך ליצור אשכול ב-Google Kubernetes Engine (GKE) שמוגדר לעומסי עבודה שמבוססים על Pathways. אתם יכולים להקצות אשכולות שהוגדרו מראש באופן אוטומטי באמצעות Cluster Toolkit, או ליצור אשכולות באופן ידני באמצעות Google Cloud CLI.
לפני שמתחילים
לפני שממשיכים, צריך לבצע את הפעולות הבאות:
- מתקינים את ה-CLI של gcloud.
- מתקינים את
kubectlואתgke-gcloud-auth-plugin. - אם אתם משתמשים ב-Cluster Toolkit, הגדירו את Cluster Toolkit ועדכנו אותו לגרסה האחרונה.
- מפעילים את Kubernetes Engine API.
- מוודאים שיש לכם מספיק מכסת TPU או הזמנת TPU לפרוסות ה-TPU שאתם רוצים ליצור.
הגדרת הסביבה המקומית
נכנסים ל-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
פורסים אשכול 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.
- מגדירים את
מוודאים שלצמתים של האשכול יש
STATUSשלReady:kubectl get nodesאחרי שיוצרים את האשכול, אפשר לשלוח עומסי עבודה של Pathways באמצעות הפקודה
gcluster job submitעם הדגלים--pathwaysו---pathways-gcs-location. מידע נוסף זמין במאמר הרצת עומסי עבודה באמצעות Pathways.
gcloud
כדי ליצור אשכול GKE ולהגדיר אותו להרצת עומסי עבודה של Pathways, מבצעים את השלבים הבאים:
מגדירים את משתני הסביבה הבאים:
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 צמתים.
-
יוצרים אשכול 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}יוצרים את מאגרי הצמתים של פרוסות ה-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.יוצרים מאגר צומתי 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מקבלים את פרטי הכניסה לאשכול ומגדירים את מרחב השמות שמוגדר כברירת מחדל ל-
kubectl:gcloud container clusters get-credentials ${CLUSTER} \ --zone=${ZONE} \ --project=${PROJECT} \ && kubectl config set-context --current --namespace=defaultכדי להשתמש בארכיטקטורת Pathways באשכול GKE, צריך להתקין את ה-API של
JobSet:kubectl apply --server-side -f https://github.com/kubernetes-sigs/jobset/releases/download/v0.12.0/manifests.yamlמוודאים שהערך של
STATUSבצמתים הואReady, ושהערך שלSTATUSב-podjobset-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}
המאמרים הבאים
- הרצת עומס עבודה באצווה באמצעות Pathways
- מצב אינטראקטיבי ב-Pathways
- אימון עמיד באמצעות Pathways
- העברת עומסי עבודה של JAX ל-Pathways
- פתרון בעיות ב-Pathways בענן