טכניקות לאימון רשתות עצביות גדולות PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

טכניקות לאימון רשתות עצביות גדולות

טכניקות לאימון רשתות עצביות גדולות

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

מקביליות נתונים

טכניקות לאימון רשתות עצביות גדולות

מקביליות צנרת

טכניקות לאימון רשתות עצביות גדולות

מקביליות טנזור

טכניקות לאימון רשתות עצביות גדולות

מקביליות מומחה

טכניקות לאימון רשתות עצביות גדולות

מקביליות נתונים

טכניקות לאימון רשתות עצביות גדולות

מקביליות צנרת

טכניקות לאימון רשתות עצביות גדולות

מקביליות טנזור

טכניקות לאימון רשתות עצביות גדולות

מקביליות מומחה

טכניקות לאימון רשתות עצביות גדולות

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

אין מקביליות

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

טכניקות מקביליות שונות חותכות את תהליך האימון הזה על פני ממדים שונים, כולל:

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

(בפוסט זה, נניח שאתה משתמש ב-GPUs כדי לאמן את הרשתות העצביות שלך, אך אותם רעיונות חלים על אלה המשתמשים בכל רשתות אחרות מאיץ רשתות עצביות.)

מקביליות נתונים

מקביל נתונים הכשרה פירושה העתקה של אותם פרמטרים למספר GPUs (המכונה לעתים קרובות "עובדים") והקצאת דוגמאות שונות לכל אחד מהם לעיבוד בו זמנית. מקביליות נתונים לבדה עדיין דורשת שהדגם שלך ישתלב בזיכרון של GPU יחיד, אך מאפשר לך להשתמש בחישוב של מעבדי GPU רבים במחיר של אחסון עותקים כפולים רבים של הפרמטרים שלך. עם זאת, ישנן אסטרטגיות להגדלת זיכרון ה-RAM האפקטיבי הזמין ל-GPU שלך, כמו הורדה זמנית של פרמטרים לזיכרון המעבד בין שימושים.

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

מקביליות צנרת

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

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

טכניקות לאימון רשתות עצביות גדולות קדימה
טכניקות לאימון רשתות עצביות גדולות לְאָחוֹר
טכניקות לאימון רשתות עצביות גדולות עדכון שיפוע
טכניקות לאימון רשתות עצביות גדולות להתבטל
טכניקות לאימון רשתות עצביות גדולות

איור של מערך מקביליות צינור נאיבי שבו המודל מפוצל אנכית ל-4 מחיצות אחר שכבה. עובד 1 מארח פרמטרים של מודל של השכבה הראשונה של הרשת (הקרוב לקלט), בעוד שעובד 4 מארח את שכבה 4 (שהיא הקרובה ביותר לפלט). "F", "B" ו-"U" מייצגים פעולות קדימה, אחורה ועדכון, בהתאמה. המנויים מציינים על איזה עובד פועלת פעולה. הנתונים מעובדים על ידי עובד אחד בכל פעם בגלל התלות הרציפה, מה שמוביל ל"בועות" גדולות של זמן סרק.

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

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

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

טכניקות לאימון רשתות עצביות גדולות קדימה
טכניקות לאימון רשתות עצביות גדולות לְאָחוֹר
טכניקות לאימון רשתות עצביות גדולות עדכון
טכניקות לאימון רשתות עצביות גדולות להתבטל
GPipe

טכניקות לאימון רשתות עצביות גדולות

PipeDream

טכניקות לאימון רשתות עצביות גדולות

השוואה בין תוכניות צנרת של GPipe ו-PipeDream, תוך שימוש ב-4 מיקרו-אצטות לכל אצווה. מיקרו-אצטות 1-8 מתאימות לשתי קבוצות נתונים עוקבות. בתמונה, "(מספר)" מציין באיזה מיקרו-אצט מבוצעת פעולה והמנוי מסמן את זיהוי העובד. שימו לב ש- PipeDream מקבל יותר יעילות על ידי ביצוע כמה חישובים עם פרמטרים מיושנים.

מקביליות טנזור

