בדף הזה מוסבר איך להריץ צינור (pipeline) של Apache Beam ב-Dataflow עם TPU. על משימות שמשתמשות ב-TPU חלים חיובים כמו שמפורט בדף התמחור של Dataflow.
מידע נוסף על שימוש ב-TPU עם Dataflow זמין במאמר תמיכה ב-TPU ב-Dataflow.
אופציונלי: הזמנה ספציפית לשימוש במאיצים
אפשר להשתמש ב-TPU על פי דרישה, אבל אנחנו ממליצים מאוד להשתמש ב-TPU של Dataflow עם הזמנות ספציפיות ב-Google Cloud Platform. כך תוכלו לוודא שיש לכם גישה למאיצים זמינים ולזמני הפעלה מהירים של העובדים. לצינורות שצורכים הזמנת TPU לא נדרשת מכסת TPU נוספת.
אם לא מבצעים הזמנה ובוחרים להשתמש ב-TPU על פי דרישה, צריך להקצות מכסת TPU לפני שמריצים את צינור הנתונים.
אופציונלי: הקצאת מכסת TPU
אפשר להשתמש ב-TPU לפי דרישה או באמצעות הזמנה. אם רוצים להשתמש ב-TPU לפי דרישה, צריך להקצות מכסת TPU לפני שמתחילים. אם משתמשים בהזמנה ממוקדת ספציפית, אפשר לדלג על הקטע הזה.
כדי להשתמש ב-TPU על פי דרישה ללא הזמנה, צריך לבדוק את המגבלה ואת השימוש הנוכחי במכסת Compute Engine API ל-TPU באופן הבא:
המסוף
נכנסים לדף Quotas במסוף Google Cloud :
בתיבה Filter, מבצעים את הפעולות הבאות:
משתמשים בטבלה הבאה כדי לבחור ולהעתיק את המאפיין של המכסה, בהתאם לגרסת ה-TPU ולסוג המכונה. לדוגמה, אם אתם מתכננים ליצור צמתים של TPU v5e על פי דרישה, שסוג המכונה שלהם מתחיל ב-
ct5lp-, צריך להזיןName: TPU v5 Lite PodSlice chips.גרסת TPU, סוג המכונה מתחיל ב- המאפיין והשם של המכסה עבור מופעים על פי דרישה TPU v5e,
ct5lp-Name:
TPU v5 Lite PodSlice chipsTPU v5p,
ct5p-Name:
TPU v5p chipsTPU v6e,
ct6e-Dimensions (e.g. location):
tpu_family:CT6Eבוחרים במאפיין מאפיינים (למשל מיקום) ומזינים
region:ואחריו את שם האזור שבו מתכננים להפעיל את צינור הנתונים. לדוגמה, מזיניםregion:us-west4אם מתכננים להשתמש באזורus-west4-a. מכסת ה-TPU היא אזורית, ולכן כל האזורים באותו אזור צורכים את אותה מכסת TPU.
הגדרה של קובץ אימג' מותאם אישית של קונטיינר
כדי לבצע אינטראקציה עם TPU בצינורות עיבוד נתונים של Dataflow, צריך לספק תוכנה שיכולה לפעול במכשירי XLA בסביבת זמן הריצה של צינור עיבוד הנתונים. לשם כך צריך להתקין ספריות TPU בהתאם לצרכים של צינור העיבוד ולהגדיר משתני סביבה בהתאם למכשיר ה-TPU שבו משתמשים.
כדי להתאים אישית את קובץ האימג' של הקונטיינר, מתקינים את Apache Beam בקובץ בסיס לאימג' מוכן לשימוש שמכיל את ספריות ה-TPU הנדרשות. לחלופין, אפשר להתקין את תוכנת ה-TPU בתמונות שפורסמו עם מהדורות של Apache Beam SDK.
כדי לספק קובץ אימג' של קונטיינר בהתאמה אישית, משתמשים באפשרות sdk_container_image pipeline. מידע נוסף זמין במאמר בנושא שימוש במאגרי תגים מותאמים אישית ב-Dataflow.
כשמשתמשים במאיץ TPU, צריך להגדיר את משתני הסביבה הבאים בקובץ אימג' של קונטיינר.
ENV TPU_SKIP_MDS_QUERY=1 # Don't query metadata
ENV TPU_HOST_BOUNDS=1,1,1 # There's only one host
ENV TPU_WORKER_HOSTNAMES=localhost
ENV TPU_WORKER_ID=0 # Always 0 for single-host TPUs
בהתאם למאיץ שבו אתם משתמשים, צריך להגדיר גם את המשתנים שבטבלה הבאה.
| סוג | טופולוגיה | הגדרות חובה ב-Dataflow worker_machine_type |
משתני סביבה נוספים |
|---|---|---|---|
| tpu-v5-lite-podslice | 1x1 | ct5lp-hightpu-1t | TPU_ACCELERATOR_TYPE=v5litepod-1 |
| tpu-v5-lite-podslice | 2x2 | ct5lp-hightpu-4t | TPU_ACCELERATOR_TYPE=v5litepod-4 |
| tpu-v5-lite-podslice | 2x4 | ct5lp-hightpu-8t | TPU_ACCELERATOR_TYPE=v5litepod-8 |
| tpu-v6e-slice | 1x1 | ct6e-standard-1t | TPU_ACCELERATOR_TYPE=v6e-1 |
| tpu-v6e-slice | 2x2 | ct6e-standard-4t | TPU_ACCELERATOR_TYPE=v6e-4 |
| tpu-v6e-slice | 2x4 | ct6e-standard-8t | TPU_ACCELERATOR_TYPE=v6e-8 |
| tpu-v5p-slice | 2x2x1 | ct5p-hightpu-4t | TPU_ACCELERATOR_TYPE=v5p-8 |
קובץ Docker לדוגמה עבור קובץ אימג' של קונטיינר מותאם אישית יכול להיראות כמו בדוגמה הבאה:
FROM python:3.11-slim
COPY --from=apache/beam_python3.11_sdk:2.66.0 /opt/apache/beam /opt/apache/beam
# Configure the environment to access TPU device
ENV TPU_SKIP_MDS_QUERY=1
ENV TPU_HOST_BOUNDS=1,1,1
ENV TPU_WORKER_HOSTNAMES=localhost
ENV TPU_WORKER_ID=0
# Configure the environment for the chosen accelerator.
# Adjust according to the accelerator you use.
ENV TPU_ACCELERATOR_TYPE=v5litepod-1
ENV TPU_CHIPS_PER_HOST_BOUNDS=1,1,1
# Install TPU software stack.
RUN pip install jax[tpu] apache-beam[gcp]==2.66.0 -f https://storage.googleapis.com/jax-releases/libtpu_releases.html
ENTRYPOINT ["/opt/apache/beam/boot"]
הרצת המשימה עם מעבדי TPU
השיקולים להרצת משימת Dataflow עם TPU כוללים את הדברים הבאים:
- מאחר שמאגרי TPU יכולים להיות גדולים, כדי להימנע ממצב שבו נגמר מקום בכונן, צריך להגדיל את גודל דיסק האתחול שמוגדר כברירת מחדל ל-50 ג'יגה-בייט או לגודל מתאים אחר לפי הצורך של קובץ אימג' של קונטיינר, באמצעות
--disk_size_gbאפשרות הצינור. - הגבלת המקביליות הפנימית של העובדים.
מעבדי TPU ומקביליות של עובדים
בהגדרת ברירת המחדל, צינורות עיבוד נתונים ב-Python מפעילים תהליך אחד של Apache Beam SDK לכל ליבת מכונה וירטואלית. לסוגי מכונות TPU יש מספר גדול של ליבות vCPU, אבל רק תהליך אחד יכול לבצע חישובים במכשיר TPU. בנוסף, יכול להיות שתהליך ישמור לעצמו מכשיר TPU למשך משך החיים של התהליך. לכן, כשמריצים צינור Dataflow TPU, צריך להגביל את ההקבלה בתוך העובד. כדי להגביל את ההפעלה המקבילית של העובדים, פועלים לפי ההנחיות הבאות:
- אם בתרחיש לדוגמה שלכם נדרש להריץ מסקנות במודל, צריך להשתמש ב-Beam
RunInferenceAPI. מידע נוסף זמין במאמר Large Language Model Inference in Beam. - אם אי אפשר להשתמש ב-API של Beam
RunInference, אפשר להשתמש באובייקטים משותפים מרובי-תהליכים של Beam כדי להגביל פעולות מסוימות לתהליך יחיד. - אם אתם לא יכולים להשתמש בהמלצות הקודמות ומעדיפים להפעיל רק תהליך Python אחד לכל עובד, צריך להגדיר את אפשרות הצינור
--experiments=no_use_multiple_sdk_containers. - אפשר לצמצם עוד יותר את מספר השרשורים באמצעות האפשרות
--number_of_worker_harness_threadsשל צינור העיבוד, אם היא משפרת את הביצועים.
בטבלה הבאה מפורטים משאבי המחשוב הכוללים לכל עובד בכל הגדרת TPU.
| סוג ה-TPU | טופולוגיה | סוג מכונה | צ'יפים של TPU | vCPU | RAM (GB) |
|---|---|---|---|---|---|
| tpu-v5-lite-podslice | 1x1 | ct5lp-hightpu-1t | 1 | 24 | 48 |
| tpu-v5-lite-podslice | 2x2 | ct5lp-hightpu-4t | 4 | 112 | 192 |
| tpu-v5-lite-podslice | 2x4 | ct5lp-hightpu-8t | 8 | 224 | 384 |
| tpu-v6e-slice | 1x1 | ct6e-standard-1t | 1 | 44 | 176 |
| tpu-v6e-slice | 2x2 | ct6e-standard-4t | 4 | 180 | 720 |
| tpu-v6e-slice | 2x4 | ct6e-standard-8t | 8 | 360 | 1440 |
| tpu-v5p-slice | 2x2x1 | ct5p-hightpu-4t | 4 | 208 | 448 |
הפעלת צינור עיבוד נתונים עם מעבדי TPU
כדי להריץ משימת Dataflow עם TPU, משתמשים בפקודה הבאה.
python PIPELINE \
--runner "DataflowRunner" \
--project "PROJECT" \
--temp_location "gs://BUCKET/tmp" \
--region "REGION" \
--dataflow_service_options "worker_accelerator=type:TPU_TYPE;topology:TPU_TOPOLOGY" \
--worker_machine_type "MACHINE_TYPE" \
--disk_size_gb "DISK_SIZE_GB" \
--sdk_container_image "IMAGE" \
--number_of_worker_harness_threads NUMBER_OF_THREADS
מחליפים את מה שכתוב בשדות הבאים:
- PIPELINE: קובץ קוד המקור של צינור העיבוד.
- PROJECT: שם הפרויקט ב- Google Cloud .
- BUCKET: הקטגוריה של Cloud Storage.
- REGION: אזור Dataflow, לדוגמה,
us-central1. - TPU_TYPE: סוג TPU נתמך, לדוגמה,
tpu-v5-lite-podslice. רשימה מלאה של הסוגים והטופולוגיות זמינה במאמר מאיצי TPU נתמכים. - TPU_TOPOLOGY: טופולוגיית ה-TPU, לדוגמה,
1x1. - MACHINE_TYPE: סוג המכונה המתאים, לדוגמה,
ct5lp-hightpu-1t. - DISK_SIZE_GB: הגודל של דיסק האתחול של כל worker VM, לדוגמה,
100. - IMAGE: הנתיב ב-Artifact Registry לקובץ אימג' של Docker.
- NUMBER_OF_THREADS: אופציונלי. מספר ה-threads של רתמת העובדים.
אימות של משימת Dataflow
כדי לוודא שהעבודה משתמשת במכונות וירטואליות של Worker עם TPU, פועלים לפי השלבים הבאים:
במסוף Google Cloud , נכנסים לדף Dataflow > Jobs.
בוחרים משרה.
לוחצים על הכרטיסייה מדדי משרות.
בקטע Autoscaling, מוודאים שיש לפחות מכונה וירטואלית אחת של Current workers.
בחלונית הצדדית פרטי המשרה, בודקים שהתג
machine_typeמתחיל ב-ct. לדוגמה,ct6e-standard-1t. ההודעה הזו מציינת שימוש ב-TPU.
פתרון בעיות במשימת Dataflow
אם נתקלתם בבעיות בהרצת משימת Dataflow עם TPU, כדאי לעיין במאמר פתרון בעיות במשימת Dataflow TPU.
המאמרים הבאים
- כדאי לנסות את הדוגמאות במדריך למתחילים: הפעלת Dataflow ב-TPU.
- מידע נוסף על תמיכה ב-TPU ב-Dataflow
- מידע נוסף על הסקת מסקנות ממודלים גדולים ב-Beam