התאמה דינמית של קטעי Thread לעומס

התאמה דינמית של קטעי Thread לעומס היא חלק מחבילת התכונות של Dataflow להתאמה אנכית של קטעי Thread לעומס. התכונה הזו משלימה את תכונת ההתאמה האוטומטית לעומס האופקית של Dataflow, כי היא משנה את מספר המשימות המקבילות, שנקראות גם חבילות, שכל עובד של Dataflow מריץ. המטרה היא להגדיל את היעילות הכוללת של צינור עיבוד הנתונים של Dataflow.

כשמפעילים צינור עיבוד נתונים ב-Dataflow, העיבוד מתבצע במקביל בכמה מכונות וירטואליות (VM) של Compute Engine, שנקראות גם עובדים (workers). שרשור הוא משימה אחת שניתנת להרצה ופועלת בתוך תהליך גדול יותר. מערכת Dataflow מפעילה כמה שרשורים בכל עובד.

כשהתכונה 'התאמה דינמית של קטעי Thread לעומס' מופעלת, שירות Dataflow בוחר באופן אוטומטי את מספר השרשורים המתאים להפעלה בכל עובד Dataflow. מכיוון שכל שרשור מריץ משימה, הגדלת מספר השרשורים מאפשרת להריץ יותר משימות במקביל בעובד. כשמשתמשים בתכונה הזו עם התכונה של התאמה אוטומטית לעומס אופקית, מספר השרשורים הכולל שמשמשים את הצינור נשאר זהה, אבל נעשה שימוש בפחות עובדים.

התאמה דינמית של קטעי Thread לעומס משתמשת באלגוריתם כדי לקבוע כמה threads כל worker צריך, על סמך אותות של ניצול משאבים שנוצרים במהלך ההרצה של צינור העיבוד. מידע נוסף זמין בקטע איך זה עובד בדף הזה.

יתרונות

להתאמה דינמית של קטעי Thread לעומס יש את היתרונות הפוטנציאליים הבאים.

  • מאפשר לעובדי Dataflow לעבד נתונים בצורה יעילה יותר על ידי שיפור השימוש במעבד ובזיכרון לכל עובד.
  • שיפור העיבוד המקביל על ידי שינוי מספר השרשורים של העובדים שזמינים להרצת משימות במקביל במהלך ביצוע צינורות.
  • הפחתת מספר העובדים שנדרשים לעיבוד מערכי נתונים גדולים, מה שעשוי להפחית את העלויות.

תמיכה ומגבלות

  • התאמה דינמית של קטעי Thread לעומס זמינה לצינורות שמשתמשים ב-SDK של Java,‏ Python ו-Go.
  • המשימה ב-Dataflow צריכה להשתמש ב-Runner v2.
  • יש תמיכה רק בצינורות להעברת נתונים באצווה.
  • יכול להיות שצינורות (pipelines) שדורשים הרבה משאבי מעבד או זיכרון לא יפיקו תועלת מהתאמה דינמית של מספר ה-threads.
  • התאמה דינמית של קטעי Thread לעומס לא מקצרת את משך הזמן שנדרש להשלמת עבודת Dataflow.
  • התאמה דינמית של קטעי Thread לעומס מיועדת בעיקר לבעיות בזיכרון שקשורות לנתונים. אם נגמר לכם הזיכרון בגלל הגודל של מודל ML, כדאי לעיין במאמר בנושא ניהול זיכרון.
  • בתרחישי שימוש שדורשים הרבה זיכרון, יכול להיות שעדיין תצטרכו לכוונן את num_worker_harness_threads באופן ידני או לעבור לסוג מכונה עם הרבה זיכרון.

איך זה עובד

התאמה דינמית של קטעי Thread לעומס משתמשת בעקרונות של כוונון אוטומטי כדי לשנות באופן דינמי את מספר השרשורים כלפי מעלה או מטה בכל עובד במאגר העובדים של Dataflow. מספר השרשורים משתנה באופן עצמאי בכל עובד. כל שרשור מריץ משימה. הגדלת מספר השרשורים מאפשרת להריץ יותר משימות במקביל בעובד. כשהמשימות מסתיימות והשרשורים כבר לא נחוצים, מספר השרשורים מצטמצם. אלגוריתם קובע כמה שרשורים כל עובד צריך.

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

  • ניצול הזיכרון בתהליך העבודה נמוך מ-50%.
  • ניצול המעבד (CPU) בתהליך העבודה נמוך מ-65%.

מספר השרשורים בתהליך עבודה מצטמצם למינימום של שרשור אחד לכל vCPU כשמתקיים התנאי הבא:

  • ניצול הזיכרון בתהליך העובד גבוה מ-70%.

כדי לראות את השימוש בזיכרון וב-CPU של העבודה, משתמשים בכרטיסייה Job metrics (מדדי עבודה) בממשק האינטרנט של Dataflow.

כדי לוודא שההמלצות תקפות, Dataflow ממתין עד ששימוש המשאבים מתייצב לפני שהוא שולח המלצות לעובדים. לדוגמה, יכול להיות שהשימוש בזיכרון ובמעבד יהיה בטווח של שדרוג, אבל מכיוון שהשימוש במשאבים עדיין גדל, Dataflow לא ישלח המלצה. אחרי שרמת ניצול המשאבים מתייצבת, Dataflow שולח המלצה.

