چیت‌شیت

پایپ‌لاین سرتاسری LLM و فاین‌تیونینگ

End-to-End LLM and Fine-Tuning Pipeline

برنامه‌ریزی، اجرا و اعمال گیت بر DAG هش‌شده‌ی مراحل. تعویض سر، ماسک تابع زیان (loss) در SFT و تابع زیان (loss) در DPO برگرفته از پروژه‌های پایانی، با مقادیر پیش‌فرض.

  • ۱۲ بخش
  • ۵ درس مرتبط
  • کد و دستورها عیناً از دوره‌ی اصلی
فهرست مطالب
  1. دستورها
  2. DAG دوازده مرحله‌ای
  3. وظایف هماهنگ‌کننده
  4. مانیفست و گیت‌ها
  5. پیش‌فرض گیت‌ها در main.py
  6. مقایسه سه پروژه پایانی در کنار هم
  7. فراخوانی‌های کلیدی در پروژه‌های پایانی
  8. تابع زیان (loss) در DPO
  9. سطرهای لاگ پروژه پایانی 07
  10. عیب‌یابی
  11. بازگشت به عقب و نکات
  12. پرسش و پاسخ

دستورها

دستورها
دستورعملکرد
python code/main.py planاعتبارسنجی مانیفست، نمایش DAG و گیت‌های کنترلی
python code/main.py runاجرای مراحل، نمایش JSON مانیفست
python code/main.py gateاعمال گیت‌های ارزیابی. چاپ SHIP یا HOLD
python code/main.pyدمو: برنامه‌ریزی، اجرا، یک گیت پذیرفته و یک گیت ناموفق
./pipeline.sh config/llama3.3-8b-domainX.yamlپروژه پایانی 07: از داده تا کارت مدل
run_demo()پروژه‌های پایانی 38 تا 40. با کد صفر در صورت موفقیت خارج می‌شود

DAG دوازده مرحله‌ای

معماری
01-02 توکنایزرواژگان، merges03 دیتاستشاردشده04-05 چک‌پوینتپیش‌آموزش، مقیاس‌دهی06 مدل SFTچک‌پوینت + دستورالعمل07 پاداش + PPOپالیسی08 DPOپالیسی09 CAI / GRPOپالیسی بازبینی‌شده10 گزارش ارزیابیامتیازها، تفاوت‌های بازنگری11 کوانتیزه‌شدهوزن‌ها + دلتا12 مشخصات سروراندپوینتگیت عرضهSHIP یا HOLD

وظایف هماهنگ‌کننده

گام‌به‌گام
  1. هماهنگ‌کنندهگراف DAG را بر اساس مانیفست حل می‌کند.
  2. هماهنگ‌کنندهاگر خروجی یک مرحله با هش درست موجود باشد، آن را رد می‌کند.
  3. مرحلهاجرا می‌شود. هماهنگ‌کننده زمان واقعی و هزینه را اندازه می‌گیرد.
  4. هماهنگ‌کنندههش خروجی را با هش ورودی مرحله بعدی مطابقت می‌دهد.
  5. CostTrackerدر صورت عبور هزینه از بودجه با halted_over_budget متوقف می‌شود.
  6. در صورت شکستیک مانیفست ناقص می‌نویسد و با کد غیرصفر خارج می‌شود.

مانیفست و گیت‌ها

کد
yaml
pipeline_version: 1.2.3
seed: 42
git_commit: a1b2c3d4
stages:
  01_tokenizer:
    input_hash: sha256:...      # هش خروجی مرحله قبل
    output_hash: sha256:...     # هش ورودی مرحله بعد
gates:
  mmlu:      >= baseline + 0.5  # عدم افت کیفیت
  humaneval: >= baseline + 1.0
  safety_refusal_rate: <= 0.05
  kl_from_reference: <= 25.0    # گیت بودجه KL
  cost_total_usd: <= 50000

پیش‌فرض گیت‌ها در main.py

پیش‌فرض‌ها
تنظیمپیش‌فرضیادداشت
mmlu65.0عملگر >=
humaneval40.0عملگر >=
truthfulqa50.0عملگر >=
safety_refusal_rate0.05عملگر <=
kl_from_reference25.0عملگر <=
cost_total_usd50000.0عملگر <=
budget_usd50000.0اجرا بالاتر از آن متوقف می‌شود
seed42در Manifest

مقایسه سه پروژه پایانی در کنار هم

مقایسه
عامل38 تعویض هد دسته‌بند39 فاین‌تیونینگ دستوری (SFT)40 DPO
ساخت‌هابدنه + میانگین‌گیری (mean pool) + هد 2 کلاسهTinyGPT آموزش‌دیده روی توکن‌های پاسخپالیسی در برابر مدل مرجع فریز شده
داده800 پیامک، 640 آموزش، 160 آزمون200 جفت، 160 آموزش، 40 آزمون12 سه‌گانه (پرامپت، منتخب، ردشده)
مدلوضعیت پنهان 64، 4 هد، 2 بلوک، حداکثر 32وضعیت پنهان 96، 2 بلوکوضعیت پنهان 64، 2 بلوک
آموزش20 دوره فقط هد، 20 دوره کامل20 دوره، lr معادل 5e-430 دوره، بتا 0.2، lr معادل 1e-3
معیاردقت، بازخوانی، F1، ماتریس درهم‌ریختگیتطابق دقیق در هر دستهحاشیه اختلاف منتخب منهای ردشده
بررسیگزارش وضعیت برای هر دو حالت فقط هد و کاملافزایش تطابق دقیق در طول دوره‌هاکاهش تابع زیان (loss)، افزایش حاشیه اختلاف

