מושגים בגובה העיניים

מה זה Quantization?

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

מה בעצם משתנה?

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

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

הסבר על quantization בתיעוד של Hugging Face (באנגלית)

מה זה BF16 ו־NVFP4?

BF16 הוא פורמט של מספרים בנקודה צפה, עם 16 ביטים לכל ערך. NVFP4 משתמש בערכים של 4 ביטים ובנתוני scaling נוספים, שמאפשרים להתאים את הערכים לטווח המספרים שצריך לייצג. אלה פורמטים לשמירה ולחישוב של מספרים, לא ציוני איכות.

בניסוי שפרסמנו השתמשנו ב־NVFP4 רק בחלקים מסוימים של המודל, ומשקלים אחרים נשארו ב־BF16. הכיתוב NVFP4 בגרף לא אומר שכל משקל, חישוב או cache משתמש בפורמט הזה. הסבר הניסוי (באנגלית) מפרט בדיוק מה השתנה.

להרחבה: סוגי המספרים ב־PyTorch (באנגלית) וגם תיעוד NVFP4 של NVIDIA (באנגלית).

איך זה חוסך זיכרון?

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

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

סקירת quantization של Hugging Face (באנגלית)

פחות זיכרון לא מבטיח אותה איכות או יותר מהירות

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

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

בחירת שיטת quantization בתיעוד של Hugging Face (באנגלית)

ה־KV cache נפרד ממשקלי המודל

בזמן יצירת טקסט, מודלים רבים שומרים תוצאות ביניים של מנגנון ה־attention, שמחשב קשרים בין יחידות הטקסט. אלה תוצאות עבור tokens שהמודל כבר עיבד. הזיכרון הזה נקרא KV cache. שימוש חוזר בתוצאות חוסך את החישוב שלהן מחדש בכל צעד.

גם הוא תופס מקום. הגודל שלו תלוי במודל, בכמות הטקסט שמעבדים ובמספר הבקשות הפעילות. Quantization למשקלים לא משנה אוטומטית את ה־KV cache. אפשר לעשות quantization גם לו, אבל זו החלטה נפרדת שצריך לבדוק מבחינת איכות ומהירות.

הסבר על KV cache בתיעוד של Hugging Face (באנגלית)

מה בודקים לפני שבוחרים?

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

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