אם מתרחשת שגיאת חוסר זיכרון (OOM), שינוי הגודל של השרשור מושבת באופן אוטומטי, וצינור הנתונים פועל עם שרשור אחד לכל vCPU.

הפעלה של התאמה דינמית של קטעי Thread לעומס

כדי להפעיל התאמה דינמית של קטעי Thread לעומס, משתמשים באפשרות הבאה של שירות Dataflow.

Java

--dataflowServiceOptions=enable_dynamic_thread_scaling

Python

--dataflow_service_options=enable_dynamic_thread_scaling

Go

--dataflow_service_options=enable_dynamic_thread_scaling

כשמפעילים את ההתאמה הדינמית של קטעי Thread לעומס, אפשר גם להגדיר את המספר ההתחלתי והמקסימלי של מכונות worker שזמינות לצינור במהלך ההרצה. מידע נוסף זמין במאמר בנושא אפשרויות של צינורות.

איך מוודאים שהתאמה דינמית של קטעי Thread לעומס מופעלת

כשהתכונה 'התאמה דינמית של קטעי Thread לעומס' מופעלת, ההודעה הבאה מופיעה בקובצי היומן של העובדים:

Enabling thread vertical scaling feature in worker.

כדי לראות את קובצי היומן של העובדים, משתמשים בחלונית השאילתה בLogs Explorer כדי לסנן את היומנים לפי שם היומן. משתמשים בשם היומן הבא במסנן:

projects/PROJECT_ID/logs/dataflow.googleapis.com%2Fharness

מספר השרשורים המומלץ מופיע בקובצי היומן של העובד. ההודעה הבאה כוללת את מספר השרשורים המומלץ:

worker_thread_scaling_report_response { recommended_thread_count: NUMBER }

אם ניצול המשאבים לא נמצא בטווח של שינוי הגודל, הערך שמוצג שווה למספר המעבדים הווירטואליים בעובד.

אפשר גם להשתמש במסוף Google Cloud כדי לבדוק אם ההגדרה של התאמה דינמית של קטעי Thread לעומס מופעלת. כשהאפשרות הזו מופעלת, בלוח Job info של Dataflow, בשורה dataflowServiceOptions בקטע Pipeline options, מוצג הערך enable_dynamic_thread_scaling.

פתרון בעיות

בקטע הזה מפורטות הוראות לפתרון בעיות נפוצות שקשורות להתאמה דינמית של קטעי Thread לעומס.

הביצועים יורדים כשהתכונה 'התאמה דינמית של קטעי Thread לעומס' מופעלת

הגדלת מספר ה-threads עלולה לגרום לבעיות בביצועים במקרים הבאים:

  • כשכמה תהליכים מנסים להשתמש באותו משאב, רק תהליך אחד יכול להשתמש במשאב והתהליכים האחרים צריכים לחכות. המצב הזה נקרא תחרות על משאבים. כשמתרחשת תחרות על משאבים, יכול להיות שביצועי צינור עיבוד הנתונים ירדו.
  • כשמתרחשות שגיאות של חוסר בזיכרון פנוי, ההתאמה הדינמית של קטעי Thread לעומס מושבתת. במקרים מסוימים, שגיאות שקשורות לזיכרון עלולות לגרום לכך שצינור עיבוד הנתונים ייכשל.

בודקים אם מספר השרשורים גדל. מידע על אימות מספר השרשורים המומלץ מופיע בקטע אימות שהגדלת מספר השרשורים מופעלת בדף הזה.

אם התכונה 'התאמה דינמית של קטעי Thread לעומס' מופעלת, כדי לפתור את הבעיה הזו, כשמריצים את צינור הנתונים, לא כוללים את אפשרות השירות 'התאמה דינמית של קטעי Thread לעומס'.

Unified worker … both enabled and disabled

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

The workflow could not be created. Causes: (ID): Unified worker misconfigured by user and was both enabled and disabled.

השגיאה הזו מתרחשת כשמשביתים באופן מפורש את Runner v2.

כדי לפתור את הבעיה, צריך להפעיל את Runner v2. מידע נוסף זמין בקטע הפעלת Dataflow Runner v2 בדף 'שימוש ב-Dataflow Runner V2'.

שדרוג ה-SDK

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

Java

Dataflow Runner v2 requires the Apache Beam Java SDK version 2.29.0 or higher. Please upgrade your SDK and resubmit your job.

Python

Dataflow Runner v2 requires the Apache Beam SDK, version 2.21.0 or higher. Please upgrade your SDK and resubmit your job.

השגיאה הזו מתרחשת כשאי אפשר להפעיל את Runner v2 כי גרסת ה-SDK לא תומכת בו.

כדי לפתור את הבעיה, צריך להשתמש בגרסת SDK שתומכת ב-Runner v2.

אי אפשר להפעיל את התכונה של שינוי גודל אנכי של השרשור

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

The workflow could not be created. Causes: (ID): Thread vertical scaling feature can not be enabled while number_of_worker_harness_threads is specified.

השגיאה הזו מתרחשת כשבצינור הנתונים מוגדר במפורש מספר השרשורים לכל עובד באמצעות numberOfWorkerHarnessThreads או number_of_worker_harness_threads אפשרות צינור הנתונים.

כדי לפתור את הבעיה, צריך להסיר את האפשרות numberOfWorkerHarnessThreads או number_of_worker_harness_threads מהצינור.