تصور کنید برای بهروزرسانی یک مدل ۷ میلیارد پارامتری (Llama-style 7B)، باید فضایی ۸ برابر بزرگتر از خود مدل را در حافظه رزرو کنید. در حالی که خود مدل در دقت fp16 تنها ۱۴ گیگابایت فضا اشغال میکند، اما حسابداری مورد نیاز برای بهروزرسانی وزنها، ۹۸ گیگابایت حافظه اضافی میطلبد. این یعنی حتی پیش از ذخیره اولین فعالسازها (Activations)، ۱۱۲ گیگابایت حافظه GPU شما تنها برای مدیریت ریاضیاتِ بهروزرسانی اشغال میشود.
بسیاری از توسعهدهندگان تصور میکنند نیاز به حافظه با اندازه مدل رابطه خطی دارد، اما واقعیت پیچیدهتر است. تنظیم دقیق (Fine-tuning) — که شبیه دادن تخصص پوست به یک پزشک عمومی است تا در یک حوزه خاص دقیق شود — در حالت استاندارد هزینهای گزاف دارد. طبق گزارشی که در ۳ اکتبر ۲۰۲۶ در وبسایت dev.to منتشر شد، استفاده از بهینهساز Adam در آموزش با دقت ترکیبی (Mixed-precision training)، سربار عظیمی ایجاد میکند. این هزینه حافظه ناشی از نیاز به ذخیره نه تنها وزنها، بلکه گرادیانها و وضعیتهای بهینهساز است. این چالشها در مسیر بهینهسازی مدلهاست که باعث شد رویکردهای جدیدی برای کاهش ۱۰ برابری هزینههای محاسباتی در پیشآموزش توسعه یابند تا دسترسی به مدلهای باز تسهیل شود.
همانطور که در بحثهای گذشته ما دربارهی بهینهسازی مدلهای بازمتن اشاره کردیم، گلوگاه اصلی دیگر اندازه مدل نیست، بلکه هزینه مکانیزم بهروزرسانی است.
جزئیات حسابداری حافظه
محاسبات مربوط به این سربار از مقاله ZeRO استخراج شده است. برای مدلی مانند GPT-2 با ۱.۵ میلیارد پارامتر، حداقل ۲۴ گیگابایت حافظه لازم است، در حالی که خود پارامترها در حالت fp16 تنها ۳ گیگابایت فضا میگیرند. فرمول این نیاز به حافظه به صورت 2Ψ + 2Ψ + KΨ = 16Ψ بایت است که در آن Ψ تعداد پارامترهاست.
برای هر پارامتر، سیستم باید موارد زیر را در حافظه نگه دارد:
- ۲ بایت: وزنهای fp16
- ۲ بایت: گرادیانهای fp16
- ۱۲ بایت: وضعیت بهینهساز (Optimizer State یا K)، که شامل یک نسخه fp32 از وزنها (Master Copy) به علاوه دو بافر تکانه (Momentum) متعلق به Adam است که هر کدام ۴ بایت فضا میگیرند.
در مجموع، برای هر پارامتر ۱۶ بایت حافظه نیاز است. در یک مدل ۷ میلیارد پارامتری، این محاسبات به عدد ۱۱۲ گیگابایت میرسد که ۸۴ گیگابایت آن تنها متعلق به وضعیت بهینهساز است؛ یعنی ۶ برابر اندازه خود وزنها.
کاهش هزینه حسابداری با LoRA
برای عبور از این دیوار سختافزاری، توسعهدهندگان از لورا (LoRA یا Low-Rank Adaptation) استفاده میکنند. در این روش، به جای بهروزرسانی تمام ۷ میلیارد پارامتر، مدل پایه منجمد (Freeze) میشود و تنها ماتریسهای کوچکی که به مدل تزریق شدهاند آموزش میبینند. مدل پایه همچنان در دقت fp16 در حافظه باقی میماند (۱۴ گیگابایت)، اما دیگر هیچ گرادیان یا وضعیت بهینهسازی برای آن ذخیره نمیشود.
- کاهش پارامترها: در یک مدل 7B با ۳۲ لایه و اندازه پنهان (Hidden Size) ۴۰۹۶، استفاده از آداپتورهایی با رتبه (Rank) ۸ روی تصویرسازهای Query و Value، منجر به ایجاد ۴,۱۹۴,۳۰۴ پارامتر قابل آموزش میشود. هر آداپتور شامل ۸ × (۴۰۹۶ + ۴۰۹۶) = ۶۵,۵۳۶ مقدار است.
- کارایی: این مقدار تقریباً ۰.۰۶٪ از اندازه کل مدل است. در واقع شما به جای ۷ میلیارد عدد، تنها ۴ میلیون عدد را آموزش میدهید.
- عملکرد: به نقل از پژوهش Hu و همکاران، لورا میتواند پارامترهای قابل آموزش را تا ۱۰ هزار برابر کاهش دهد و نیاز به حافظه GPU را در مقایسه با تنظیم دقیق کامل در مدل GPT-3 175B تا ۳ برابر کم کند، در حالی که کیفیت مدل را در سطح مشابه یا حتی بهتر حفظ میکند.
از آنجا که این بهروزرسانیهای کمرتبه در نهایت با وزنهای پایه ادغام (Merge) میشوند، هیچ تأخیری در استنتاج (Inference) — یعنی لحظهای که مدل واقعاً جواب تولید میکند — ایجاد نمیشود. این ویژگی، لورا را از متدهای قدیمیتر آداپتور متمایز میکند که یک لایه اضافی را به طور دائمی در مسیر پیشرو (Forward Pass) باقی میگذاشتند. در کنار بهینهسازی پارامترها، مدیریت حافظه در زمان استنتاج نیز حیاتی است؛ برای مثال استفاده از حافظه مجازی در مدیریت KV-Cache میتواند گلوگاههای حافظه را در مدلهای بزرگتر برطرف کند.
کوچک کردن مدل پایه با QLoRA
در حالی که لورا سربار بهینهساز را حذف میکند، مدل پایه منجمد همچنان به ۱۴ گیگابایت فضا نیاز دارد. انطباق کمرتبهٔ کوانتیده (QLoRA) هدفش کاهش همین هزینه باقیمانده است. QLoRA با ذخیره مدل پایه در دقت ۴ بیتی، نیاز به حافظه را به حدود ۳.۵ گیگابایت میرساند.
Dettmers و همکاران این فرآیند را از طریق «کوانتیزاسیون مضاعف» (Double Quantization) بهینهتر کردند. این فرآیند سربار کوانتیزاسیون را از ۰.۵ بیت (۳۲/۶۴) به ۰.۱۲۷ بیت (۸/۶۴ + ۳۲/(۶۴ · ۲۵۶)) برای هر پارامتر کاهش میدهد. در این حالت، گرادیانها همچنان از طریق مدل پایه ۴ بیتی جریان مییابند و به آداپتورهای لورا که در دقت بالاتری نگه داشته شدهاند، میرسند.
این کارایی اجازه میدهد یک مدل ۶۵ میلیارد پارامتری روی یک GPU تک ۴۸ گیگابایتی تنظیم شود، در حالی که سطوح عملکرد ۱۶ بیتی حفظ گردد. البته بهای این کاهش حافظه در QLoRA، افت سرعت است؛ زیرا وزنهای ۴ بیتی باید برای هر عملیات ریاضی در هر پاس، دوباره به دقت بالاتر تبدیل (Dequantize) شوند، بنابراین این فرآیند کندتر از لورای استاندارد اجرا میشود. این سطح از بهینهسازی است که امکاناتی نظیر اجرای مدلهای عظیم ۱۵۰ میلیاردی روی سختافزارهای معمولی را فراهم میکند.
این تغییر در رویکرد، فرض بنیادین آموزش مدل را تغییر میدهد. گلوگاه دیگر اندازه مدل نیست، بلکه هزینه مکانیزم بهروزرسانی است. شما در واقع در حال انتخاب این هستید که از کدام یک از آن ۱۶ بایت برای هر پارامتر میتوانید صرفنظر کنید. تنظیم دقیق کامل تمام ۱۶ بایت را میپردازد. لورا پرداخت ۱۴ بایت مربوط به حسابداری مدل پایه را متوقف میکند و QLoRA آن ۲ بایت باقیمانده را به تقریباً نیم بایت کاهش میدهد.
توسعهدهندگان اکنون باید محدودیتهای سختافزاری خود را در برابر نیازهای دقت خاص تسک خود ارزیابی کنند. اگر تسک مورد نظر تفاوت بنیادینی با دادههای پیشآموزش مدل دارد، تنظیم دقیق کامل همچنان استاندارد طلایی است، به شرطی که سختافزار لازم در دسترس باشد.
گام بعدی شما
- اگر حافظه GPU شما زیر ۲۴ گیگابایت است، مستقیماً از QLoRA برای مدلهای 7B استفاده کنید.
- برای تسکهای تخصصی پزشکی یا حقوقی، ابتدا لورا را امتحان کنید و در صورت عدم دقت، به سراغ تنظیم دقیق کامل بروید.
- ابزارهای PEFT را برای مدیریت بهینه پارامترها در محیط PyTorch بررسی کنید.
اما داستان سختافزاری این تحول حتی شگفتانگیزتر است — به تحلیل ما دربارهی تراشههای Blackwell مراجعه کنید.




گفتگو