چیتشیت
قوانین مقیاسپذیری و پیشآموزش
Scaling Laws and Pre-Training
ریاضیات Chinchilla، بیشآموزش، پایپلاین داده از متن خام تا دستههای بستهبندیشده و حلقهی آموزش Mini GPT.
فهرست مطالب
پایپلاین داده
معماریفرمولها
مفهومها- توان پردازشی
- $C \approx 6 \times N \times D$ بر حسب FLOPs برای یک ترنسفورمر استاندارد.
- تابع زیان (loss) هافمن
- $L(N, D) = \frac{A}{N^\alpha} + \frac{B}{D^\beta} + E$
- ثابتهای برازششده
- $\alpha \approx 0.34$، $\beta \approx 0.28$، $E \approx 1.69$، $A \approx 406$، $B \approx 411$.
- بهینه از نظر توان پردازشی
- $N_{\text{opt}} \sim C^{0.5}$، $D_{\text{opt}} \sim C^{0.5}$، $D/N \approx 20$.
- ضریب جاکارد
- شینگلهای مشترک تقسیم بر کل شینگلها. بالای 0.8 نسخه تکراری حذف شود.
- نسبت فشردهسازی
- کاراکتر به ازای هر توکن. در انگلیسی حدود 3-4 است.
- تابع زیان (loss) اولیه
- حدود $\ln(V)$. واژگان 256 توکنیِ بایتی از 5.55 شروع میشود.
- مقیاسبندی اتنشن
- تقسیم بر $\sqrt{d_k}$. برای بعد 64 برابر با 8 است.
مدلها در مقایسه با Chinchilla
مقایسه| عامل | GPT-3 | Chinchilla | Llama 3 8B |
|---|---|---|---|
| پارامترها | 175B | 70B | 8B |
| توکنها | حدود 300B | 1.4T | 15T |
| توکن به ازای پارامتر | حدود 1.7 | حدود 20 | 1,875 |
| حکم ارزیابی | کمتر از حد آموزشدیده | بهینه از نظر توان پردازشی بر اساس طراحی | 94 برابر فراتر از بهینه |
| دلیل | قوانین Kaplan: فشار حداکثری روی N | حداقلسازی تابع زیان (loss) به ازای هر FLOP | سرویسدهی ارزان در مقیاس بالا |
بهینه از نظر توان پردازشی در برابر بیشآموزش
مقایسه| عامل | بهینه بر اساس Chinchilla | بیشآموزش |
|---|---|---|
| حداقلسازی | تابع زیان (loss) آموزش به ازای هر FLOP آموزشی | هزینهی کل به همراه استنتاج |
| توکن به ازای پارامتر | حدود 20 | 100 تا 500، بسته به حجم سرویسدهی |
| هزینهکرد | یکبار، هنگام آموزش | یکبار صرف FLOPs پیشآموزش اضافه |
| هزینهی استنتاج | بیشتر، N بزرگتر است | کمتر، N کوچکتر است |
| بررسی کد | compute_optimal(C) | chinchilla_loss(N_under, D_over) |
| مثال | Chinchilla 70B روی 1.4T | Llama 3 8B روی 15T |
اجرای پایپلاین داده
کدpython
raw_docs = generate_sample_corpus()
cleaned_docs = [clean_text(doc) for doc in raw_docs] # حذف HTML، آدرسهای اینترنتی و فاصلهها
filtered_docs = [doc for doc in cleaned_docs if quality_filter(doc)] # طول، حروف بزرگ، نمادها
deduped_docs, num_removed = deduplicate(filtered_docs, threshold=0.8) # MinHash + LSH
tokenizer = SimpleTokenizer()
tokenizer.train_bpe(all_text, num_merges=100)
token_ids = tokenize_corpus(deduped_docs, tokenizer) # افزودن eos_id پس از هر سند
sequences, masks = pack_sequences(token_ids, seq_length, pad_id=0) # seq_length برابر 128
loader = PreTrainingDataLoader(sequences, masks, batch_size) # batch_size برابر 4، بُرزدهشده
stats = compute_statistics(deduped_docs, token_ids, sequences, tokenizer.vocab_size())
یک گام آموزش
گامبهگام- دستهدریافت
seq_len + 1توکن. ورودیها توکن آخر را حذف میکنند. هدفها توکن اول را حذف میکنند. - ماسک
np.triu(np.full((seq_len, seq_len), -1e9), k=1)موقعیتهای آینده را مسدود میکند. - پیشروامبدینگها، تمام بلوکها، LayerNorm نهایی. لاجیتها از
token_embed.Tاستفاده میکنند. - تابع زیان (loss)
cross_entropy_loss(logits, target_ids)همراه با سافتمکس لگاریتمی تفریقشده از بیشینه. - پسرومحاسبهی گرادیانها برای تمام پارامترها.
- بهروزرسانی
block.ffn.W1 -= lr * gW1و به همین ترتیب برای هر تنسور. - زمانبندیمدل GPT-2 طی 2,000 گام گرمکردن اولیه دارد و سپس افت کسینوسی اعمال میشود.
توابع موجود در درسها
کار و کد| وظیفه | کد |
|---|---|
| پیشبینی تابع زیان (loss) | chinchilla_loss(N, D) |
| یافتن N و D بهینه | compute_optimal(C_flops, n_grid=200) |
| شینگلهای کلمات | get_shingles(text, k=5) |
| دستهبندی امضا درون باکتها | lsh_buckets(signature, bands=16) |
| آموزش GPT کوچک | train_mini_gpt(corpus, num_steps=200) |
| شمارش پارامترهای خانوادهی GPT-2 | parameter_breakdown() |
| وزنها و حافظهی KV | memory_estimate() |
پیشفرضها
پیشفرضها| تنظیم | پیشفرض | نکته |
|---|---|---|
min_words | 50 | صفحات استاب (کد جایگزین موقت) را حذف میکند |
max_ratio_caps | 0.3 | هرزنامههای نوشتهشده با حروف تمامبزرگ را حذف میکند |
max_ratio_special | 0.1 | نویز ناشی از نمادها را حذف میکند |
num_hashes | 128 | طول امضای MinHash |
bands | 16 | باندهای بیشتر بازخوانی بالاتری میدهند |
threshold | 0.8 | آستانهی جاکارد برای موارد تکراری |
vocab_size | 50257 | MiniGPT با 768 بعد، 12 هد، 12 لایه |
max_seq_len | 1024 | پنجرهی بافتار GPT-2 |
عیبیابی
عیبیابیمدل عبارات را کلمهبهکلمه تکرار میکند
- علت
- دادههای تکراری در مجموعه داده
- راهحل
- حذف موارد تکراری با MinHash، حدود 38٪ دادههای وب
خروجی حاوی تگهای HTML است
- علت
- متن خام وب
- راهحل
- پیش از آموزش تگهای HTML را حذف کنید
نشت اسناد به یکدیگر
- علت
- اسناد بستهبندیشده اتنشن مشترک دارند
- راهحل
- از ماسک قطری-بلوکی استفاده کنید
بهرهوری دنباله کمتر از 90٪
- علت
- هدررفت ناشی از پدینگ
- راهحل
- اسناد را همراه با EOS بین آنها بستهبندی کنید
امتیاز زبان انگلیسی با اطمینان کمتر از 0.8
- علت
- انگلیسی پاکیزه نیست
- راهحل
- سند را فیلتر و حذف کنید
مدل در ابتدای کار واگرا میشود
- علت
- نرخ یادگیری بالا در آغاز
- راهحل
- نرخ یادگیری را به صورت گرمکردن اولیه افزایش دهید
سرریز
expبه بینهایت- علت
- بزرگ بودن لاجیتها
- راهحل
- پیش از محاسبهی exp بیشینه را کم کنید
ناپدید شدن گرادیانها در نزدیکی بلوک 1
- علت
- عدم وجود مسیر باقیمانده (residual)
- راهحل
- عبارت
x + sublayer(x)را اضافه کنید
آمارهای GPT-2 Small
مفهومها- کل
- 124,438,272 پارامتر با اشتراک ماتریس وزنها.
- امبدینگهای توکن
- ماتریس (50257, 768) معادل 38,597,376 است.
- به ازای هر بلوک
- 7,080,960. بخش اتنشن 2,359,296 و FFN معادل 4,718,592.
- هدها
- 12 هدِ 64 بعدی. FFN از 768 به 3,072 میرود.
- اشتراک ماتریس وزنها
- هد مجدداً از امبدینگ توکن استفاده میکند. 38 میلیون صرفهجویی.
- کش کلید-مقدار
- 18,432 مقدار به ازای هر توکن. حدود 75 مگابایت در 1024 توکن با فرمت FP32.
- مقداردهی اولیه
- وزنها از انحراف معیار 0.02 استفاده میکنند.
استفاده از قوانین مقیاسپذیری برای تصمیمگیری
نکتهها- زیر 20 توکن به ازای هر پارامتر مدل پایه، انتظار اشباع زودهنگام فاینتیون را داشته باشید.
- وقتی بیشترین بخش بودجه صرف استنتاج میشود، مدلی کوچکتر انتخاب کنید که بیشتر آموزش دیده است.
- فراتر از 1000 برابر حالت بهینهی Chinchilla، تغییرات لگاریتمی تابع زیان صرفاً نویز محسوب میشوند.
- بودجهها را بر اساس تابع زیان پیوسته برنامهریزی کنید. جهشهای بنچمارک اغلب دستساختههای ارزیابیکنندهها هستند.
- دادههای بهتر، Muon و MoE ثابتها را تغییر میدهند، نه شکل نمودار را.
- انتظار یک سقف داده را داشته باشید: حدود 5 تا 10 تریلیون توکن انگلیسی باکیفیت.
- ترکیب Llama 3: شامل 50٪ وب، 25٪ کد، 13٪ کتابها و مقالات، 8٪ ریاضی، 4٪ چندزبانه.
پرسشها
پرسش و پاسخ- $E$ چیست؟
- زیان کاهشناپذیر؛ همان آنتروپی خود دادهها.
- چرا بیشآموزش؟
- هزینهی آموزش یکبار پرداخت میشود، اما هزینهی استنتاج همیشگی است.
- چرا هر سند را پدینگ نکنیم؟
- پدینگ توان پردازشی را هدر میدهد؛ اسناد را بستهبندی و ماسکگذاری کنید.
- چرا رمزگشایی کُند است؟
- چون متکی به پهنای باند حافظه است؛ در حالی که پیشپرکنی متکی به توان پردازشی است.