מקביליות צנרת מפצלת מודל "אנכית" אחר שכבה. אפשר גם לפצל "אופקי" פעולות מסוימות בתוך שכבה, מה שנקרא בדרך כלל טנזור מקביל הַדְרָכָה. עבור דגמים מודרניים רבים (כגון שַׁנַאי), צוואר הבקבוק של החישוב מכפיל מטריצת אצווה הפעלה עם מטריצת משקל גדולה. כפל מטריקס ניתן לחשוב על תוצרי נקודות בין זוגות של שורות ועמודות; אפשר לחשב מוצרי נקודה עצמאיים על GPUs שונים, או לחשב חלקים מכל מוצר נקודה על GPUs שונים ולסכם את התוצאות. עם כל אחת מהאסטרטגיות, נוכל לפרוס את מטריצת המשקל ל"רסיסים" בגודל שווה, לארח כל רסיס ב-GPU אחר, ולהשתמש ברסיס זה כדי לחשב את החלק הרלוונטי של מוצר המטריצה ​​הכולל לפני שנתקשר מאוחר יותר לשילוב התוצאות.

דוגמה אחת היא מגהטרון- LM, המקבילה להכפלת מטריצות בתוך שכבות הקשב העצמי וה-MLP של השנאי. PTD-P משתמש בטנזור, בנתונים ובמקביליות של צינורות; לוח הזמנים של הצינורות שלו מקצה מספר רב של שכבות לא רצופות לכל מכשיר, ומפחית את תקורה של בועות במחיר של יותר תקשורת רשת.

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

תערובת של מומחים (MoE)

עם תערובת של מומחים (MoE) בגישה, רק חלק מהרשת משמש לחישוב הפלט עבור כל קלט אחד. גישה אחת לדוגמא היא קבוצות רבות של משקלים והרשת יכולה לבחור באיזה קבוצה להשתמש באמצעות מנגנון שער בזמן הסקת מסקנות. זה מאפשר פרמטרים רבים נוספים ללא עלות חישוב מוגברת. כל סט של משקולות מכונה "מומחים", בתקווה שהרשת תלמד להקצות חישוב מיוחד ומיומנויות לכל מומחה. ניתן לארח מומחים שונים ב-GPUs שונים, מה שמספק דרך ברורה להגדיל את מספר ה-GPUs המשמשים לדגם.

טכניקות לאימון רשתות עצביות גדולות

איור של שכבת תערובת של מומחים (MoE). רק 2 מתוך n מומחים נבחרים על ידי רשת השערים. (התמונה מותאמת מ: Shazeer et al., 2017)

GShard קנה מידה של שנאי MoE עד 600 מיליארד פרמטרים עם סכימה שבה רק שכבות MoE מפוצלות על פני מספר התקני TPU ושכבות אחרות משוכפלות במלואן. Switch Transformer קנה מידה של גודל מודל לטריליוני פרמטרים עם דלילות גבוהה עוד יותר על ידי ניתוב קלט אחד למומחה יחיד.

עיצובים אחרים לחיסכון בזיכרון

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

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

  • אימון דיוק מעורב הוא לאמן דגמים המשתמשים במספרים בעלי דיוק נמוך יותר (בדרך כלל FP16). מאיצים מודרניים יכולים להגיע לספירת FLOP הרבה יותר גבוהה עם מספרים בעלי דיוק נמוך יותר, ואתה גם חוסך ב-RAM של המכשיר. עם טיפול נאות, המודל המתקבל לא יכול לאבד כמעט שום דיוק.

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

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

  • דְחִיסָה יכול לשמש גם לאחסון תוצאות ביניים ברשת. לדוגמה, גיסט דוחס הפעלות שנשמרות עבור המעבר לאחור; DALL · E דוחס את ההדרגות לפני סנכרון.


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


תודות
תודה ל-Nikolas Tezak, Sam Altman, Daniel Gackle, Ilya Sutskever וסטיבן אדלר על משוב על טיוטות. תודה לג'סטין ג'יי וואנג, ביאנקה מרטין וסטיב דאולינג על תקשורת ועיצוב.

בול זמן:

עוד מ OpenAI