Pathways היא מערכת שנועדה לאפשר יצירה של מערכות למידת מכונה בהיקף גדול, עם ריבוי משימות והפעלה דלילה. הוא מאפשר שימוש באלפי או בעשרות אלפי מאיצים, עם יכולת להקצות באופן דינמי כמויות שונות של מחשוב למשימות שונות בהתאם לדרישות העיבוד שלהן.
התכונה Pathways מפשטת חישובים של למידת מכונה בהיקפים גדולים, כי היא מאפשרת ללקוח JAX יחיד לתזמר עומסי עבודה בכמה חלקי TPU גדולים, שיכולים לכלול אלפי שבבי TPU.
אנחנו משתמשים ב-Pathways באופן פנימי ב-Google כדי לאמן מודלים גדולים כמו Gemini. התוכנית Pathways on Cloud מספקת את אותם היתרונות ללקוחות Google Cloud .
לפני שמתחילים
חשוב לוודא שיש לכם:
במאמר הזה נסביר איך להשתמש ב-TPU מנוהל של Pathways ב-Google Kubernetes Engine (GKE) לעומסי עבודה (workload) של אצווה, בזמן אמת ואינטראקקטיביים. נקודת המוצא היא שאתם כבר יודעים להשתמש ב-TPU עם GKE, כולל TPU עם פרוסות יחידות ועם כמה פרוסות ב-Google Kubernetes Engine, ושיש לכם ניסיון כללי עם TPU עם כמה פרוסות.
בקר יחיד ובקרים מרובים
יש בעיקר שתי דרכים שונות לנהל ולתזמן חישובים במספר מכשירים:
התכונה |
בקר יחיד (Pathways) |
Multi-controller (ברירת המחדל של JAX) |
בקרה |
נקודת בקרה יחידה: תוכנית לקוח יחידה פועלת כבקר המרכזי. |
בקרה מבוזרת: משתתפים כמה תהליכים, שלכל אחד מהם יש מופע משלו של מתורגמן Python. |
תצוגה |
תצוגה מאוחדת: הלקוח רואה את כל המכשירים כמערכת אחת מאוחדת. |
תצוגה מקומית: כל תהליך Python רואה רק את המכשירים שמחוברים אליו. |
Programming |
תכנות פשוט יותר: המשתמשים מבצעים אינטראקציה עם לקוח יחיד, כך שהמערכת נראית כמו מכונה גדולה אחת עם הרבה מאיצים מקומיים. |
SPMD: בעיקר משתמשים בפרדיגמת SPMD, שבה כל המכשירים צריכים להריץ את אותה התוכנית. |
גמישות |
תמיכה בדפוסי חישוב מורכבים יותר מעבר ל-SPMD, כולל מקביליות אסימטרית של צינורות ודלילות חישובית. |
יכול להיות שיהיה פחות גמיש בניהול משאבים, במיוחד בין חלקי TPU שונים. |
רכיבים של מסלולי למידה
בקטע הבא מפורטים הרכיבים העיקריים של ארכיטקטורת Pathways.
כלי לניהול משאבים של מסלולים
זהו מישור הבקרה המרכזי של מערכת Pathways. הוא מנהל את כל משאבי המאיצים ואחראי לתיאום ההקצאה של מאיצים למשימות של משתמשים. הוא עוקב אחרי מצב הבריאות של העובדים ומטפל בתזמון, בהשהיה ובחידוש של משימות. הוא משמש כנקודת קשר יחידה לדיווח על שגיאות ולבדיקת סטטוס המערכת. הרכיב הזה דורש רק משאבי CPU.
לקוח Pathways
זהו יישום של Interim Framework Runtime (IFRT) שמשמש כנקודת הכניסה למערכת Pathways. היא מקבלת פעולות ברמה גבוהה (HLO) מהתוכנית שלכם. הלקוח של Pathways אחראי לתאם עם מנהל המשאבים של Pathways כדי לקבוע איפה למקם תוכניות שעברו קומפילציה לצורך ביצוע על סמך קוד המשתמש. היא מציגה תצוגה מאוחדת של המערכת ללקוח JAX נתון. הרכיב הזה דורש רק משאבי CPU.
עובד במסלול
אלה התהליכים שפועלים במכונות המאיץ (מכונות וירטואליות של TPU). הם מקבלים קובצי הפעלה מהודרים של התוכנית משרת ה-proxy של IFRT ומבצעים את החישובים ב-TPU. עובדים ב-Pathways שולחים נתונים בחזרה לתוכנית שלכם דרך שרת ה-proxy של IFRT. הרכיב הזה דורש משאבים של מאיץ.
לקוח proxy של IFRT
זוהי הטמעה של OSS של זמן הריצה של Interim Framework (IFRT) API שמפריד את קוד המשתמש מזמן הריצה הבסיסי, ומשפר את ניידות הקוד והשקיפות. JAX משתמשת בהטמעה הזו כחלופה לזמן הריצה של ברירת המחדל שלה עם כמה בקרים. לקוח ה-proxy של IFRT משמש כגשר תקשורת בין התוכנית שלכם לרכיבי Pathways. הוא שולח בקשות לשרת הפרוקסי של IFRT ומקבל ממנו תוצאות. זוהי הטמעה של IFRT API ב-OSS. הרכיב הזה דורש רק משאבי CPU.
שרת proxy של IFRT
שרת gRPC הזה מקבל בקשות מלקוח ה-proxy של IFRT ומעביר אותן ללקוח Pathways, שמטפל בהפצה בפועל של העבודה. הרכיב הזה דורש רק משאבי CPU.
שרת Sidecar
שרת gRPC הזה ממוקם יחד עם תהליך העבודה של Pathways במכונה הווירטואלית של המאיץ, כדי להריץ קוד Python שצוין על ידי המשתמש במכונה הווירטואלית של המאיץ ישירות, וכך להפחית את זמן האחזור של העברת הנתונים מהבקר למאיצים. שרת ה-sidecar מבצע אינטראקציה עם תהליך העבודה של Pathways באמצעות פרוטוקול מותאם אישית עם ניהול גרסאות בהעברה של gRPC.
רכיבי Pathways ב-GKE
בקטע הזה מוסבר איך רכיבי Pathways ממופים לרכיבי Google Kubernetes Engine כמו קונטיינרים ו-Pods.
אפשר למצוא תמונות של מאגרי Pathways במיקומים הבאים.
סוג המכל |
Location |
שרת proxy של IFRT |
|
מנהל משאבים או עובד ב-Pathways |
|
כלי לניהול משאבים של מסלולים
אחרי שיוצרים אשכול GKE, אפשר להשתמש ב-containerSpec הבא כדי לפרוס את הכלי לניהול משאבי נתיבי למידה:
- name: pathways-rm image: us-docker.pkg.dev/cloud-tpu-v2-images/pathways/server:latest imagePullPolicy: Always env: - name: HOST_ADDRESS valueFrom: fieldRef: fieldPath: "metadata.labels['jobset.sigs.k8s.io/coordinator']" - name: TPU_SKIP_MDS_QUERY value: "true" args: - --server_port=29001 - --node_type=resource_manager - --instance_count=WORKLOAD_NODEPOOL_COUNT - --instance_type=SLICE_TOPOLOGY - --gcs_scratch_location=gs://BUCKET_NAME
תיאורי הארגומנטים:
-
--server_port: מנהל המשאבים של Pathways משתמש ביציאה הזו כדי לתקשר עם רכיבים אחרים של Pathways. -
--node_type: סוג הצומת. הערך צריך להיות resource_manager עבור מנהל המשאבים של Pathways, והוא לא נדרש עבור מאגרי התגים האחרים. -
--instance_count: מספר פרוסות ה-TPU. -
--instance_type: סוג ה-TPU והטופולוגיה של הפרוסה. בפורמטtpu{TPU type}:{TPU topology}, לדוגמהtpuv5e:4x4. -
--gcs_scratch_location: קטגוריה של Cloud Storage שמשמשת לקבצים זמניים.
שרת proxy של IFRT
אפשר להשתמש בcontainerSpec הבא כדי לפרוס שרת proxy של IFRT:
- name: pathways-proxy image: us-docker.pkg.dev/cloud-tpu-v2-images/pathways/proxy_server:latest imagePullPolicy: Always env: - name: PATHWAYS_HEAD valueFrom: fieldRef: fieldPath: "metadata.labels['jobset.sigs.k8s.io/coordinator']" args: - --resource_manager_address=$(PATHWAYS_HEAD):29001 - --server_port=29000 - --gcs_scratch_location=gs://BUCKET_NAME ports: - containerPort: 29000
תיאורי הארגומנטים:
-
--resource_manager_address: שם המארח והיציאה ששרת ה-proxy משתמש בהם כדי לתקשר עם מנהל המשאבים של Pathways. היציאה צריכה להיות זהה לערך--server_portשמשמש למאגר התגים של הכלי לניהול משאבי נתיבי המרות. -
--server_port: שרת ה-proxy של IFRT משתמש ביציאה הזו כדי לתקשר עם לקוח ה-proxy של IFRT. -
--gcs_scratch_location: קטגוריה של Cloud Storage שמשמשת לקבצים זמניים.
עובד במסלול
אפשר להשתמש ב-containerSpec הבאים כדי לפרוס עובדים ב-Pathways:
- name: worker image: us-docker.pkg.dev/cloud-tpu-v2-images/pathways/server:latest imagePullPolicy: Always env: - name: PATHWAYS_HEAD valueFrom: fieldRef: fieldPath: "metadata.labels['jobset.sigs.k8s.io/coordinator']" - name: MEGASCALE_NUM_SLICES valueFrom: fieldRef: fieldPath: "metadata.labels['jobset.sigs.k8s.io/replicatedjob-replicas']" - name: MEGASCALE_SLICE_ID valueFrom: fieldRef: fieldPath: "metadata.labels['jobset.sigs.k8s.io/job-index']" - name: MEGASCALE_COORDINATOR_ADDRESS value: "$(PATHWAYS_HEAD)" args: - --server_port=29001 - --resource_manager_address=$(PATHWAYS_HEAD):29001 - --gcs_scratch_location=gs://BUCKET_NAME ports: - containerPort: 29001 resources: limits: google.com/tpu: "4"
תיאורי הארגומנטים:
-
--resource_manager_address: שם המארח והיציאה שבהם משתמשים העובדים של TPU כדי לתקשר עם מנהל המשאבים של Pathways. היציאה צריכה להיות זהה לערך--server_portשמשמש למאגר התגים של הכלי לניהול משאבים של נתיבי המרה -
--server_port: העובדים משתמשים ביציאה הזו כדי לתקשר עם שרת ה-proxy ומנהל המשאבים של Pathways. -
--gcs_scratch_location: קטגוריה של Cloud Storage שמשמשת לקבצים זמניים.
למנהל המשאבים של Pathways, לשרת ה-proxy של IFRT ולעובדי Pathways יכולים להיות יציאות שונות, אבל בדוגמה הזו, מנהל המשאבים של Pathways ועובד Pathways חולקים את אותה יציאה.
המאמרים הבאים
- יצירת אשכול GKE באמצעות Pathways
- הפעלת עומס עבודה באצווה באמצעות Pathways
- ביצוע הסקה מרובת מארחים באמצעות Pathways
- הפעלת עומס עבודה אינטראקטיבי באמצעות Pathways
- אימון גמיש עם תוכניות לימודים
- העברת עומסי עבודה של JAX ל-Pathways
- פתרון בעיות בתוכניות הלימודים ב-Cloud