ادامهٔ ۲.۲.۲ — اصلاحات مدل
اگر در خانوادهٔ GLU تابع σ(·) را تابع Swish با تعریف σswish(h)=h⊙Sigmoid(ch) در نظر بگیریم [Ramachandran et al., 2017]، تابع SwiGLU بهصورت زیر بهدست میآید:
σswiglu(h) = σswish(hW₁+b₁) ⊙ (W₂+b₂) (2.30)
خانوادههای PaLM و LLaMA هر دو بر پایهٔ SwiGLU هستند. برای بحث بیشتر دربارهٔ GLUها میتوان به Shazeer [2020] مراجعه کرد.
۲.۲.۲.۳ حذف جملههای بایاس
طراحی رایج دیگری در LLMها حذف جملههای بایاس (bias terms) از تبدیلهای افاین است. این کار را میتوان در نرمالسازی لایه، تبدیل ورودیهای توجه QKV و FFNها اعمال کرد. برای نمونه، رابطهٔ (۲.۲۵) را میتوان به FFN بدون بایاس تبدیل کرد:
FFN(h) = σ(hWh)Wf (2.31)
Chowdhery et al. [2022] گزارش کردند حذف بایاس به پایداری بهتر آموزش LLM کمک میکند. این روش در چند LLM جدید مانند LLaMA و Gemma استفاده شده است.
۲.۲.۲.۴ مسائل دیگر
بسیاری از LLMها تغییراتی در مدل تعبیهٔ موقعیت نیز دارند. برای مثال میتوان رمزگذاری موقعیت سینوسی را با تعبیهٔ موقعیت چرخشی (rotary position embeddings) جایگزین کرد تا LLM بتواند دنبالههای بلند را بهتر مدیریت کند. این مدلها در بخش ۲.۳ بررسی میشوند.
اگرچه اصلاح معماری در آموزش LLM رایج است، پایداری آموزش را میتوان از راههای بسیار دیگری نیز بهبود داد. برای مثال، افزایش اندازهٔ batch همزمان با پیشرفت آموزش برای بعضی LLMها مفید گزارش شده است. بهطور کلی، رسیدن به آموزش بزرگمقیاس پایدار و کارآمد به تنظیم دقیق برنامهٔ نرخ یادگیری، انتخاب بهینهساز، موازیسازی آموزش، آموزش با دقت مختلط و موارد دیگر نیاز دارد. برخی از این موضوعات بسیار مهندسیمحورند و معمولاً برای رسیدن به LLM رضایتبخش باید چند اجرای آموزشی انجام شود.
۲.۲.۳ آموزش توزیعشده
آموزش LLM به مقدار چشمگیری منابع محاسباتی نیاز دارد. یک روش رایج برای افزایش کارایی آموزش، استفاده از سامانههای توزیعشدهٔ بزرگمقیاس است. خوشبختانه همزمان با رشد شبکههای عصبی در هوش مصنوعی، نرمافزار و سختافزار ویژهٔ یادگیری عمیق نیز توسعه یافته و پیادهسازی LLM و انجام محاسبات آسانتر شده است. امروزه میتوان با چارچوبهای نرمافزاری یادگیری عمیق و یک ماشین چند-GPU، یک LLM را نسبتاً آسان ریزتنظیم کرد. بااینحال، مقیاسدادن آموزش LLM همچنان دشوار است و برای آموزش توزیعشدهٔ پایدار و کارآمد به تلاش جدی در توسعهٔ سختافزار و نرمافزار نیاز دارد.
یکی از ملاحظات مهم در آموزش توزیعشده «موازیسازی» (parallelism) است. شکلهای مختلفی از موازیسازی وجود دارد: موازیسازی داده، مدل، تنسور و خط لوله. با وجود تفاوت در نحوهٔ توزیع محاسبات روی دستگاهها، همه بر یک ایدهٔ مشترک بنا شدهاند: مسئلهٔ آموزش به وظایف کوچکتری تقسیم میشود که همزمان قابل اجرا هستند. موازیسازی در آموزش LLM بهطور گسترده بررسی شده است [Narayanan et al., 2021; Fedus et al., 2022]. در ادامه مفاهیم پایه مرور میشوند.
موازیسازی داده
این روش یکی از پرکاربردترین شیوههای موازیسازی آموزش شبکههای عصبی است. سادهترین حالت را در نظر بگیرید که قاعدهٔ دلتا برای گرادیانکاهشی استفاده میشود:
θt+1 = θt − lr · ∂Lθt(Dmini)/∂θt (2.32)
پارامترهای جدید θt+1 با حرکت کوچکی به اندازهٔ lr در جهت منفی گرادیان زیان از پارامترهای فعلی θt بهدست میآیند. گرادیان روی مینیبتچ Dmini محاسبه میشود. در موازیسازی داده، Dmini به N batch کوچکتر {D₁,...,DN} تقسیم و هر batch به یک worker داده میشود. پس از توزیع داده، workerها همزمان کار میکنند و گرادیان کل مینیبتچ با تجمیع گرادیانهای آنها بهدست میآید:
∂Lθt(Dmini)/∂θt = ∂L(D₁)/∂θt + ∂L(D₂)/∂θt + ... + ∂L(DN)/∂θt (2.33)
در حالت ایدهآل که هماهنگی workerها خوب و سربار ارتباطی کم باشد، موازیسازی داده میتواند تقریباً سرعتی N برابر ایجاد کند.
موازیسازی مدل
موازیسازی داده ساده و مؤثر است، اما مستلزم آن است که هر worker کل LLM را اجرا و فرایند کامل forward و backward را انجام دهد. با بزرگشدن LLM، گاهی بارگذاری و اجرای کل مدل روی یک دستگاه ممکن نیست. در این حالت میتوان LLM را به مؤلفههای کوچکتر جدا کرد و هر مؤلفه را روی دستگاهی متفاوت اجرا کرد. یک روش ساده، گروهبندی لایههای متوالی و اختصاص هر گروه به یک worker است. workerها مطابق ترتیب لایهها عمل میکنند: در گذر رو به جلو ورودی از لایههای پایین به بالا و در گذر رو به عقب گرادیان خطا از لایههای بالا به پایین منتقل میشود.
برای مثال، Transformer decoder با L بلوک پشتهشده را در نظر بگیرید و هر بلوک را به یک worker بدهید:
Worker L: B_L (↑) B_L (↓)
...
Worker 2: B_2 (↑) B_2 (↓)
Worker 1: B_1 (↑) B_1 (↓)
Bl محاسبهٔ بلوک l و ↑/↓ بهترتیب گذر رو به جلو و رو به عقب را نشان میدهند. این روش workerها را مجبور میکند ترتیبی اجرا شوند، بنابراین هر worker باید منتظر اتمام کار worker قبلی بماند و دستگاهها بیشتر زمان بیکار میشوند. در سامانههای عملی، موازیسازی مدل معمولاً همراه با روشهای موازیسازی دیگر بهکار میرود تا استفاده از دستگاهها بیشینه شود.
موازیسازی تنسور
موازیسازی میتواند درون یک گام محاسباتی نیز انجام شود. نمونهٔ رایج، تقسیم یک ماتریس پارامتر بزرگ به قطعهها، ضرب جداگانهٔ تنسور ورودی در هر قطعه و سپس الحاق نتایج است. ضرب بازنمایی h∈Rd در ماتریس پارامتر Wh∈Rd×dh یک FFN را در نظر بگیرید. ماتریس Wh را میتوان بهصورت عمودی به M زیرماتریس برش داد:
Wh = [Wh1 Wh2 ... WhM] (2.34)
هر زیرماتریس شکل d×(dh/M) دارد. بنابراین:
hWh = [hWh1 hWh2 ... hWhM] (2.35)
ضربهای {hWh1,...,hWhM} را میتوان روی M دستگاه جداگانه انجام داد. در نتیجه، یک ضرب ماتریسی بزرگ روی چند دستگاه با حافظهٔ کمتر توزیع میشود. از دید طراحی GPUهای مدرن، موازیسازی تنسور روی GPU یک رویکرد دولایهٔ مبتنی بر tile فراهم میکند: در سطح بالاتر ضرب ماتریسی به ضربهای زیرماتریس تقسیم میشود که در حافظهٔ GPU جا میگیرند، و در سطح پایینتر همان ضربهای کوچک با الگوریتمهای موازی tileمحور بهینهشده برای GPU اجرا میشوند.
موازیسازی خط لوله
در موازیسازی مدل ساده، تنها یک دستگاه در هر لحظه فعال است. موازیسازی خط لوله (pipeline parallelism) با همپوشانی محاسبات دستگاههای مختلف این مشکل را کاهش میدهد [Harlap et al., 2018; Huang et al., 2019]. برای این کار، یک batch به چند micro-batch تقسیم میشود و هر worker آنها را بهترتیب پردازش میکند. بهمحض اینکه یک micro-batch از worker جاری به worker بعدی فرستاده شود، micro-batch بعدی همان worker را اشغال میکند. به عبارت دیگر، یک pipeline ساخته میشود که در حضور چند کار، گامهای محاسباتی مختلف میتوانند همپوشانی داشته باشند.
Worker L: B_L,1 B_L,2 B_L,3 ...
...
Worker 2: B_2,1 B_2,2 B_2,3 ...
Worker 1: B_1,1 B_1,2 B_1,3 ...
Bl,k پردازش micro-batch شمارهٔ k توسط worker شمارهٔ l است. در حالت ایدهآل میخواهیم تعداد micro-batchها زیاد باشد تا زمان بیکاری workerها کم شود؛ اما در عمل micro-batch بسیار کوچک استفادهٔ GPU را پایین و هزینهٔ تعویض وظیفه را بالا میبرد و ممکن است توان عملیاتی کل سامانه کاهش یابد.
هدف نهایی پردازش موازی، رشد خطی کارایی است؛ یعنی تعداد نمونههای پردازششده در واحد زمان با تعداد دستگاهها بهصورت خطی افزایش یابد. بااینحال آموزش توزیعشده پیچیده است و عوامل زیادی فراتر از روش موازیسازی بر آن اثر دارند. یکی از مشکلات رایج، هزینهٔ ارتباط است. سامانهٔ توزیعشده را میتوان گروهی از گرههای شبکهشده دانست که هرکدام محاسبهٔ محلی انجام میدهند یا داده را به گرههای دیگر میفرستند. با زیادشدن تعداد گرهها، توزیع و جمعآوری داده بین آنها پرهزینه میشود و گاهی صرفهجویی زمانی موازیسازی با سربار ارتباطی شبکه خنثی میشود.
مشکل دیگر، هزینهٔ همگامسازی گرهها است. بعضی گرهها ممکن است کندتر کار کنند و بقیه مجبور شوند منتظر کندترین گره بمانند. آموزش ناهمگام میتواند ناهمگنی منابع را مدیریت کند، اما ممکن است به گرادیانهای کهنه (stale gradients) و همگرایی تضمیننشده منجر شود. افزون بر این، با افزایش تعداد گرهها احتمال خرابی گره در طول آموزش بالا میرود و سامانه باید تحمل خطا داشته باشد. برای افزایش مقیاسپذیری در عمل باید مسائل دیگری مانند طراحی معماری، همپوشانی انتقال داده و محاسبه، توازن بار، پهنایباند حافظه و موارد مشابه نیز در نظر گرفته شوند.
آموزش LLM آنقدر پرهزینه است که حتی با وجود آموزش توزیعشده، پژوهشگران و مهندسان از روشهای مختلف فشردهسازی و شتابدهی برای افزایش کارایی آموزش استفاده میکنند [Weng, 2021]. نمونهای مهم، آموزش با دقت مختلط (mixed precision) است که در آن دادهٔ کمدقت مانند FP16 و FP8 برای محاسبهٔ گرادیان در هر گره و دادهٔ تکدقت یا دودقت مانند FP32/FP64 برای بهروزرسانی مدل استفاده میشود [Micikevicius et al., 2018]. عملیات کلیدی در این روش انباشت گرادیان است و گرادیانها باید میان گرهها انباشته و همگام شوند.
بهدلیل شرکتپذیر نبودن جمع اعداد ممیز شناور، این انباشت ممکن است اختلافهای عددی کوچکی در گرادیانهای انباشتهشدهٔ گرههای مختلف ایجاد کند و روی همگرایی و عملکرد نهایی اثر بگذارد. مشکل در سامانههای دارای گرههای بسیار زیاد آشکارتر است، بهویژه آنکه محاسبات کمدقت ممکن است با سرریز/کمریز و ناسازگاری بین سختافزارهای مختلف روبهرو شوند. بنابراین طراحی سامانهٔ توزیعشده باید این مسائل عددی را نیز لحاظ کند تا همگرایی و نتیجهٔ رضایتبخش تضمین شود.
۲.۲.۴ قوانین مقیاسپذیری
موفقیت LLMها نشان داده است که آموزش مدلهای زبانی بزرگتر با منابع بیشتر میتواند عملکرد را بهتر کند. این پدیده با «قوانین مقیاسپذیری» (scaling laws) LLMها توضیح داده میشود. قوانین مقیاسپذیری رابطهٔ میان عملکرد LLM و ویژگیهای آموزش مانند اندازهٔ مدل، مقدار محاسبهٔ مصرفشده و حجم دادهٔ آموزش را توصیف میکنند. برای مثال Hestness et al. [2017] نشان دادند عملکرد شبکههای عصبی عمیق تابعی شبیه قانون توانی از اندازهٔ دادهٔ آموزش است. در آغاز که داده کم است، عملکرد مدل آهسته بهتر میشود. سپس با افزایش داده، مدل وارد فاز بهبود سریع میشود و منحنی شبیه قانون توانی است. در نهایت بهبود دوباره کند میشود و دادهٔ بیشتر سود چشمگیری نمیدهد.
شکل ۲.۳ — قانون مقیاسپذیری خطای آزمون نسبت به یک متغیر مورد نظر، مانند اندازهٔ مجموعهدادهٔ آموزش [Hestness et al., 2017]. منحنی سه فاز دارد: ابتدا کاهش خطا آهسته است؛ سپس خطا با الگویی شبیه قانون توانی بهسرعت کاهش مییابد؛ و در فاز سوم کاهش دوباره کند میشود. بخشی از خطا کاهشناپذیر است و با هر مقدار داده باقی میماند.
در NLP دیدگاه سنتی این بود که با افزایش مقیاس آموزش، در نقطهای سود عملکرد از بین میرود. نتایج جدید نشان میدهند اگر مسئله را در مقیاس بسیار بزرگتر بررسی کنیم، افزایش مقیاس همچنان راهی مؤثر برای ساخت LLM قویتر است. هم مدلهای بسته و هم مدلهای متنباز از دادهٔ بیشتر سود میبرند، حتی وقتی پیشتر تریلیونها توکن برای آموزش استفاده شده باشد.
با افزایش مقیاس آموزش، LLMها قابلیتهای تازهای نشان میدهند که «تواناییهای برآمده» (emergent abilities) نامیده میشوند. Wei et al. [2022b] ویژگیهای مقیاسپذیری LLMها را در اندازههای مختلف مدل و منابع محاسباتی بررسی کردند و نشان دادند برخی تواناییها وقتی اندازهٔ مدل به سطح مشخصی میرسد ظاهر میشوند. پدیدارشدن این تواناییها نقش آموزش بزرگمقیاس را در افزایش عملکرد برجسته کرده و تا حدی انگیزهٔ پژوهشگران برای آموزش مدلهای بزرگتر را تقویت کرده است. با ظهور مدلهای بزرگتر و قویتر، درک ما از قوانین مقیاسپذیری نیز پختهتر میشود؛ این امر به پیشبینی عملکرد در طول آموزش و برآورد حداقل منابع محاسباتی لازم برای سطح مشخصی از عملکرد کمک میکند.
برای فهم چگونگی مقیاسشدن عملکرد با عوامل مختلف آموزش، عملکرد مدل معمولاً بهصورت تابعی از آن عوامل نوشته میشود. در سادهترین حالت، زیان یا خطای LLM را تابعی از یک متغیر میگیریم. قانون جهانی واحدی وجود ندارد و توابع مختلف برای برازش منحنی یادگیری پیشنهاد شدهاند. اگر x متغیر مورد نظر (مثلاً تعداد پارامترها) و L(x) زیان مدل باشد، سادهترین شکل یک قانون توانی است:
L(x) = a xb (2.36)
که a و b بهصورت تجربی برآورد میشوند. با وجود سادگی، این تابع توان مقیاسپذیری مدلهای زبانی و ترجمهٔ ماشینی را از نظر اندازهٔ مدل N و اندازهٔ دادهٔ آموزش D با موفقیت توضیح داده است [Gordon et al., 2021; Hestness et al., 2017]. Kaplan et al. [2020] دریافتند پس از یک دورهٔ گذر اولیه، عملکرد مدل زبانی آنها با قانون توانی نسبت به N یا D بهتر میشود:
L(N) = (N / 8.8×1013)−0.076
L(D) = (D / 5.4×1013)−0.095
شکل ۲.۴ — زیان آزمون در برابر اندازهٔ مدل N و اندازهٔ مجموعهدادهٔ آموزش D. نقاط داده برای نمایش رسم شدهاند. توابع برازششده همان روابط قانون توانی بالا هستند [Kaplan et al., 2020].
یک بهبود برای قانون مقیاسپذیری، افزودن جملهٔ خطای کاهشناپذیر به قانون توانی است:
L(x) = a xb + ϵ∞ (2.37)
ϵ∞ خطای کاهشناپذیر ناشی از متغیرهای ناشناخته است که حتی با x→∞ باقی میماند. رابطهٔ (۲.۳۷) یکی از شکلهای پرکاربرد طراحی قوانین مقیاسپذیری LLM است. Rosenfeld et al. [2020] قانونی ساختند که هم مقیاس مدل و هم داده را شامل میشود:
L(N,D) = aNb + cDd + ϵ∞ (2.38)
نمونهٔ مشهور این صورتبندی، قانون Chinchilla است. این قانون میگوید زیان آزمون بهازای هر توکن برابر جمع دو تابع نسبت معکوس از N و D بهعلاوهٔ خطای کاهشناپذیر است. Hoffmann et al. [2022] آن را چنین بیان میکنند:
L(N,D) = 406.4/N0.34 + 410.7/D0.28 + 1.69 (2.39)
سه جملهٔ این رابطه بهترتیب اثر مقیاس مدل، مقیاس مجموعهداده و خطای کاهشناپذیر را نشان میدهند.
همهٔ قوانین مقیاسپذیری بالا بر توابع یکنواخت بنا شدهاند و بنابراین منحنیهایی با نقطهٔ عطف، مانند منحنیهای double descent، را پوشش نمیدهند. به همین دلیل، پژوهشگران توابع پیچیدهتری برای برازش منحنیهای یادگیری بررسی کردهاند؛ ادامهٔ این بحث در بخش بعدی آمده است.