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