چیتشیت
پایپلاین سرتاسری LLM و فاینتیونینگ
End-to-End LLM and Fine-Tuning Pipeline
برنامهریزی، اجرا و اعمال گیت بر DAG هششدهی مراحل. تعویض سر، ماسک تابع زیان (loss) در SFT و تابع زیان (loss) در DPO برگرفته از پروژههای پایانی، با مقادیر پیشفرض.
فهرست مطالب
دستورها
دستورها| دستور | عملکرد |
|---|---|
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 دوازده مرحلهای
معماریوظایف هماهنگکننده
گامبهگام- هماهنگکنندهگراف DAG را بر اساس مانیفست حل میکند.
- هماهنگکنندهاگر خروجی یک مرحله با هش درست موجود باشد، آن را رد میکند.
- مرحلهاجرا میشود. هماهنگکننده زمان واقعی و هزینه را اندازه میگیرد.
- هماهنگکنندههش خروجی را با هش ورودی مرحله بعدی مطابقت میدهد.
- CostTrackerدر صورت عبور هزینه از بودجه با
halted_over_budgetمتوقف میشود. - در صورت شکستیک مانیفست ناقص مینویسد و با کد غیرصفر خارج میشود.
مانیفست و گیتها
کد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
پیشفرضها| تنظیم | پیشفرض | یادداشت |
|---|---|---|
mmlu | 65.0 | عملگر >= |
humaneval | 40.0 | عملگر >= |
truthfulqa | 50.0 | عملگر >= |
safety_refusal_rate | 0.05 | عملگر <= |
kl_from_reference | 25.0 | عملگر <= |
cost_total_usd | 50000.0 | عملگر <= |
budget_usd | 50000.0 | اجرا بالاتر از آن متوقف میشود |
seed | 42 | در 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-4 | 30 دوره، بتا 0.2، lr معادل 1e-3 |
| معیار | دقت، بازخوانی، F1، ماتریس درهمریختگی | تطابق دقیق در هر دسته | حاشیه اختلاف منتخب منهای ردشده |
| بررسی | گزارش وضعیت برای هر دو حالت فقط هد و کامل | افزایش تطابق دقیق در طول دورهها | کاهش تابع زیان (loss)، افزایش حاشیه اختلاف |
فراخوانیهای کلیدی در پروژههای پایانی
کار و کد| وظیفه | کد |
|---|---|
| فریز کردن بدنه برای آموزش اختصاصی هد | freeze_body(model) |
| پولینگ وضعیت پنهان همراه با ماسک | mean_pool(h, mask) |
| پد کردن دسته و ماسک لیبلها با -100 | sft_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.03 | SFT، 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) برای تطابق دقیق؟
- ضریب دما معیار را تصادفی میکند.