כמה פרמטרים יש במודל CHATGPT?

מאז שChatGPT נכנס אל חיינו, ההנחה הרווחת של כולנו היתה של-ChatGPT מספר זהה של פרמטרים כמו GPT-3 והוא 175 מיליארד פרמטרים. זאת מכיוון שכולנו הסקנו שהמודל הוא תוצאה של אימון GPT-3 על סמך משוב אנושי (RLHF).
עם זאת, אי אפשר להתעלם מכך שקריאות למודל דרך הAPI מהירות מידי באופן מחשיד.
במיוחד בAPI החדש ששוחרר לפני כמה ימים.
הוסיפו לכך את העובדה שמחיר ה-API החדש של ChatGPT רק עשירית ממחיר ה-API של GPT-3 (שנשאר ללא שינוי).
בנוסף: שמועות רבות רצות ברשת לגבי גודלו של המודל אבל הביסוס היחידי להן כרגע הוא "סבתא שלי מכירה את השכן של אחותו של הבייביסיטר של אמא של דודה של סם אלטמן! והוא אמר לה!"
הסבר פשוט:
אם מסתכלים על רוחב הפס של זיכרון ה-A100 GPU, נראה כי מהירות הAPI של OpenAI מהירה הרבה יותר מהמהירות התיאורטית המקסימלית שהחומרה בכלל מאפשרת למודל בגודל 175 מיליארד.
.
ככל הנראה ChatGPT קטן יותר מ-175 מיליארד פרמטרים.
.
הפעלת מודלי ענק באינפרנס
יצא לי להפעיל כמה מודלים גדולים באינפרנס, זה לא נעים.
על מנת להקל על הכאב, מקובל להחזיק את משקולות המודלים כמספרים שלמים בני 8 סיביות (INT8) יצוג זה מאפשר הפעלה מהירה של המודלים תוך כדי צמצום צריכת הזכרון פי 2 בהשוואה לאחסון בfloat16.
נדרש רק בייט אחד בודד על מנת כדי לאחסן פרמטר בINT8. חישוב פשוט יוביל אותנו לכך שמשקל המודל בזכרון הוא 175GB.
מודלי שפה הם אוטורגרסיבים – בכל הפעלה של המודל, המודל חוזה את המילה הבאה הסבירה ביותר (ללא כל קשר לאופן אימון המודל, למשל עבור מודלים שאומנו עם RLHF כמו ChatGPT, המודל יחזה את המילה הבאה שהמתייגים האנושיים היו מעדיפים).
כלומר, על מנת לייצר 200 מילים, נצטרך לבצע 200 הפעלות של המודל. עבור הפעלה זו עלינו לטעון את כל משקולות המודל לזכרון (גם אם בחלקים) מהזיכרון ברוחב הפס הגבוה (HBM) ליחידת עיבוד הטנזורים בGPU. כלומר עלינו לטעון 175GB משקולות לכל עיבוד.
המהירות המקסימלית של החומרה
בפלטפורמה של Azure, מספר הGPUs המירבי של A100 שאפשר לקבל למכונה בודדת הוא 8. כלומר, המקביליות המקסימלית של טנזור לכל מודל טעון היא 8. לכן במקום לטעון 175GB משקולות עבור כל הפעלת מודל, נאלץ לטעון 21.87GB ל-GPU לכל הפעלה של המודל.
כמו כן, בגרסת A100 80GB SXM, רוחב הפס המרבי של הזיכרון הוא 2TB/s. כלומר גם אם נניח גודל באצ'=1 (וזה אחלה דבר של דבר להניח בלי קשר) -מהירות זו תהיה המהירות התיאורטית המקסימלית: 91 הפעלות/שניה.
מדידת מהירות ChatGPT בעולם האמיתי
באמצעות הפעלת סקריפט פשוט ניתן למדוד את מהירות הקריאה לChatGPT המחייבת את הפעלת המודל (דרך הAPI של OpenAI), מדידה זו מניבה 101 הפעלות/שניה.
כלומר, אנו רואים שהתוצאות האמפיריות מהירות הרבה יותר מהתוצאה התיאורטית המקסימלית שמבוססת על רוחב הפס של הזיכרון הGPU בA100. לפיכך אנו יכולים להסיק שמודל ChatGPT אינו בעל 175 מיליארד פרמטרים.
שימו לב, אנו אפילו מניחים כאן שזמן הכפלת המטריצות עצמן הוא זניח ביחס לזמן טעינת הפרמטרים וכן שזמן התקשורת בין-GPU גם הוא זניח. במציאות, זמן זה אינו זניח כלל והוא מתווסף לתוצאה הכבר-יותר-מידי-טובה שאנו מודדים.
אופטימיזציות נוספות שיכולות להיות בשימוש
ישנן כמה שיטות אופטימיזציה נוספות היכולות להיות בשימוש ChatGPT על מנת להקטין את זמן הפעלת המודל, למשל עם Cache KV לטרנספורמר או Flash Attention עדיין נאלץ לטעון את משקולות המודל בין הHBM לזכרון יחידת העיבוד כך שאמנם נחסוך ב-FLOPs אבל איננו חוסכים בזמן טעינת המודל לזכרון.
כמו כן, למרות ש A100 תומכים בהרצת 16 GPUs במקביל, בAzure אין מכונה התומכת בכך. רק בGoogle Cloud תומכים במכונות מסוג זה.
לגבי קונטיזציה לINT4, למרות שזו הוכיחה עצמה הפתרון טוב, הקומפיילר של הGPU Kernels של OpenAI אינו תומך ב-INT4 וגם אין להם תוכניות כרגע להוסיף תמיכה זו [1].
רפרנסים:
[1] – הקומפיילר של OpenAI לא תומך בINT4 כרגע: https://github.com/openai/triton/issues/675…
[2] – עוד על אינרפרנס של טרנספורמרים: https://kipp.ly/blog/transformer-inference-arithmetic/
[3] – הנתונים הטכנים של החומרה: https://www.nvidia.com/…/nvidia-a100-datasheet-us…
[4] – בלוג של OpenAI על הרצת מודלים גדולים https://openai.com/…/techniques-for-training-large…
[5] – קוונטיזציה לאחר אימון במודלים גדולים: https://arxiv.org/abs/2211.10438
[6] – על מיקבול של מודלי ענק: https://arxiv.org/abs/1909.08053
[7] – מאמר GPT-3 -המודל שנחשד כי מהווה בסיס למודלים החדשים: https://arxiv.org/abs/2005.14165
[8] – מאמר מעניין בנושא כמות הפרמטרים https://orenleung.super.site/is-chatgpt-175-billion…