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