התאמה דינמית של קטעי Thread לעומס היא חלק מחבילת התכונות של Dataflow להתאמה אנכית של קטעי Thread לעומס. התכונה הזו משלימה את תכונת התאמה אוטומטית לעומס אופקית של Dataflow, כי היא משנה את מספר המשימות המקבילות, שנקראות גם חבילות, שכל worker של Dataflow מריץ. המטרה היא להגדיל את היעילות הכוללת של צינור עיבוד הנתונים שלכם ב-Dataflow.
כשמפעילים צינור עיבוד נתונים ב-Dataflow, העיבוד מתבצע במקביל בכמה מכונות וירטואליות (VM) של Compute Engine, שנקראות גם עובדים (workers). שרשור הוא משימה אחת שניתנת להרצה ופועלת בתוך תהליך גדול יותר. Dataflow מפעיל כמה שרשורים בכל עובד.
כשהתכונה 'התאמה דינמית של קטעי Thread לעומס' מופעלת, שירות Dataflow בוחר באופן אוטומטי את מספר ה-Thread המתאים להרצה בכל worker של Dataflow. כל שרשור מריץ משימה, ולכן הגדלת מספר השרשורים מאפשרת להריץ יותר משימות במקביל בתהליך עובד. כשמשתמשים בתכונה הזו עם התכונה של התאמה אוטומטית לעומס אופקית, מספר השרשורים הכולל שמשמשים את הפייפליין נשאר זהה, אבל נעשה שימוש בפחות workers.
התאמה דינמית של מספר השרשורים משתמשת באלגוריתם כדי לקבוע כמה שרשורים כל תהליך עובד צריך, על סמך אותות של ניצול משאבים שנוצרים במהלך ההפעלה של צינור הנתונים. מידע נוסף זמין בקטע איך זה עובד בדף הזה.
יתרונות
להתאמה דינמית של קטעי Thread לעומס יש כמה יתרונות פוטנציאליים.
- מאפשר לעובדי Dataflow לעבד נתונים בצורה יעילה יותר על ידי שיפור השימוש במעבד ובזיכרון לכל עובד.
- שיפור העיבוד המקביל על ידי שינוי מספר שרשורי העובדים שזמינים להרצת משימות במקביל במהלך הפעלת צינור הנתונים.
- הפחתת מספר העובדים שנדרשים לעיבוד מערכי נתונים גדולים, מה שעשוי להפחית את העלויות.
תמיכה ומגבלות
- התאמה דינמית של קטעי Thread לעומס זמינה לצינורות שמשתמשים ב-SDK של Java, Python ו-Go.
- המשימה ב-Dataflow צריכה להשתמש ב-Runner v2.
- יש תמיכה רק בצינורות להעברת נתונים באצווה.
- יכול להיות שצינורות (pipelines) שדורשים הרבה משאבים מהמעבד או מהזיכרון לא יפיקו תועלת מהתאמה דינמית של מספר ה-threads.
- התאמה דינמית של קטעי Thread לעומס לא מקצרת את משך הזמן שנדרש להשלמת משימת Dataflow.
- התאמה דינמית של קטעי Thread לעומס מיועדת בעיקר לבעיות בזיכרון שקשורות לנתונים. אם נגמר לכם הזיכרון בגלל הגודל של מודל ML, תוכלו לעיין במאמר בנושא ניהול זיכרון.
- בתרחישי שימוש שדורשים הרבה זיכרון, יכול להיות שעדיין תצטרכו לכוונן את
num_worker_harness_threadsבאופן ידני או לעבור לסוג מכונה עם הרבה זיכרון.
איך זה עובד
התאמה דינמית של קטעי Thread לעומס משתמשת בעקרונות של כוונון אוטומטי כדי לשנות באופן דינמי את מספר ה-Thread כלפי מעלה או מטה בכל worker במאגר ה-worker-ים של 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 כדי לבדוק אם התאמה דינמית של קטעי Thread לעומס מופעלת. כשהאפשרות הזו מופעלת, בחלונית 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.
השגיאה הזו מתרחשת כשמשביתים במפורש את 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 של צינור העברת הנתונים מצינור העברת הנתונים.