فراخوانی‌های کلیدی در پروژه‌های پایانی

کار و کد
وظیفهکد
فریز کردن بدنه برای آموزش اختصاصی هدfreeze_body(model)
پولینگ وضعیت پنهان همراه با ماسکmean_pool(h, mask)
پد کردن دسته و ماسک لیبل‌ها با -100sft_collate(batch)
تابع زیان (loss) علی روی توکن‌های پاسخshifted_loss(logits, labels)
امتیازدهی به خروجی تحت یک مدلsequence_log_prob(...)
تابع زیان (loss) در DPO و حاشیه پاداش ضمنیdpo_loss(lp_w_pol, lp_l_pol, lp_w_ref, lp_l_ref, beta=cfg.beta)
مقداردهی اولیه پالیسی از روی مدل مرجعpolicy.load_state_dict(reference.state_dict())

تابع زیان (loss) در DPO

کد
python
diff_w = logp_w_pol - logp_w_ref  # نسبت لاگ منتخب
diff_l = logp_l_pol - logp_l_ref  # نسبت لاگ ردشده
margin = diff_w - diff_l          # تفاضل پاداش ضمنی
z = beta * margin
loss = -F.logsigmoid(z)           # پایدار از نظر عددی
for p in reference.parameters():
    p.requires_grad = False       # مدل مرجع هرگز آموزش نمی‌بیند
reference.eval()

سطرهای لاگ پروژه پایانی 07

دستورها
دستورعملکرد
280k accepted (seed=7)تعداد ردیف‌های نگه‌داشته‌شده در مرحله داده
val loss 1.42 -> 1.03SFT، 3 دوره روی 8xH100
1 epoch, beta=0.08, 4xH100اجرای DPO
GPTQ-INT4 4.6 GB, AWQ-INT4 4.8 GBاندازه‌های کوانتیزه‌سازی
EAGLE-3 acceptance 0.74بررسی دیکودینگ حدسی
p99 126ms @ bs=8تاخیر دنباله در دسته 8
MMLU-Pro +3.2, MT-Bench-v2 +0.41بهبود ارزیابی نسبت به پایه

عیب‌یابی

عیب‌یابی
  • HOLD: missing metric <metric>

    علت
    گزارش ارزیابی فاقد مقدار است
    راه‌حل
    افزودن معیار به مرحله ارزیابی
  • input hash missing for stage

    علت
    دست‌سازه بالادستی در مخزن یافت نشد
    راه‌حل
    اجرای مجدد مرحله بالادستی
  • halted_over_budget

    علت
    هزینه کل بالاتر از budget_usd
    راه‌حل
    اصلاح برآورد هزینه در زمان برنامه‌ریزی
  • ارسال مدل DPO به مسیر SFT

    علت
    دست‌سازه‌های بدون تایپ مشخص
    راه‌حل
    دست‌سازه‌های تایپ‌دار و امضای مشخص مراحل
  • مدل پیش‌بینی دستور را یاد می‌گیرد

    علت
    عدم وجود ماسک تابع زیان (loss)
    راه‌حل
    مقدار -100 روی دستور، پد و مرز
  • فاین‌تیونینگ کامل روی 800 نمونه بیش‌برازش می‌شود

    علت
    داده‌های کم اثر وزن‌های بدنه را از بین می‌برند
    راه‌حل
    آموزش را فقط روی هد انجام دهید
  • جهش ناگهانی دقت MMLU-Pro

    علت
    نرخ آلودگی در داده‌های آموزشی
    راه‌حل
    بررسی MinHash، رد هرگونه همپوشانی
  • DPO خروجی‌های کوتاه را ترجیح می‌دهد

    علت
    سوگیری طول متن
    راه‌حل
    تقسیم log-prob بر طول متن پاسخ

بازگشت به عقب و نکات

نکته‌ها
  • همیشه اول plan را اجرا کنید؛ هزینه‌ای ندارد. دستور run گران است.
  • مراحل کم‌هزینه برای اجرای مجدد: توکنایزر، ارزیابی، کوانتیزه‌سازی، سرور استنتاج.
  • متوسط: SFT، DPO، CAI. مدل پایه را حفظ کنید.
  • گران: پیش‌آموزش. از آخرین چک‌پوینت سالم استفاده کنید.
  • شکست در مرحله 06 مراحل 06 تا 12 را نامعتبر می‌کند؛ در مرحله 11، فقط 11 و 12.
  • دست‌سازه‌ها را با هش آدرس‌دهی کنید. نام فایلی مانند latest.pt بسیار خطاست.
  • میزان FLOPs در پیش‌آموزش: 6 × پارامترها × توکن‌ها.

پرسش و پاسخ

پرسش و پاسخ
کدام دو گیت جلوی بیشتر فجایع را می‌گیرند؟
یک گیت افت کیفیت و یک گیت بودجه KL.
بازتولیدپذیر یا قطعی؟
بازتولیدپذیر. اعداد اعشاری در مرتبه 1e-5 تفاوت دارند.
چرا log Z(x) از رابطه DPO حذف می‌شود؟
چون مقدار آن برای نمونه‌های منتخب و ردشده یکسان است.
چرا روش حریصانه (greedy) برای تطابق دقیق؟
ضریب دما معیار را تصادفی می‌کند.