چیت‌شیت

قوانین مقیاس‌پذیری و پیش‌آموزش

Scaling Laws and Pre-Training

ریاضیات Chinchilla، بیش‌آموزش، پایپ‌لاین داده از متن خام تا دسته‌های بسته‌بندی‌شده و حلقه‌ی آموزش Mini GPT.

  • ۱۲ بخش
  • ۳ درس مرتبط
  • کد و دستورها عیناً از دوره‌ی اصلی
فهرست مطالب
  1. پایپ‌لاین داده
  2. فرمول‌ها
  3. مدل‌ها در مقایسه با Chinchilla
  4. بهینه از نظر توان پردازشی در برابر بیش‌آموزش
  5. اجرای پایپ‌لاین داده
  6. یک گام آموزش
  7. توابع موجود در درس‌ها
  8. پیش‌فرض‌ها
  9. عیب‌یابی
  10. آمارهای GPT-2 Small
  11. استفاده از قوانین مقیاس‌پذیری برای تصمیم‌گیری
  12. پرسش‌ها

پایپ‌لاین داده

معماری
دنباله‌ها، ماسک‌هامتن خام‏Common Crawl با حدود 250 ترابایت متن خامحذف HTMLفقط متن مرئیتشخیص زبان‏lid.176.bin، اطمینان 0.8فیلتر کیفیتپرپلکسیتی یا روش‌های ابتکاری (heuristics)حذف موارد تکراری‏MinHash + LSHحذف داده‌های هویتی (PII)عبارات منظم (regex) و بازشناسی موجودیت‌های نام‌دار (NER)توکن‌سازی + بسته‌بندیقراردادن EOS میان اسنادDataLoaderدسته‌های بُرزده‌شده

فرمول‌ها

مفهوم‌ها
توان پردازشی
$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-3ChinchillaLlama 3 8B
پارامترها175B70B8B
توکن‌هاحدود 300B1.4T15T
توکن به ازای پارامترحدود 1.7حدود 201,875
حکم ارزیابیکمتر از حد آموزش‌دیدهبهینه از نظر توان پردازشی بر اساس طراحی94 برابر فراتر از بهینه
دلیلقوانین Kaplan: فشار حداکثری روی Nحداقل‌سازی تابع زیان (loss) به ازای هر FLOPسرویس‌دهی ارزان در مقیاس بالا

بهینه از نظر توان پردازشی در برابر بیش‌آموزش

مقایسه
عاملبهینه بر اساس Chinchillaبیش‌آموزش
حداقل‌سازیتابع زیان (loss) آموزش به ازای هر FLOP آموزشیهزینه‌ی کل به همراه استنتاج
توکن به ازای پارامترحدود 20100 تا 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())

یک گام آموزش

گام‌به‌گام
  1. دستهدریافت seq_len + 1 توکن. ورودی‌ها توکن آخر را حذف می‌کنند. هدف‌ها توکن اول را حذف می‌کنند.
  2. ماسکnp.triu(np.full((seq_len, seq_len), -1e9), k=1) موقعیت‌های آینده را مسدود می‌کند.
  3. پیش‌روامبدینگ‌ها، تمام بلوک‌ها، LayerNorm نهایی. لاجیت‌ها از token_embed.T استفاده می‌کنند.
  4. تابع زیان (loss)cross_entropy_loss(logits, target_ids) همراه با سافت‌مکس لگاریتمی تفریق‌شده از بیشینه.
  5. پس‌رومحاسبه‌ی گرادیان‌ها برای تمام پارامترها.
  6. به‌روزرسانیblock.ffn.W1 -= lr * gW1 و به همین ترتیب برای هر تنسور.
  7. زمان‌بندیمدل 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-2parameter_breakdown()
وزن‌ها و حافظه‌ی KVmemory_estimate()

پیش‌فرض‌ها

پیش‌فرض‌ها
تنظیمپیش‌فرضنکته
min_words50صفحات استاب (کد جایگزین موقت) را حذف می‌کند
max_ratio_caps0.3هرزنامه‌های نوشته‌شده با حروف تمام‌بزرگ را حذف می‌کند
max_ratio_special0.1نویز ناشی از نمادها را حذف می‌کند
num_hashes128طول امضای MinHash
bands16باندهای بیشتر بازخوانی بالاتری می‌دهند
threshold0.8آستانه‌ی جاکارد برای موارد تکراری
vocab_size50257‏MiniGPT با 768 بعد، 12 هد، 12 لایه
max_seq_len1024پنجره‌ی بافتار 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$ چیست؟
زیان کاهش‌ناپذیر؛ همان آنتروپی خود داده‌ها.
چرا بیش‌آموزش؟
هزینه‌ی آموزش یک‌بار پرداخت می‌شود، اما هزینه‌ی استنتاج همیشگی است.
چرا هر سند را پدینگ نکنیم؟
پدینگ توان پردازشی را هدر می‌دهد؛ اسناد را بسته‌بندی و ماسک‌گذاری کنید.
چرا رمزگشایی کُند است؟
چون متکی به پهنای باند حافظه است؛ در حالی که پیش‌پرکنی متکی به توان پردازشی است.