מדריך להתחלת פרויקט חדש

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

  • את הארכיטקטורה של המודל
  • האופטימיזציה
  • גודל האצווה
  • להגדרה הראשונית

הנחות

העצה בקטע זה מבוססת על ההנחות הבאות:

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

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

בחירת הארכיטקטורה של המודל

נתחיל עם ההגדרות הבאות:

  • ארכיטקטורת מודלים היא מערכת ליצירת חיזויים. ארכיטקטורת מודל מכילה את ה-framework להמרת נתוני קלט לחיזויים, אבל לא מכילה ערכי פרמטרים. לדוגמה, ארכיטקטורת מודל – רשת נוירונים עם שלוש שכבות מוסתרות של 10 צמתים, 5 צמתים ו-3 צמתים, בהתאמה.
  • model הוא ארכיטקטורת מודל בתוספת ערכים ספציפיים לכל הפרמטרים. לדוגמה, מודל מורכב מרשת נוירונים שמתוארת בהגדרה של ארכיטקטורת מודל, וגם מערכים ספציפיים של המשקולות וההטיות של כל צומת.
  • משפחת מודלים היא תבנית לבניית ארכיטקטורת מודלים באמצעות קבוצה של היפר-פרמטרים.

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

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

בחירת אופטימיזציה

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

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

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

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

בחירת גודל האצווה

סיכום: גודל האצווה קובע את מהירות האימון. אין להשתמש בגודל האצווה כדי לכוון ישירות את הביצועים של קבוצת האימות.

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

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

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

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

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

אפשר להשיג את אותם הביצועים הסופיים באמצעות כל גודל אצווה (למידע נוסף, ראו Shallue et al. 2018 ו-למה לא צריך לכוונן את גודל האצווה כדי לשפר באופן ישיר את הביצועים של קבוצת האימות?.

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

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

תפוקת אימון = מספר הדוגמאות שמעובדות בשנייה

או שווה ערך לזמן בכל שלב:

זמן בכל שלב = גודל האצווה / תפוקת אימון

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

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

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

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

בחירת גודל האצווה כדי לקצר את זמן האימון

זו ההגדרה שלנו לזמן אימון:

  • זמן אימון = (זמן בכל שלב) x (מספר הצעדים הכולל)

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

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

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

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

כשמשווים בין גודלי אצווה, חשוב לשים לב להבחנה בין הגדלים הבאים:

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

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

בחירה של גודל האצווה כדי לצמצם את צריכת המשאבים

יש שני סוגים של עלויות משאבים שקשורות להגדלת גודל האצווה:

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

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

אנחנו מתייחסים לעלות השימוש הכוללת (שעשויה לכלול סוגים שונים של עלויות) כצריכת המשאבים, ומחושבת באופן הבא:

צריכת משאבים = צריכת משאבים לכל שלב x מספר השלבים הכולל

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

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

שינוי גודל האצווה מחייב כוונון מחדש של רוב ההיפר-פרמטרים

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

  • ההיפר-פרמטרים של האופטימיזציה (לדוגמה, קצב למידה ומומנטום)
  • ההיפר-פרמטרים של הרגולטור

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

איך נורמה באצווה מקיימת אינטראקציה עם גודל האצווה

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

בחירת ההגדרות האישיות הראשוניות

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

  • תצורת המודל (למשל מספר השכבות)
  • את ההיפר-פרמטרים של האופטימיזציה (למשל, קצב למידה)
  • את מספר שלבי האימון

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

העיקרון המנחה שלנו הוא:

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

איפה:

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

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

בחירת מספר שלבי האימון כרוכה לאיזון המתח הבא:

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