אימון מבוזר: היכן נשברת מכונה בודדת
מכונה בודדת מפסיקה להתרחב הרבה לפני שהמודל נתקל בתקרת האיכות. כל עוד הנתונים והפרמטרים מועטים, צוואר הבקבוק של האימון צפוי: הוספת אפוכות — שיפור במדד. בגודל מסוים של המודל והקורפוס הכלל הזה נשבר, וזמן האפוכה הופך ללא־ליניארי — כל איטרציה הבאה עולה יותר מהקודמת באותה תוספת איכות.
הכשל הבא — הצפת הזיכרון של המאיץ. הוא מגיע לא בהתחלה, אלא באמצע האימון: אקטיבציות, מצב האופטימיזר וחוצצי עזר מצטברים, וההרצה נופלת בשלב שכבר הגעתם אליו. לא ניתן להקטין את גודל האצווה בדיעבד בלי לשנות את דינמיקת האימון, ובלי מצב שמור — רק להתחיל מחדש.
היקר ביותר בתוצאותיו — ניתוק של הרצה ארוכה. אימון בן ימים רבים נפסק עקב אתחול של צומת, הידרדרות של כונן או שגיאת רשת, ובלי נקודת ביקורת תקינה ההתקדמות מתאפסת. לאחר מכן נוצרת השבתה של משאבי המחשוב: המאיצים ממתינים עד שהמהנדס יברר את הסיבה וירכיב מחדש את ההרצה ידנית.
מפרקים כיצד זה נסגר: הפרדת מצב המודל והנתונים בין הצמתים, סנכרון גרדיאנטים, נקודות ביקורת סדירות והפעלה מחדש מהשלב האחרון במקום התחלה מאפס.
אפקט מדיד: מהירות האפוכה, השבתה, כשלים
האפקט של תצורת ריבוי־צמתים נראה בארבעה גדלים: זמן מחזור האימון, שיעור ההשבתה, סוג הכשל וחזרתיות התוצאה. כולם נמדדים מאותה הרצה, ולכן אנו משווים מצב חד־צומתי וריבוי־צומתי לפי אותה מתודולוגיית מדידה — כמו בסטים פתוחים של MLCommons, כדי שהמספרים יהיו ברי־השוואה לחיצוניים.
| מדד | כיצד מודדים | מה משתנה |
|---|---|---|
| זמן מחזור האימון | שניות לאפוכה בגודל אצווה קבוע | האפוכה קצרה פי כמה על 8–16 צמתים |
| שיעור ההשבתה | שיעור זמן ההמתנה על המחשבים | מעשרות אחוזים ליחידות |
| סוג הכשל | הרצות שנקטעו עקב תקלת צומת | צומת נופל — ההתקדמות לא אבדה |
| חזרתיות התוצאה | פיזור המדד הסופי בין הרצות | עקומות ה-loss חופפות בגבולות הרעש |
זמן מחזור האימון נמדד בשניות לאפוכה בגודל אצווה זהה. ההאצה אינה ליניארית: על 8–16 צמתים האפוכה מתקצרת פי כמה, ובהמשך הצמיחה נתקלת בחילופי הגרדיאנטים ובהמתנה לצומת האיטי ביותר.
אמת מידה מעשית — לשמור על זמן האפוכה באותו סדר גודל כמו זמן שמירת נקודת הביקורת, אחרת התועלת מהצמתים נאכלת על ידי השבתות.
שיעור ההשבתה נמדד כזמן שבו המחשבים ממתינים לנתונים, לנקודת ביקורת או למשתתף מפגר. טעינת נתונים מקבילה, חפיפה בין שמירת נקודות הביקורת לחישובים וסנכרון נדיר יותר מורידים אותו מעשרות אחוזים ליחידות.
בד בבד נעלם סוג הכשל "צומת אחד נפל — איבדנו יממה של התקדמות": האימון ממשיך על הנותרים, והצומת החוזר מרים מנקודת הביקורת האחרונה.
חזרתיות נשמרת על זרעים קבועים, דימוי סביבה אחיד ויומן מדדים לפי שלבים — אז שתי הרצות זהות מניבות עקומות loss חופפות בגבולות הרעש של אופרטורים בודדים, והתוצאה משוחזרת בעת ניתוח רגרסיה.
מצבי אימון מבוזר: השוואת גישות
בחירת הסכימה נקבעת על ידי שני גדלים: כמה פרמטרים לא נכנסים לזיכרון של מאיץ אחד, ובאיזו מהירות הצמתים מחליפים גרדיאנטים. מקביליות נתונים פשוטה למימוש, אך משכפלת משקלות ומצבי אופטימיזר בכל צומת — עם גידול מספר הצמתים זה נתקל ברשת ובזיכרון. מקביליות מודל וסכימת צינור חותכות את הרשת עצמה, אך מוסיפות השבתות ודורשות איזון ידני.
| סכימה | מתי מתאימה | מגבלות |
|---|---|---|
| מקביליות נתונים | המודל נכנס כולו לזיכרון הצומת, צוואר הבקבוק — זמן המעבר על המדגם | שכפול משקלות ומצבי אופטימיזר, חילופי גרדיאנטים גדלים עם מספר הצמתים |
| מקביליות מודל | שכבה או בלוק בודד לא נכנסים לזיכרון של מאיץ אחד | חילופי אקטיבציות בתוך המעבר הישיר, רגישות לטופולוגיית הקשרים |
| מקביליות צינורית | רשתות עמוקות של בלוקים אחידים | השבתות בגבולות השלבים, איזון ידני של שכבות בין השלבים |
| סכימה היברידית | מודלים גדולים שבהם סכימה אחת לא נכנסת למשאבים | תצורה מורכבת, דיבוג של כמה ממדים בו-זמנית |
הסכימות אינן סותרות זו את זו: הפרדת מצבי האופטימיזר מעל מקביליות נתונים מסירה את המגבלה המרכזית — הזיכרון למומנטים ולעותקי המשקלות מתחלק בין הצמתים ולא משוכפל, ונעשה זמין גודל אצווה גדול יותר.
בהמשך מרחיבים את הסכימה לפי ממדים: תחילה בוחנים מה חסר — זיכרון או מהירות חילופים — ורק אז מפעילים את הבא.
שלבי ההטמעה: מביקורת ועד מסירה לתפעול
אימון מבוזר כמעט לעולם לא נתקל במתמטיקה של המודל — הוא נתקל בתשתית. המאיצים מושבתים בהמתנה לחילופים, צמתים נושרים מהקבוצה באמצע האפוכה, והתוצאה אינה משוחזרת בהרצה חוזרת של אותה תצורה.
מפרקים כיצד זה נסגר על PyTorch: ביקורת צינור האימון, סכימת ההפצה, כיוונון החילופים, בדיקה בכשלים ומסירה לצוות.
- ביקורת צינור האימון ופרופיל העומס של ההרצות. מצלמים תמונה לפי המצב בפועל: כמה זמן הולך לחישובים, כמה להמתנה לחילופים, ומה העומס בכל צומת. הפרופיל מראה היכן בדיוק הולכת לאיבוד היכולת להתרחב — בהעברת גרדיאנטים, בהכנת הנתונים או בסנכרון.
- סכימת ההפצה. בוחרים טופולוגיה למשימה: מקביליות נתונים, מודל או היברידית, מספר הצמתים וגודל המנה לכל צומת. הסכימה מתועדת בכתב — עם הנמקה מדוע עם גידול הצמתים ההאצה מפסיקה להיות ליניארית.
- כיוונון החילופים בין הצמתים. בוחרים תעבורה וקיבוץ חילופים, מכסים את ההעברה בחישובים, מפרידים תעבורה כך שלא תתחרה על הערוץ. בנפרד בודקים התנהגות בסוגי חיבורים שונים בתוך האשכול.
- בדיקה בכשל. במכוון מנתקים צומת, קוטעים חיבור, מפעילים את המשימה מחדש מנקודת הביקורת. מתעדים את זמן השחזור ואת העובדה שהאימון ממשיך מאותה נקודה ולא מתחיל מחדש.
- שחזוריות התוצאות. מקבעים את סדר הנתונים, תנאי ההתחלה והסביבה כך שהרצה חוזרת תיתן תוצאה מתכנסת. זה מה שבלעדיו אי אפשר לא להשוות תצורות ולא להגן על המסקנות מול העסק.
- קבלה ומסירה לצוות. מריצים הרצת בקרה בהיקף אמיתי, מאמתים את המדדים מול התוכנית ומעבירים ללקוח תצורות, סכימה, נהל שחזור והוראות. המהנדסים של הלקוח חוזרים על ההרצה בעצמם — זהו קריטריון הקבלה.
תוצרי ההטמעה: תצורות, סכימות, נהלים
ההטמעה של אימון מבוזר מסתיימת לא בהרצה מוצלחת של המשימה, אלא במסירה לצוות הלקוח של מערך תוצרים שלפיהם אפשר לתפעל את הפתרון, להרחיב ולשחזר בלעדינו. כל האמור נשמר במאגר לצד הקוד ובבסיס הידע הפנימי — לא בהתכתבות ולא בראשו של מהנדס שעזב את הפרויקט.
- תצורות הרצה — קבצים נפרדים עם מספר הצמתים, גודל מנת הנתונים לכל התקן, אסטרטגיית ההקבלה ותדירות שמירת נקודות הביקורת. תיקונים מוכנסים בתצורה, ולא בקוד.
- סכמת הטופולוגיה — אילו צמתים משתתפים באימון, כיצד הם מחליפים עדכוני מודל, היכן עובר צוואר הבקבוק בערוץ וכיצד להרחיב את האשכול בכפולות.
- מדיניות גישה ותפקידים — הפרדה ברמת התפקידים: מי מריץ את האימון, מי רואה את המדדים, מי משנה תצורות ונתונים. הרשאות אינן ניתנות באופן אישי, הגישה נשללת בהחלפת תפקיד.
- נוהל שחזור הרצה — סדר הפעולות בנפילת צומת או באובדן חיבור: מאיזו נקודת ביקורת להרים, מה לבדוק ביומנים, ובאילו מקרים מופעל מחדש האשכול כולו.
- תיעוד למהנדסים — ייעוד כל פרמטר, סימנים של כשלים טיפוסיים, סדר עדכון הסביבה והתלויות בין המשימות.
- מדידת ביצועים בסיסית — זמן שלב האימון, ניצולת ההתקנים ונפח הנתונים לפני השינויים, כדי שכל אופטימיזציה עתידית תימדד ביחס לנקודה מובנת.
המסירה מלווה בדיון עם הצוות שלכם: עוברים על התצורות, משחזרים תרחיש חירום על הסטנד ומשיבים על שאלות לכל סעיף.
מקרה בוחן: האצת ניסויים ועמידות בפני כשלים
אימון המודל הראשי התנהל על צומת אחד: מחזור ניסוי מלא נמשך כאחד עשר ימים, ותור ההשערות נמתח על פני חודשים. ארבע הרצות מתוך עשר נקטעו בשלבים מאוחרים — הצפת זיכרון, נפילת תהליך, ניתוק החיבור למאגר נקודות הביקורת. עבודה כמעט שהושלמה החלה מחדש.
מה שינינו
העברנו את האימון למספר צמתים עם מאגר משותף של נקודות ביקורת ועדכון מסונכרן של פרמטרים. המשימה מתוארת באופן הצהרתי: אותו מתכון עובר גם על שני צמתים וגם על שמונה, בלי שינויים בקוד האימון.
את התשתית הרכיבו על PyTorch ואמצעי תזמור תקניים — המתזמן מרים את התהליך בעצמו על הצמתים הזמינים ומשחררם עם סיומו.
מדדים לפני ואחרי
- מחזור אימון: 11 ימים → 2.5 ימים.
- הרצות מוצלחות: 6 מתוך 10 → 19 מתוך 20.
- שחזור לאחר כשל צומת: מאפס → מנקודת הביקורת האחרונה, כ� שבע דקות.
- עומס המאיצים: 45% → 88%.
כשל צומת חדל להיות אירוע: המתזמן מוציא את הצומת שנפל, האימון ממשיך על הנותרים מאותה נקודת ביקורת, והצומת שהתפנה חוזר למצבת. משימות שנמשכות שבועות מגיעות לסיומן — לא היו קריסות תשתית בתקופת התצפית, והצוות מריץ פי שלושה יותר השערות באותו זמן.
מה לעשות אם המודל לא נכנס לזיכרון הצומת?
המודל מפסיק להיכנס לצומת לא בגלל המשקלות בלבד. את הזיכרון מחזיקים גרדיאנטים, מצבי אופטימיזר ואקטיבציות ביניים, וברצפים ארוכים דווקא האקטיבציות הופכות לצרכן העיקרי. הכשל מגיע לא בהתחלה, אלא באמצע השלב, כאשר פיזור השיא עולה על הזמין — ולכן מחשבים לא פרופיל ממוצע אלא פרופיל שיא.
החישוב נעשה מתקציב: פרמטרים ועוד גרדיאנטים ועוד מצבי אופטימיזר ועוד חוצצי אקטיבציות, והכל עם מרווח לפרגמנטציה ולצרכים שירותיים של הסביבה. מחלקים בזיכרון השימושי של התקן אחד, מעגלים כלפי מעלה — מקבלים את מספר המאיצים המזערי, ולפי הצפיפות שלהם גם את מספר הצמתים.
בהמשך בודקים שהמעבר למספר צמתים לא יאכל את הרווח: חילופים בין צמתים יקרים באופן ניכר מאשר בתוך צומת אחד.
סכימת ההקבלה נבחרת לפי מה בדיוק לא נכנס. אם המודל נכנס כולו, והכול נתקל בנפח הנתונים — די בהפרדת נתונים בין התקנים. אם שכבה בודדת לא עוברת, מפצלים אותה בין התקנים. אם חסר עומק — חותכים את המודל לבלוקים ומריצים בצינור במנות קטנות, כדי שהמאיצים לא יושבתו.
בתצורות גדולות משלבים סכימות: מצב האופטימיזר נשמר באופן מבוזר, והחישובים משוכפלים רק במקום שבו הדבר מוצדק.
לפני המעבר למספר צמתים כדאי לסחוט צומת אחד: חישוב מחדש של אקטיבציות במקום אחסונן מוריד את הצריכה פי כמה במחיר חישובים נוספים, דיוק מצטבר מופחת חוסך עוד חלק, ופריקת חלק מהמצב משחררת את המאיץ. טכניקות אלה אינן מחליפות את ההתרחבות, אך לעתים קרובות דוחות אותה בסדר גודל של גודל המודל.
בפועל אנו תחילה מצלמים פרופיל צריכה בהרצה קצרה, מחשבים את הצורך בצמתים עם מרווח ובוחרים סכימה לצוואר הבקבוק הספציפי, ולא "למקסימום". אחר כך בודקים את ההתרחבות בפועל: בכמה פעמים מואץ השלב בהכפלת מספר הצמתים. אם הצמיחה יורדת — מחליפים סכימה או טופולוגיית חילופים, ולא רק מוסיפים כוח.
שאלות בנוגע לתשתית, נתונים ושחזוריות
לפני תחילת האימון המבוזר עולות אותן ספקות — לא לגבי המודל, אלא לגבי הסביבה סביבו. להלן חמש מהן עם תיאור כיצד אנו בודקים אותן.
האשכול שלנו תפוס — האם האימון ייכנס?
מודדים את החילופים בין הצמתים: צוואר הבקבוק במצב מבוזר הוא סנכרון המשקלות, ולא החישובים. בערוץ חלש מורידים את דרגת ההקבלה או מסנכרנים לעתים רחוקות יותר — אין צורך להחליף את מצבת הציוד.
מה צריך לעשות עם הנתונים?
ספרייה אחת עם ניהול גרסאות, שרדינג לפי צמתים וחלוקה קבועה לאימון ולוולידציה בתצורת ההרצה. כך כל צומת קורא את חלקו בלי כפילות ובלי חוסר סנכרון.
התוצאה תשתחזר על מספר צמתים שונה?
כן, אם סדר השרדינג, זרע המחולל וגרסאות הסביבה בדימוי קבועים. מדדים ותמונות מצב נכתבים ליומן משותף — עקומות ההרצות ברות־השוואה זו לזו.
אפשר לחזור להרצה על מכונה אחת?
את התצורה כותבים כך שדרגת ההקבלה השווה לאחד תהיה מצב תקני: אותה נקודת כניסה, אותם נתונים, אותו יומן. בהידרדרות החילופים ממשיכים מהתמונת המצב האחרונה על מכונה אחת.
כמה זמן זה ייקח מהצוות שלנו?
מהמהנדסים שלכם נדרשים גישות, חשבונות, חלון בלוח הזמנים של האשכול ואיש קשר לשאלות תשתית. את הכיוונון, המדידות וניתוח הכשלים אנחנו לוקחים על עצמנו.
את הספקות הללו סוגרים לפני ההרצה הראשונה — את השאר מפרקים במהלך העבודה.נדון במשימה: נבנה סכימה ותוכנית הטמעה
נקודת המוצא — דיון במשימה, ולא בחירת ציוד. מספיקה לנו שיחת וידאו אחת עם המהנדס שלכם וחתך של נתונים אמיתיים: אחריה נחזור עם סכימת הפצה, הערכת היקף העבודה ותוכנית הטמעה.
מה נדרש מכם להתחלה:
- מדד יעד: מה נחשב לתוצאה מוצלחת — איכות המודל, זמן מחזור אימון אחד או מהירות תגובת המודל בעבודה.
- חתך נתונים עם תיוג או כללים להשגתו. את סכימת ההפצה בודקים על חתך אמיתי, ולא על סינתטיקה.
- מגבלות תשתית: כמה צמתים זמינים, איזו רשת ביניהם, מי בעל האשכול.
- מדיניות נתונים: היכן מותר לאחסן, למי פתוחה הגישה, מה אסור להוציא מחוץ למתחם.
- חלון שבו אפשר לתפוס משאבים לאימון, והאחראי על קבלת התוצאה.
- סטק האימון הנוכחי: ספרייה, פורמט נקודות הביקורת של המודל, כיצד המשימות מופעלות כיום.
הצעד הראשון — הרצת ניסיון על נתונים אמיתיים על סט מצומצם. היא מראה את המהירות בפועל של שלב האימון, את צוואר הבקבוק בחילופים בין הצמתים ואת סוג הכשל לפני שנכבוש את כל האשכול.
לפי תוצאות הרצת הניסיון ההערכה של היקף העבודה מתחדדת, ותוכנית ההטמעה נקבעת בשלבים עם תוצאה ניתנת לבדיקה בכל אחד.







