چقدر حافظه لازم است
جواب کوتاه
حافظهی لازم برای اجرای یه مدل زبانی تقریبا یه ضربه: تعداد پارامترها ضرب در اینکه هر عدد چند بایته. با عدد ۱۶ بیتی هر پارامتر ۲ بایته، پس یه مدل ۷ میلیاردی میشه ۱۴ گیگابایت؛ با ۸ بیت ۷ گیگابایت و با ۴ بیت ۳٫۵ گیگابایت. بعد یه مقدار هم برای یادداشتهایی که مدل از هر توکن گفتگو نگه میداره لازمه، که با طول گفتگو بزرگ میشه؛ برای یه مدل ۱۳ میلیاردی، هر توکن حدود ۸۰۰ کیلوبایت و ۲۰۴۸ توکن حدود ۱٫۶ گیگابایت. و یه کم هم برای سیستمعامل و برنامههای دیگه جا بذارید.
یعنی چی
یه ضرب ساده: تعداد پارامتر ضرب در اینکه هر عدد چند بایته.
توی درس اجرای مدل روی کامپیوتر گفتیم قدم اول اینه که مدلی انتخاب کنید که توی حافظهتون جا بشه. ولی از کجا بفهمید جا میشه؟ مثل وقتیه که میخواید ببینید یه فیلم توی گوشیتون جا میشه یا نه: حجمش رو با جای خالی مقایسه میکنید. اینجا هم حجم مدل رو حساب میکنیم، و خوشبختانه حسابش سادهست.
هر عدد چند بایت
توی درس پارامتر چیست دیدیم که مدل از میلیاردها عدد ساخته شده. هر کدوم از این عددها یه جایی توی حافظه میگیره، و اندازهی این جا بستگی داره به اینکه عدد رو با چند بیت نوشته باشیم.
هر بایت ۸ بیته. پس عدد ۳۲ بیتی ۴ بایت جا میگیره، ۱۶ بیتی ۲ بایت، ۸ بیتی ۱ بایت، و ۴ بیتی نصف یه بایت. بیت کمتر یعنی عدد با دقت کمتری نوشته شده؛ مثل اینکه بهجای ۳٫۱۴۱۵۹ بنویسید ۳٫۱۴. اینکه کم کردن بیت چقدر به کیفیت مدل ضربه میزنه، موضوع درس کوانتیزه کردنه.
یه ضرب
حالا فقط کافیه دو تا عدد رو در هم ضرب کنیم.
یه مدل ۷ میلیارد پارامتری با عدد ۱۶ بیتی: ۷ میلیارد ضرب در ۲ بایت میشه ۱۴ میلیارد بایت، یعنی حدود ۱۴ گیگابایت. همون مدل با ۸ بیت ۷ گیگابایت، با ۴ بیت ۳٫۵ گیگابایت، و با ۳۲ بیت ۲۸ گیگابایت. میبینید؟ از ۲۸ تا ۳٫۵، هشت برابر فرق، فقط با عوض کردن تعداد بیتها. این حجم فقط مال وزنهاست؛ تقریبا همون حجم فایلی که دانلود میکنید.
یادداشتهای گفتگو
وزنها همهی ماجرا نیستن. مدل موقع خوندن گفتگو، برای هر توکن یه سری یادداشت نگه میداره تا مجبور نشه هر بار همهچی رو از اول حساب کنه. اسم فنیش «کش کلید و مقدار»ه و توی مسیر ترنسفورمر، KV کش، کامل بازش میکنیم. چیزی که الان مهمه اینه که این یادداشتها هم جا میگیرن.
یه پژوهش ۲۰۲۳ حسابش رو برای یه مدل ۱۳ میلیاردی نوشته: برای هر توکن، دو بردار ۵۱۲۰ تایی، توی هر کدوم از ۴۰ لایه، هر عدد ۲ بایت. ضربش میشه حدود ۸۰۰ کیلوبایت برای هر توکن. اون مدل تا ۲۰۴۸ توکن رو میتونست بخونه، پس یه گفتگوی کامل تا ۱٫۶ گیگابایت یادداشت لازم داشت. برای همین هر چی پنجرهی زمینه بزرگتر و گفتگو طولانیتر، حافظهی بیشتری لازمه.
کوچیک کردن یادداشتها
یادداشتهای گفتگو، با گفتگوی طولانی، میتونن از خود وزنها هم بزرگتر بشن. سازندهها راهی پیدا کردن که کوچیکشون کنن.
توی هر لایه، مدل چند تا «سر» توجه داره که هر کدوم یادداشتهای خودش رو نگه میداره؛ همون توجه چندسر که توی مسیر ترنسفورمر میبینیم. یه پژوهش ۲۰۲۳ پیشنهاد کرد چند تا سر یه یادداشت مشترک داشته باشن؛ اسمش «توجه گروهی»ه. اگه هر چهار سر یه یادداشت داشته باشن، یادداشتهای گفتگو چهار برابر کوچیکتر میشن. پژوهشگرها دیدن کیفیت نزدیک به حالتی میمونه که هر سر یادداشت خودش رو داره، و سرعت نزدیک به حالتی که همهی سرها یه یادداشت دارن. حتی یه مدل آماده رو میشه با حدود ۵ درصد هزینهی آموزش اولش به این شکل درآورد.
حافظهی هدررفته
یه مشکل دیگه هم هست که به حساب ما ربطی نداره، به نحوهی جا دادن یادداشتها ربط داره.
همون پژوهش ۲۰۲۳ که حساب مدل ۱۳ میلیاردی رو ازش آوردیم دید سیستمهای قدیمی برای هر درخواست، از اول یه تیکهی پیوسته از حافظه به اندازهی بیشترین طول ممکن گفتگو رزرو میکردن؛ ولی بیشتر گفتگوها کوتاهتر تموم میشن. نتیجه این بود که فقط ۲۰ تا ۳۸ درصد حافظهی یادداشتها واقعا پر میشد و بقیه هدر میرفت. راه حلشون از سیستمعاملها اومد: حافظه رو به تکههای کوچیک ببر و هر وقت لازم شد یه تکهی تازه بده، مثل صفحههای یه دفتر که لازم نیست پشت سر هم باشن. با این کار هدر تقریبا صفر شد و همون کارت، در همون زمان، ۲ تا ۴ برابر درخواست بیشتر جواب داد. برای شما روی کامپیوتر خودتون، یعنی برنامهی اجراکنندهی خوب هم مهمه، نه فقط حساب حجم.
یه نمونهی واقعی
همون پژوهش نشون میده حافظهی یه کارت گرافیک ۴۰ گیگابایتی که همین مدل ۱۳ میلیاردی روش اجرا میشد، چطور تقسیم شده بود.
وزنها ۲۶ گیگابایت بودن، حدود ۶۵ درصد کل حافظه. حالا حساب خودمون رو امتحان کنیم: ۱۳ میلیارد ضرب در ۲ بایت میشه دقیقا ۲۶. بیش از ۳۰ درصد هم مال یادداشتهای گفتگوها بود، چون اون کارت همزمان به چند تا درخواست جواب میداد و هر کدوم یادداشتهای خودش رو داشت. یعنی همون ضرب ساده درست درمیاد؛ فقط باید جای یادداشتها رو هم کنار گذاشت.
کامپیوتر شما
حالا یه مثال ساختگی: یه لپتاپ با ۱۶ گیگابایت حافظه.
مدل ۷ میلیاردی با ۴ بیت، ۳٫۵ گیگابایت، راحت جا میشه و برای یادداشتهای گفتگو و بقیهی برنامهها هم جا میمونه. ولی همون مدل با ۱۶ بیت، ۱۴ گیگابایت، تقریبا همهی حافظه رو پر میکنه؛ در حالی که بخشی از حافظه مال خود سیستمعامل و برنامههای دیگهست. پس عملا جا نمیشه یا خیلی کند میشه. اگه کارت گرافیک دارید، همین حساب رو با حافظهی خود کارت هم بکنید؛ و اگه جا نشد، همون اجرای ترکیبی که توی درس قبل دیدیم.
آموزش خیلی بیشتر میخواد
همهی حسابهای بالا برای اجرا بود. اگه بخواید یه مدل رو آموزش بدید یا فاینتیون کامل کنید، حساب خیلی فرق میکنه.
یه پژوهش ۲۰۱۹ این رو دقیق شمرده. موقع آموزش با روش رایجی که بیشتر حسابها رو ۱۶ بیتی انجام میده، برای هر پارامتر اینها لازمه: خود وزن ۱۶ بیتی، ۲ بایت؛ شیبش، ۲ بایت؛ و ۱۲ بایت دیگه برای یه نسخهی دقیق ۳۲ بیتی از وزن و دو تا یادداشتی که بهینهساز معروف «آدام» برای هر پارامتر نگه میداره. روی هم ۱۶ بایت، یعنی هشت برابر اجرای ۱۶ بیتی. همون پژوهش مثال میزنه یه مدل ۷٫۵ میلیاردی برای آموزش ۱۲۰ گیگابایت لازم داره، در حالی که برای اجرا حدود ۱۵ گیگ کافیه؛ و تازه این بدون یادداشتهای میانی خود محاسبهست.
برای همین فاینتیون کامل روی یه کامپیوتر معمولی عملا شدنی نیست، و روشهایی مثل LoRA ساخته شدن که فقط چند تکهی کوچیک رو آموزش بدن؛ اونوقت این ۱۶ بایت فقط برای همون تکههای کوچیک لازمه.
چند نکته
- پارامتر × بایت. ۱۶ بیت ۲، ۸ بیت ۱، ۴ بیت نیم.
- حجم فایل، تقریبا حجم وزنها. یه نگاه به حجم فایل کافیه.
- برای گفتگوی طولانی جای بیشتر. یادداشتها با هر توکن بزرگ میشن.
- همهی حافظه رو پر نکنید. سیستمعامل و برنامهها هم جا میخوان.
درس بعد میگه چطور با بیت کمتر، یه مدل بزرگتر رو جا بدید و چقدر کیفیت از دست میره: کوانتیزه کردن مدل.
جمعبندی. آنچه از این درس با خودتان میبرید.
- پارامتر × بایت هر عدد.
- ۱۶ بیت = ۲ بایت؛ ۴ بیت = نیم بایت.
- ۷ میلیارد × ۲ = ۱۴ گیگ.
- یادداشتهای گفتگو با طولش بزرگ میشه.
- برای سیستمعامل هم جا بذارید.
خودتون رو بسنجید
۱۵ پرسش، هر بار تازه از میان ۳۰ پرسش این درس. آخرش فقط کارنامه رو میبینید: چند تا درست، چند تا نادرست.