פיתוח מערכת ללמידה מבוזרת של מודלים

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

שירותי פיתוח בלוקצ'יין

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1365
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

אימון מודלים מבוזר: היכן נשבר המעגל המרכזי

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

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

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

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

ארכיטקטורות של למידה מבוזרת של מודלים וההשפעה שלהן

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

למידה פדרטיבית: הנתונים אינם יוצאים מהמתחם

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

כאשר יש 50+ צמתים ואגרגציה פעם בעידן, שיעור הדיוק הנשמר ביחס ללמידה ריכוזית נשאר בטווח של 2-4%, והתעבורה לכל צומת יורדת בסדר גודל לעומת העברת מערכי נתונים.

שרת פרמטרי: הרכבה צפויה מראש

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

למידה אסינכרונית: הצמתים אינם ממתינים זה לזה

צומת איטי או מנותק אינו מעכב את האחרים — עדכונים מתקבלים לפי הגעתם. זה המפתח לעמידות בפני כשל ברשתות עם ערוץ לא יציב. המחיר — גרדיאנטים מיושנים: בלי הגבלה על ה"גיל" שלהם התכנסות המודל מתפזרת, ולכן מציבים סף פיגור וזורקים חבילות ישנות מדי.

סכמות היברידיות ודחיסת עדכונים

בפועל לרוב מרכיבים היברידי: סבבים פדרטיביים בתוספת קליטה אסינכרונית בתוך הסבב. קוונטיזציה של משקלים לפני השליחה מקטינה את נפח העדכון פי 4-8, והעברה דלילה — רק שינויים משמעותיים — מקטינה אותו שוב פי שניים. זה מאפשר לשמור על התכנסות המודל בערוצים צרים בלי גידול בזמן ההרכבה.

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

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

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

כיצד אנו מיישמים קו מתאר של למידה מבוזרת

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

  1. ביקורת נתונים. עורכים מלאי של מקורות לפי צמתים: נפח, תיוג, שיעור ערכים חסרים, שדות רגישים. מתעדים מה נשאר במקום ואינו יוצא מקו המתאר, ומה עובר לאימון בצורה אנונימית. בפלט — מפת נתונים עם כללי בחירה.
  2. סכימת צמתים. מגדירים תפקידים: צמתי אימון, אגרגטור, מתאם סבבים, אחסון נקודות ביקורת. קובעים דרישות לערוץ והתנהגות בעת ניתוק הקשר, כך שנשירת צומת לא תעצור את הסבב.
  3. הגדרת אגרגציה. בוחרים כלל איחוד עדכונים ומשקולות משתתפים: חלקים שווים, ביחס לנפח הנתונים או עם חיתוך חריגים. מגדירים תדירות סבבים וסף שמתחתיו עדכון אינו מתקבל.
  4. בדיקת התכנסות. מריצים את קו המתאר על סט בקרה: משווים איכות לאימון מרכזי על אותם נתונים, בוחנים פיזור מדדים בין צמתים ועמידות לניתוק חלק מהמשתתפים. סטייה מעל המותר — חוזרים לסכימת הצמתים או לכלל האגרגציה.
  5. תקנון תפעול. מתארים הפעלת סבבים, רוטציה של צמתים, עדכון קוד במשתתפים וחזרה לנקודת ביקורת קודמת ללא אובדן התקדמות.
  6. ניטור והתראות. דאשבורד לפי סבבים, זמן אגרגציה, שיעור עדכונים שהתקבלו ואיכות בולידציה; התראות על קיפאון סבב והידרדרות מדדים.
  7. מסירת קו המתאר. מוסרים קונפיגורציות של צמתים ואגרגטור, סכימות זרימת נתונים, מדיניות גישה, תקנון והוראות לפריסת משתתף חדש.

תארו את המשימה — נחזור עם הערכה ותוכנית לפי שלבים.

במה שונה למידה מבוזרת מרכזית מלמידה מבוזרת על אשכול אחד?

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

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

גם הדרישות לערוץ שונות. באשכול השהיות הרשת צפויות וקטנות, ולכן החלפה סינכרונית עובדת באופן צפוי. ברשת מבוזרת מרכזית המשתתפים מפוזרים גיאוגרפית, הערוצים разнородיים, וחלק מהחיבורים אינם יציבים.

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

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

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

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

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

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

מקרה בוחן: אימון מבוזר של מודל על 40 צמתים ללא אובדן דיוק

המשימה לא הייתה "לפזר את החישוב", אלא לגרום לאימון מבוזר של מודלים להניב את אותו דיוק כמו אימון במרכז אחד. הלקוח — צוות מחקר — נתקל בתקרת זכוכית: צומת אחד עם כמה מאיצים אסף תקופת אימון ב-14 שעות, וכל שינוי של היפר-פרמטרים חייב עוד יממה של המתנה.

במקביל, פעמיים במהלך ריצה התהליך קרס באמצע תקופה, והכול התחיל מאפס — נקודות ביקורת נכתבו אחת לכמה שעות.

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

מה השתנה במדדים

מדד לפני אחרי
זמן הרכבה של תקופה אחת 14 שעות 2 ש' 40 דק'
שיעור הדיוק שנשמר קו בסיס 99.4% ממנו
אובדן התקדמות בעת כשל צומת כל התקופה צעד סנכרון אחד
הפעלות מחדש ידניות לריצה 2-3 0

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

מדוע הדיוק לא נפגע

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

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

תאימות, הגירה וחזרה לאחור: ספקות טכניים

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

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

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

מה אם יהיה צורך לחזור לסכמה מרכזית?

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

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

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

לאחר המסירה תקבלו לידיכם:

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

תארו את התשתית הנוכחית שלכם ואת המגבלות על הנתונים — נחזור עם הערכה ותוכנית הגירה לפרימטר שלכם.