למה Inference הוא בעיית מערכות, לא בעיית ML
למה Inference הוא בעיית מערכות, לא בעיית ML
בשלב מסוים המודל מוכן. הוא עבר אימון, נבדק, והדיוק נראה טוב.
מכאן קל לחשוב שהעבודה העיקרית הסתיימה. אבל האמת הפוכה:
המודל נגמר - המערכת רק מתחילה.
ML עוסק בשאלה: איזו פונקציה מחשבת את התוצאה הטובה ביותר.
Inference עוסק בשאלה אחרת לגמרי: איך הפונקציה הזו פוגשת את העולם האמיתי.
והעולם האמיתי הוא מערכת.
רוב בעיות ה-Inference לא קורות בתוך המודל
הן קורות:
- לפני שהנתונים מגיעים אליו
- בזמן שהם מועברים אליו
- ואחרי שהתוצאה יוצאת ממנו
Latency, jitter, תורים, retries, חיבורים, זיכרון, תזמון - כל אלה קובעים את החוויה הרבה יותר מהשכבות במודל.
כאן נוצרת ההתנגשות הראשונה בין הנחות ML למציאות תשתיתית.
ב-ML מניחים
- קלט זמין
- חישוב רציף
- זמן אחיד
- וסביבה יציבה
ב-Systems המציאות היא
- קלט מגיע בגלים
- חישוב מתחרה על משאבים
- זמן משתנה
- ורכיבים משפיעים זה על זה
המודל אולי נכון, אבל ההנחות סביבו נשברות.
Inference הוא שרשרת, לא נקודה
רשת → CPU → תורים → מאיץ → זיכרון → רשת.
אם אחת החוליות:
- מתוזמנת גרוע
- עמוסה
- או לא צפויה
הביצועים נפגעים, גם אם המודל מושלם.
זו הסיבה שבפרודקשן, מי שבאמת קובע את הביצועים הוא לא המודל.
זה:
- איך הבקשות נאספות
- איך הן מתוזמנות
- איך המשאבים מנוהלים
- ואיך המערכת מתנהגת בעומס
GPU מהיר לא עוזר אם הוא מחכה.
מודל מדויק לא עוזר אם התוצאה מגיעה מאוחר מדי.
סיכום
Inference מוצלח לא נבנה רק על ML טוב, אלא על מערכות יציבות.
כאלה שמבינות:
- תזמון
- עומסים
- כשלי קצה
- והתנהגות תחת לחץ
ML קובע מה לחשב. מערכות קובעות מתי, איך, ואם זה בכלל יגיע בזמן.
ובפרודקשן - אלה השאלות שקובעות הכול.