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

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

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

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

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

יתרונות

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

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

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

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

איך זה עובד

התכונה 'שינוי דינמי של מספר השרשורים' משתמשת בעקרונות של כוונון אוטומטי כדי לשנות באופן דינמי את מספר השרשורים כלפי מעלה או מטה בכל עובד במאגר העובדים של 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

המשך

--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 כדי לבדוק אם התכונה 'שינוי דינמי של מספר השרשורים' מופעלת. כשהאפשרות הזו מופעלת, בחלונית Job info של Dataflow, בשורה dataflowServiceOptions בקטע Pipeline options, מוצג enable_dynamic_thread_scaling.

פתרון בעיות

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

הביצועים יורדים כשהתכונה 'התאמה דינמית של קטעי 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.

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

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

שדרוג ה-SDK

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

Java

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

Python

Unable to create workflow, because using Portable Runner with Apache Beam SDK requires the SDK version 2.21.0 or later. Upgrade your SDK, and then resubmit your job.

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

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

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

אחרי שמפעילים את התכונה 'התאמה דינמית של קטעי 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 מהצינור.