Pruning של רשת נוירונים: היכן שהאינפרנס נתקל בגבול
מודל עם מדדים טובים על סט מוחזק הוא עדיין לא מודל שמוכן ללולאת עבודה. במעבדה האינפרנס של המודל רץ כבקשות בודדות על נתונים הומוגניים, ואילו בשירות מגיעים מקבצים של פניות בו-זמניות, אורכי קלט שונים ופיקי עומס.
מה שמשתנה הוא לא איכות התשובה, אלא המחיר של מעבר בודד: השהיית התגובה עולה, והראשונות לשים לב לכך הן לא הסטטיסטיקה הממוצעת, אלא אותן בקשות שנופלות לזנב התור.
חלק הארי של הזמן הולך לא על אריתמטיקה, אלא על העברת משקלים מהזיכרון אל המחשבון. ככל שהשכבות רחבות יותר וככל שיותר פרמטרים משתתפים בכל מעבר, כך צוואר הבקבוק החישובי נע יותר לכיוון החלפת נתונים ולא הפעולות עצמן.
תוסיפו לכך יישור של קלטים באורכים שונים — וחלק ניכר מהעבודה מתבזבז על פוזיציות שלא משפיעות על התוצאה.
גיזום משקלים מסיר בדיוק את סוג העודפות הזה. גיזום מובנה מסיר ערוצים שלמים וראשי קשב, ולכן הטנזורים עצמם קטנים יותר, והרווח נשמר על כל מחשבון; דלילות לא-מובנית בלי תמיכת חומרה כמעט לא נותנת האצה. אחרי ההסרה מחזירים את המשקלים לאיכות באמצעות אימון מחדש על אותו דומיין, ולא באמצעות מודל גדול יותר.
מה זה משנה לשירות: על אותה חומרה גדל מספר הבקשות הבו-זמניות, זנב ההשהיות מתקצר, והעומס על השירות מפסיק לדרוש מכונות נוספות לפיקים. בהמשך נפרט כיצד נבחר חלק המשקלים שמוסרים והיכן עובר הגבול שמעבר לו האיכות כבר לא משתחזרת.
דלילות משקלים: מה משתנה אחרי הגיזום
גיזום משקלים כשלעצמו לא מאיץ את ההסקה: אם האפסים נשארים במטריצות צפופות, המכפיל סופר אותם כמו את שאר הערכים. אפקט מורגש מופיע רק היכן שאת דלילות המשקלים מצליחים להפוך לחישוב דליל — אחרת סתם קלקלתם את איכות המודל בלי לקבל דבר בתמורה.
לכן אחרי הגיזום אנחנו לא מסתכלים על מדד אחד, אלא מריצים צ'קליסט: חלק מהסעיפים למטה הלקוחות בודקים בעצמם, והם גם אלה שחושפים לרוב את הבעיות.
מה מודדים אחרי כל מעבר גיזום
- דלילות משקלים ומחיר האיכות. טווח העבודה — 50-70% אפסים בלי אימון מחדש; מעבר לכך חובה מעבר של אימון מחדש על הנתונים המקוריים, אחרת האיכות במחלקות נדירות יורדת ראשונה.
- הגודל בפועל של המודל. הארטיפקט בפורמט דליל מצטמצם פי 2-4; אם הקובץ נשאר כשהיה, האפסים נשמרים במפורש ואין חיסכון בדיסק.
- תפוקה. באותה השהיה מספר הבקשות הבו-זמניות גדל פי 1.5-3, אבל רק אם המחשבון יודע לעבוד עם מבנים דלילים — אחרת הגידול יהיה מינימלי.
- יציבות התגובה. מסתכלים על האחוזונים ה-95 וה-99 של ההשהיה בזרם חי: הזמן הממוצע יכול לא להשתנות, ואילו הזנב לגדול בגלל הסתעפויות וצפיפות לא אחידה של שכבות.
- דרישות חומרה. מודל שדרש קודם כמה מאיצים, אחרי גיזום וקוונטיזציה נכנס למספר קטן יותר של צמתים — וזהו המקור העיקרי להפחתת עלויות ההסקה.
- הסטת הפלטים. הגיזום משנה את התפלגות התשובות, ולכן מריצים את שתי הגרסאות על אותה קבוצת בקשות ומשווים את שיעור אי-ההתאמות — היא מראה היכן המודל התחיל "לזלוג".
- הפיכות. נקודת ביקורת של המודל הצפוף וקונפיגורציית הגיזום נשמרות בנפרד, כדי שהחזרה לאחור והשוואת גרסאות ייקחו דקות ולא בנייה מחדש. גישות ממשפחת SparseGPT האיצו את עצם בחירת הדלילות, אבל הקבלה עדיין נעשית לפי מדדים על הנתונים שלכם.
סיכום הבדיקה — טבלה של "גרסת מודל / שיעור אפסים / גודל ארטיפקט / השהיה בזנב / תפוקה", שממנה רואים היכן הרווח והיכן הנסיגה.
מצבי pruning של רשת נוירונים: גיזום מובנה וגיזום משקלים
בחירת המצב נקבעת לא לפי ה"עוצמה" של הגיזום, אלא לפי מה שסביבת ההרצה שלכם יודעת להאיץ. גיזום מובנה מסיר ערוצים שלמים, ראשי קשב או בלוקים — בפלט נשאר טנזור צפוף בגדול קטן יותר, והרווח בזמן התגובה מתקבל על ליבות רגילות, בלי תמיכה מיוחדת.
גיזום משקלים מאפס משקלים בודדים תוך שמירה על צורת הטנזור: שיעור האפסים גדל, אבל הליבה הצפופה סופרת את האפסים כמו את שאר הערכים.
היכן כל מצב מתאים
| וריאנט | מתי מתאים | מגבלות |
|---|---|---|
| גיזום מובנה | צריך האצה על חומרה סטנדרטית, הסביבה לא תומכת בדלילות | נחתך בגסות: האיכות יורדת מהר יותר, וכמעט תמיד נדרש אימון מחדש |
| גיזום משקלים | צריך דחיסה מקסימלית של המודל, הסביבה יודעת חישוב דליל | בלי תמיכה בדלילות אין האצה — הרווח הוא רק בגודל ובהעברת הארטיפקט |
| גיזום בקבוצות משקלים | צריך רווח צפוי על חומרה נפוצה | מוגבל לתבנית הקבוצות, תקרת הדחיסה נמוכה מזו של גיזום משקלים |
לכן גיזום משקלים הוא קודם כל עניין של דחיסת המודל ואחסון, ואילו גיזום מובנה — של זמן התגובה. המצבים לא סותרים זה את זה: הסכמה העובדתית היא קודם גיזום לפי משקלים עם אימון מחדש, אחר כך התאמה מובנית לחומרת היעד, עם מדידת מדדים על סט מוחזק אחרי כל שלב. נפרט כיצד להתאים את מקדם הגיזום לתרחיש שלכם בלי לאבד איכות.
שלבי העבודה: מפרופיילינג ועד מסירת המודל
פּרוּנינג — גיזום משקלים — נותן רווח רק כאשר כל הסרה מאומתת במדידה. אנחנו מנהלים את הפרויקט כרצף של בדיקות: קודם מתעדים מה המודל גובה כיום במשאבים, אחר כך מסירים את המיותר ומוודאים שהאיכות נשארה במקום. להלן הסדר שלפיו מתבצעת העבודה.
- פרופיילינג של המודל. לוקחים מדידות על נתוני הלקוח: זמן ההסקה, נפח הזיכרון התפוס, עומס לפי שכבות. רואים אילו בלוקים מאטים את ההסקה והיכן הגיזום ייתן אפקט והיכן יגרום לאובדן איכות.
- ביקורת איכות. מרכיבים סט בדיקה: דוגמאות אמיתיות עם תשובות ייחוס ובנפרד מקרים קשים. את המדדים ואת הירידה המותרת מתעדים לפני תחילת העבודה, ולא אחריה.
- תוכנית גיזום. קובעים מה בדיוק מסירים — משקלים בודדים, ערוצים או בלוקים שלמים — ובאיזה שיעור. ההחלטה נשענת על הפרופיל: היכן שהמרווח בדיוק גדול יותר, חותכים לעומק.
- כיוונון ואימון מחדש. אחרי הגיזום הדיוק יורד; אימון מחדש קצר מחזיר אותו לרמת הייחוס. פורמט האחסון נבחר כך שהסביבה לא תאכל את הרווח.
- בקרת דיוק. מריצים את התוצאה על אותו סט ומשווים למודל המקורי. ירידה גדולה מהמוסכם — מחזירים את השלב לאחור ומשנים את שיעור הגיזום.
- בדיקה בסביבת הלקוח. חוזרים על המדידות בסביבת היעד: זמן ההסקה, זיכרון, התנהגות תחת עומס.
- מסירת הפתרון. מוסרים את המודל, סקריפטים לשחזור המדידות, כללי בדיקה ותיעוד — צוות הלקוח חוזר על המחזור על הנתונים שלו בלי אנחנו.
ארטיפקטי מסירה: קונפיגורציות, סכמות ותקנונים
אחרי הגיזום המודל חי יותר זמן מהפרויקט שבו נולד. לכן יחד עם המשקלים אנחנו מוסרים את כל מה שמאפשר לשחזר את התוצאה בלעדינו: קונפיגורציות ניתנות לשחזור, סכמות של המודל, מדיניות הרצות ותקנוני תחזוקה. להלן הרשימה המלאה של מה שנשאר אצל הלקוח.
- קונפיגורציות גיזום ניתנות לשחזור — שיעור המשקלים הנחתכים, קריטריון החשיבות של הנוירונים, סדר האימון מחדש והכיול. הרצה לפי הקבצים האלה חוזרת אחת לאחת ונותנת את אותו מודל.
- סכמות המודל לפני ואחרי — אילו שכבות ובלוקים נגעו, היכן השתנתה הממדיות, אילו ענפים נשארו דלילים. מהסכמה רואים למה המודל נעשה קל יותר בלי לאבד איכות.
- מדיניות הרצות — מתי מופעל גיזום נוסף, לפי אילו מדדי איכות הוא מתקבל ובאילו ערכים חוזרים לגרסה הקודמת.
- סט בדיקות איכות — קלטי ייחוס ותשובות צפויות, שלפיהם משווים בין המודל המקורי לזה המגוזם. מאפשר לתפוס נסיגה בכל תיקון עתידי.
- תיעוד — תיאור הארכיטקטורה, גבולות התחולה, מגבלות ידועות והוראות לחזרה על האימון על נתונים חדשים.
- תקנוני תחזוקה — מי מעדכן את הקונפיגורציות, כיצד מתווספים נתונים חדשים, באיזו תדירות נבחנים מחדש ספי האיכות וכיצד מתועדים השינויים.
- מפת סביבה — גרסאות הספריות, סדר הבנייה ואופן אריזת המודל, כדי שפריסה על מכונה חדשה לא תהפוך לחיפוש אחר תלויות.
בפועל: האצת תגובה בלי אובדן דיוק
שירות ראייה ממוחשבת בבקשות בודדות ענה מהר, אבל בפיקים התחיל להיכנע: תור הקריאות גדל, וחלק מהן נפלו בגלל חריגת זמן ההמתנה. הוספת אינסטנסים לא עזרה — צוואר הבקבוק היה לא החישוב, אלא העברת משקלי המודל בכל מעבר.
את הארכיטקטורה כולה לא שינינו. פירקנו את מפת הרגישות של השכבות וביצענו גיזום מובנה: הסרנו ערוצים וראשי קשב בעלי התרומה הקטנה ביותר לפלט, ולא משקלים בודדים לפי סף — כך מואץ המעבר בפועל, ולא רק גודל הקובץ.
את שיעור הגיזום כיווננו באופן איטרטיבי, אחרי כל שלב — אימון מחדש קצר על הנתונים המקוריים וכיול בזרם חי, כדי שהסטת הסטטיסטיקה לא תצטבר. הכול חושב על PyTorch.
מדדים לפני ואחרי: גזמנו בערך חצי מהפרמטרים, ההשהיה באחוזון ה-99 ירדה בערך פי שניים, והתפוקה גדלה פי 2.4 על אותו מספר אינסטנסים. האיכות על סט הבקרה ירדה בפחות מאחוז.
תחת עומס פי שלושה השירות נשאר יציב, אבל חשוב יותר משהו אחר — סוג הכשלים התחלף: במקום תור וניתוקים בגלל חריגת זמן המתנה, אנחנו רואים גידול צפוי בהשהיה, שאותו ההסקיילינג מספיק לפרוק.
מסכות הגיזום ונקודות הביקורת שלפני הדחיסה נשמרות — חזרה למודל המלא אורכת דקות, אם ההתנהגות בפרודקשן תסטה מהמדדים האופליין.
במה גיזום שונה מקוונטיזציה ומדיסטילציה
גיזום מסיר חלק מהמשקלים או מבנים שלמים — ערוצים, ראשי קשב, שכבות. המודל נעשה קטן יותר ונספר מהר יותר, אבל עדיין ברמת דיוק מלאה. קוונטיזציה לא מסירה דבר: היא מורידה את רמת הדיוק (bit width) של המשקלים והאקטיבציות, והרווח מגיע מאריתמטיקה זולה יותר.
דיסטילציה משנה את הארכיטקטורה כולה — מודל קומפקטי לומד לחזור על הפלטים של מודל גדול, וכבר לא נגזר ממנו בטרנספורמציה פשוטה.
| שיטה | מה משתנה | הרווח | המחיר |
|---|---|---|---|
| גיזום | מספר המשקלים והנוירונים | גודל וזמן חישוב | דיוק במחלקות נדירות |
| קוונטיזציה | רמת הדיוק של המשקלים | זיכרון והשהיה על חומרה חלשה | ירידה בערכים חריגים (outliers) |
| דיסטילציה | הארכיטקטורה כולה | גודל, השהיה וזיכרון בבת אחת | נדרשים נתונים ואימון מחדש |
שילוב השיטות נותן לא סכום אלא מכפלה של האפקטים, ולכן סדר השלבים חשוב. דיסטילציה באה ראשונה — היא קובעת את הארכיטקטורה. אחריה גיזום עם אימון מחדש, ורק אחריו קוונטיזציה: לחתוך מודל שכבר דליל זה חסר טעם, ולקוונטז מודל דליל — משתלם.
את דיוק המודל בודקים שלב-שלב: מודדים את מדד היעד על סט מוחזק לפני ואחרי כל טרנספורמציה, ושומרים על תקציב ירידה, למשל לא יותר מנקודת אחוז אחת. ב-PyTorch גיזום וקוונטיזציה קיימים במודולים הסטנדרטיים, כך שסדר השלבים ניתן לשחזור ואינו נבנה מחדש לכל מודל.
ספקות לגבי דיוק ויציבות אחרי גיזום
אובדן דיוק אינו תכונה של השיטה, אלא תוצאה של אילו קשרים הוסרו. אנחנו מפיקים פרופיל רגישות לפי שכבות על סט הבקרה של הלקוח: היכן שמרווח העודפות גדול, שיעור ההסרה גבוה יותר, והיכן שהייצוג צפוף — מינימלי. כך הירידה נשארת במסדרון המוסכם, ולא "מה שיצא".
מפצים לפי המצב: אחרי גיזום מובנה את המדדים מחזיר אימון מחדש קצר, ובהסרת ערוצים כפולים בדרך כלל מספיק כיול על הנתונים המקוריים. את יציבות המסקנות בודקים בנפרד — הפיזור על מקרים גבוליים לא אמור לגדול.
עד כמה תירד האיכות?
ברשתות עודפות מוסרים חלק גדול מהמשקלים תוך ירידה במדד הראשי בגבולות שברי אחוז אחרי אימון מחדש. במודלים קומפקטיים הירידה נראית כבר בשיעור קטן, ולכן שם מתקדמים בצעדים ונעצרים בתוצאה הקבילה הראשונה.
מה עושים עם מחלקות נדירות?
הן נופלות ראשונות: יש מעט דוגמאות, והמשקלים שלהן מוסרים כמשקלים בעלי חשיבות נמוכה. לכן את התוצאה מאמתים לא לפי מדד ממוצע, אלא לפי כל מחלקה בנפרד, ולמחלקות נדירות משאירים יותר קיבולת.
מתי גיזום לא יעזור?
אם המודל כבר קומפקטי, וצוואר הבקבוק אינו במשקלים אלא בהכנת הנתונים או בסביבת ההסקה. ואם התשתית לא תומכת בדלילות: את המשקלים איפסתם, אבל האצה אין.
נדבר על המשימה: מה להכין לשיחה
הערכת היקף העבודה בגיזום נשענת לא על גודל המודל, אלא על אילו מגבלות איכות וזמן תגובה קריטיות עבורכם. ככל שנתוני המוצא מדויקים יותר, כך יידרשו פחות איטרציות להתאמת מצב הגיזום ושיעורו לפי שכבות.
מה עוזר לנו לחזור עם הערכה ותוכנית עבודה:
- ארכיטקטורת המודל ונקודת ביקורת משקלים מאומנת — עם הרצת הסקה ניתנת לשחזור על התשתית שלכם.
- מדד האיכות היעד והירידה המותרת: איזה חלק מהדיוק אתם מוכנים לתת בתמורה להאצה.
- מגבלות זיכרון והשהיה: היכן המודל רץ — שרת, מעבד רגיל, התקן משובץ — ואיזה מרווח בתגובה נדרש.
- סט כיול מנתונים אמיתיים — עליו אנחנו מפיקים את תגובות השכבות ומחליטים מה אפשר לגזום בלי לאבד משמעות.
- תרשים הפריסה: פורמט המשקלים, האם משתמשים בקוונטיזציה, מי ומתי מאמן מחדש את המודל.
- מוכנות לאימון מחדש אחרי גיזום: האם יש נתונים מתויגים ומשאב חישובי לשחזור האיכות.
- מגבלות לוחות זמנים, אם כבר נקבע לכם תאריך לעליית גרסה חדשה לאוויר.
אחרי השיחה אנחנו חוזרים עם תוכנית: שיעור גיזום מומלץ לפי שכבות, אופן שחזור האיכות, מדדים צפויים על סט הבדיקה שלכם ונקודות בקרה שבהן רואים את התוצאה. תארו את המשימה — ננסח הערכה וסדר עבודה למודל שלכם.







