התכונה התאמה נכונה משתמשת ברמזים למשאבים של Apache Beam כדי להתאים אישית את משאבי העובדים לצינור עיבוד נתונים. היכולת לטרגט כמה משאבים שונים לשלבים ספציפיים בצינור מאפשרת גמישות ויכולות נוספות בצינור, וגם חיסכון פוטנציאלי בעלויות. אפשר להקצות משאבים יקרים יותר לשלבים בצינור שדורשים אותם, ומשאבים זולים יותר לשלבים אחרים בצינור. אפשר להשתמש בהתאמה הנכונה כדי לציין דרישות משאבים לצינור עיבוד נתונים שלם או לשלבים ספציפיים בצינור עיבוד הנתונים.
תמיכה ומגבלות
- יש תמיכה ברמזים למשאבים ב-Apache Beam Java וב-Python SDK, בגרסאות 2.31.0 ואילך.
- התאמה נכונה נתמכת בצינורות להעלאה בכמות גדולה.
התאמה נכונה נתמכת בצינורות סטרימינג עם שינוי גודל אוטומטי אופקי מופעל.
- כדי להפעיל את האפשרות הזו, מגדירים את אפשרות הצינור
--experiments=enable_streaming_rightfitting.
- כדי להפעיל את האפשרות הזו, מגדירים את אפשרות הצינור
התאמה נכונה תומכת ב-Dataflow Prime.
התאמה נכונה לא תומכת ב-FlexRS.
כשמשתמשים בהתאמה הנכונה, לא משתמשים ב
worker_acceleratorאפשרות השירות.
הפעלה של התאמה נכונה
כדי להפעיל התאמה לימין, משתמשים באחת או יותר מהצעות המשאבים הזמינות בצינור. כשמשתמשים ברמז למשאב בצינור, התאמה נכונה מופעלת באופן אוטומטי. מידע נוסף זמין בקטע שימוש ברמזים למשאבים במסמך הזה.
רמזים זמינים למשאבים
אלה רמזים למשאבים שזמינים.
| הינט למשאב | תיאור |
|---|---|
min_ram |
כמות ה-RAM המינימלית בגיגה-בייט להקצאה לעובדים. Dataflow משתמש בערך הזה כגבול תחתון כשמקצים זיכרון לעובדים חדשים (שינוי קנה מידה אופקי) או לעובדים קיימים (שינוי קנה מידה אנכי). לדוגמה: min_ram=NUMBERGB
|
accelerator |
הקצאה של יחידות GPU שסופקה על ידי המשתמש, שמאפשרת לכם לשלוט בשימוש ביחידות GPU ובעלות שלהן בצינור העיבוד ובשלבים שלו. מציינים את הסוג והמספר של יחידות ה-GPU לצירוף לעובדי Dataflow כפרמטרים של הדגל. לדוגמה: accelerator="type:GPU_TYPE;count:GPU_COUNT;machine_type:MACHINE_TYPE;CONFIGURATION_OPTIONS"
למידע נוסף על שימוש ביחידות GPU, אפשר לעיין במאמר בנושא יחידות GPU עם Dataflow. |
קינון של רמזים למשאבים
ההיררכיה של טרנספורמציות בצינור הנתונים מושפעת מרמזים למשאבים באופן הבא:
-
min_ram: הערך של טרנספורמציה מוערך כערך הרמז הגדול ביותרmin_ramמבין הערכים שמוגדרים בטרנספורמציה עצמה ובכל ההורים שלה בהיררכיה של הטרנספורמציה.- לדוגמה: אם רמז להמרת נתונים פנימי מגדיר את
min_ramל-16GB, ורמז להמרת נתונים חיצוני בהיררכיה מגדיר אתmin_ramל-32GB, ייעשה שימוש ברמז של 32GB לכל השלבים בהמרה כולה. - לדוגמה: אם רמז לשינוי פנימי מגדיר את
min_ramל-16GB, ורמז לשינוי חיצוני בהיררכיה מגדיר אתmin_ramל-8GB, רמז של 8GB ישמש לכל השלבים בשינוי החיצוני שלא נמצאים בשינוי הפנימי, ורמז של 16GB ישמש לכל השלבים בשינוי הפנימי.
- לדוגמה: אם רמז להמרת נתונים פנימי מגדיר את
-
accelerator: הערך הפנימי ביותר בהיררכיית הטרנספורמציה מקבל עדיפות.- דוגמה: אם רמז להמרת נתונים פנימית
acceleratorשונה מרמז להמרת נתונים חיצוניתacceleratorבהיררכיה, המערכת משתמשת ברמז להמרת נתונים פנימיתacceleratorלהמרה הפנימית.
- דוגמה: אם רמז להמרת נתונים פנימית
רמזים שמוגדרים לצינור כולו מטופלים כאילו הם מוגדרים בהמרת החוץ הנפרדת.
שימוש ברמזים למשאבים
אפשר להגדיר רמזים למשאבים בכל צינור הנתונים או בשלבים של צינור הנתונים.
הינטים של משאבים בצינור עיבוד הנתונים
אפשר להגדיר רמזים למשאבים בצינור כולו כשמריצים את צינור העיבוד משורת הפקודה.
הוראות להגדרת סביבת Python מופיעות במדריך ל-Python.
לדוגמה:
python my_pipeline.py \
--runner=DataflowRunner \
--resource_hints=min_ram=numberGB \
--resource_hints=accelerator="type:type;count:number;install-nvidia-driver" \
...
רמזים לגבי משאבים בשלב של צינור עיבוד נתונים
אפשר להגדיר רמזים למשאבים בשלבים של צינורות (טרנספורמציות) באופן פרוגרמטי.
Java
כדי להתקין את Apache Beam SDK ל-Java, אפשר לעיין במאמר בנושא התקנה של Apache Beam SDK.
אפשר להגדיר רמזים למשאבים באופן פרוגרמטי בהמרות של צינורות באמצעות הסיווג ResourceHints.
בדוגמה הבאה אפשר לראות איך מגדירים רמזים למשאבים באופן פרוגרמטי בהמרות של צינור עיבוד נתונים.
pcoll.apply(MyCompositeTransform.of(...)
.setResourceHints(
ResourceHints.create()
.withMinRam("15GB")
.withAccelerator(
"type:nvidia-l4;count:1;install-nvidia-driver")))
pcoll.apply(ParDo.of(new BigMemFn())
.setResourceHints(
ResourceHints.create().withMinRam("30GB")))
כדי להגדיר רמזים למשאבים באופן פרוגרמטי בכל צינור הנתונים, משתמשים בממשק ResourceHintsOptions.
Python
כדי להתקין את Apache Beam SDK ל-Python, אפשר לעיין במאמר בנושא התקנה של Apache Beam SDK.
אפשר להגדיר רמזים למשאבים באופן פרוגרמטי בהמרות של צינורות באמצעות הסיווג PTransforms.with_resource_hints.
מידע נוסף זמין במאמר בנושא ResourceHint class.
בדוגמה הבאה אפשר לראות איך מגדירים רמזים למשאבים באופן פרוגרמטי בהמרות של צינור עיבוד נתונים.
pcoll | MyPTransform().with_resource_hints(
min_ram="4GB",
accelerator="type:nvidia-tesla-l4;count:1;install-nvidia-driver")
pcoll | beam.ParDo(BigMemFn()).with_resource_hints(
min_ram="30GB")
כדי להגדיר רמזים למשאבים בכל צינור העיבוד, משתמשים באפשרות --resource_hints של צינור העיבוד כשמריצים את צינור העיבוד. דוגמה מופיעה במאמר בנושא רמזים למשאבי צינורות.
Go
אין תמיכה ברמזים למשאבים ב-Go.
תמיכה במספר מאיצים
בצינור, לטרנספורמציות שונות יכולות להיות הגדרות שונות של האצת החישובים. ההגדרות האלה כוללות הגדרות שדורשות סוגים שונים של מכונות. ההגדרות האלה של האצת התהליך ברמת הטרנספורמציה מקבלות קדימות על פני ההגדרה ברמת צינור הנתונים, אם היא סופקה.
התאמה ומיזוג מימין
במקרים מסוימים, טרנספורמציות שהוגדרו עם רמזים שונים למשאבים יכולות להתבצע על עובדים באותו מאגר עובדים, כחלק מהתהליך של אופטימיזציה של מיזוג. כשממזגים טרנספורמציות, Dataflow מריץ אותן בסביבה שעומדת בדרישות של איחוד רמזי המשאבים שהוגדרו בטרנספורמציות. במקרים מסוימים, זה כולל את כל הצינור.
אם אי אפשר למזג רמזים למשאבים, לא מתבצע מיזוג. לדוגמה, אי אפשר למזג רמזים למשאבים של GPU שונים, ולכן לא ניתן לבצע מיזוג של הטרנספורמציות האלה.
אפשר גם למנוע מיזוג על ידי הוספת פעולה לצינור העיבוד שמאלצת את Dataflow ליצור PCollection ביניים. האפשרות הזו שימושית במיוחד כשמנסים לבודד משאבים יקרים כמו מעבדים גרפיים או מכונות עם זיכרון גבוה משלבים איטיים או משלבים שדורשים הרבה משאבי מחשוב ולא צריכים את המשאבים המיוחדים האלה. במקרים כאלה, יכול להיות שיהיה כדאי להפסיק את המיזוג בין השלבים שמוגבלים על ידי המעבד לבין השלבים שדורשים שימוש במעבדים גרפיים יקרים או במכונות עם זיכרון גבוה, ולשלם את העלות של יצירת חומרים שקשורה להפסקת המיזוג. מידע נוסף זמין במאמר בנושא מניעת מיזוג.
התאמה נכונה של סטרימינג
במשימות סטרימינג, אפשר להפעיל התאמה נכונה על ידי הגדרת אפשרות הצינור --experiments=enable_streaming_rightfitting.
התאמה נכונה יכולה לשפר את הביצועים של צינור העיבוד אם הוא כולל שלבים עם דרישות שונות של משאבים.
דוגמה: צינור עם שלב שדורש הרבה משאבי CPU ושלב שדורש GPU
דוגמה לצינור עיבוד נתונים שיכול להפיק תועלת מהתאמה נכונה היא צינור שמבצע שלב שדורש הרבה משאבי CPU, ואחריו שלב שדורש GPU. אם לא מתאימים את הגודל, צריך להגדיר מאגר יחיד של עובדי GPU לביצוע כל שלבי צינור העיבוד, כולל השלב שדורש הרבה משאבי CPU. זה עלול להוביל לניצול חלקי של משאבי ה-GPU כשמאגר העובדים מבצע את השלב שדורש הרבה משאבי CPU.
אם ההתאמה הנכונה מופעלת ורמז למשאב מוחל על השלב שדורש GPU, צינור העיבוד ייצור שני מאגרי עובדים נפרדים, כך שהשלב שדורש CPU יבוצע על ידי מאגר העובדים של ה-CPU, והשלב שדורש GPU יבוצע על ידי מאגר העובדים של ה-GPU.
בציר הזמן של הצינור הזה, בטבלה של התאמה אוטומטית לעומס אפשר לראות שמאגר העובדים שמבצע את השלב שדורש הרבה משאבי מעבד (CPU), Pool 0, גדל בהתחלה ל-99 עובדים ואחר כך קטן ל-87 עובדים. מאגר העובדים שמבצע את השלב שדורש GPU, Pool 1, מוגדל ל-13 עובדים:
תרשים ניצול המעבד (CPU) מראה שעובדים בשני מאגרי העובדים מציגים ניצול גבוה של המעבד:
פתרון בעיות שקשורות להתאמה נכונה
בקטע הזה מפורטות הוראות לפתרון בעיות נפוצות שקשורות להתאמה נכונה.
הגדרות אישיות לא תקינות
כשמנסים להשתמש בהתאמה לימין, מופיעה השגיאה הבאה:
Workflow failed. Causes: One or more operations had an error: 'operation-OPERATION_ID':
[UNSUPPORTED_OPERATION] 'NUMBER vCpus with NUMBER MiB memory is
an invalid configuration for NUMBER count of 'GPU_TYPE' in family 'MACHINE_TYPE'.'.
השגיאה הזו מתרחשת כשסוג ה-GPU שנבחר לא תואם לסוג המכונה שנבחר. כדי לפתור את השגיאה הזו, צריך לבחור סוג GPU וסוג מכונה שתואמים זה לזה. פרטים על תאימות זמינים במאמר בנושא פלטפורמות GPU.
איך לוודא שהאוזניות מתאימות
כדי לוודא שהתאמה נכונה מופעלת, אפשר לעיין במדדי התאמה אוטומטית לעומס (automatic scaling) ולוודא שהעמודה Worker pool מוצגת ושיש בה רשימה של מאגרי משאבים שונים:
ביצועים של התאמה לסטרימינג
יכול להיות שצינורות סטרימינג עם התאמה נכונה לא תמיד יניבו ביצועים טובים יותר מצינורות בלי התאמה נכונה. לדוגמה:
- הצינור משתמש ביותר עובדים
- זמן האחזור של המערכת ארוך יותר או שהתפוקה נמוכה יותר
- הגדלים של מאגרי העובדים משתנים בתדירות גבוהה יותר, או שלא מתייצבים
אם אתם רואים את זה בצינור הנתונים שלכם, אתם יכולים להשבית את ההתאמה הנכונה על ידי הסרת --experiments=enable_streaming_rightfitting אפשרות צינור הנתונים. בנוסף, צינורות סטרימינג עם התאמה נכונה שמופעלת באמצעות רמזים למשאבי Accelerator עשויים להשתמש ביותר מ-Accelerator מהרצוי. אם אתם רואים את זה בצינור עיבוד הנתונים שלכם, אתם יכולים להגדיר מספר מקסימלי של מאיצים שצינור עיבוד הנתונים משתמש בהם באמצעות הגדרת אפשרות צינור עיבוד הנתונים --experiments=max_num_accelerators=NUM.