فاز 10 · درس 13

ساخت پایپ‌لاین کامل LLM: از داده تا سرویس‌دهی نهایی

نوع
ساختنی
زمان
حدود 120 دقیقه
زبان‌ها
Python (stdlib)
پیش‌نیاز
آشنایی با الگوریتم‌های توکنایزر: BPE، WordPiece و SentencePiece، ساخت توکن‌ساز از صفر: پیاده‌سازی گام‌به‌گام BPE در پایتون، پایپ‌لاین داده برای پیش‌آموزش مدل‌های زبانی بزرگ، آموزش پیش‌آموزش یک مینی جی‌پی‌تی (124M پارامتر)، آموزش توزیع‌شده مدل‌های زبانی: FSDP، DeepSpeed و موازی‌سازی سه‌بعدی، آموزش گام‌به‌گام فاین‌تیونینگ نظارت‌شده (SFT) و ساخت مدل دستورپذیر، آموزش گام‌به‌گام RLHF با ساخت مدل پاداش و PPO، آموزش DPO: بهینه‌سازی مستقیم ترجیحات بدون نیاز به مدل پاداش، هوش مصنوعی قانون‌محور (CAI) و الگوریتم GRPO: خودبهبودبخشی در مدل‌های زبانی، ارزیابی مدل‌های زبانی: از بنچمارک تا بستر تست اختصاصی، کوانتیزه‌سازی مدل‌های زبانی: کاهش حجم و اجرای مدل روی سخت‌افزار محدود، بهینه‌سازی استنتاج مدل‌های زبانی: از کش KV تا PagedAttention
نمای یک خط لوله‌ی صنعتی پیشرفته با ایستگاه‌های پیوسته و دریچه‌های کنترل متصل به یکدیگر
فهرست مطالب
  1. اهداف یادگیری
  2. صورت مسئله
  3. مفاهیم پایه
  4. دوازده مرحله
  5. مانیفست
  6. نوع‌بندی آرتیفکت‌ها
  7. گیت ارزیابی
  8. هماهنگ‌کننده
  9. ردگیری آزمایش‌ها و ذخیره‌سازی آرتیفکت‌ها
  10. برآورد هزینه‌ها
  11. بازتولیدپذیری در مقابل قطعیت
  12. طرح بازگشت به عقب
  13. رویکردهای پروداکشن مشاهده‌شده در سال 2026
  14. پیاده‌سازی
  15. استفاده از آن
  16. تحویل نهایی
  17. تمرین‌ها
  18. اصطلاحات کلیدی
  19. برای مطالعه‌ی بیشتر

توسعه‌ی یک مدل زبانی بزرگ تنها به اجرای چند نوت‌بوک مجزا برای آموزش توکنایزر، پیش‌آموزش یا تیونینگ محدود نمی‌شود. در عمل، اتصال این اجزا بدون خطای انسانی، خرابی داده‌ها و هدررفت بودجه، نیازمند معماری یکپارچه‌ای است که تمام مراحل را از داده تا سرو مدل به شکلی پایدار هدایت کند.

در این درس پایانی، اسکلت مهندسی و ارکستراسیون یک پایپ‌لاین سرتاسری LLM را بر پایه‌ی مانیفست‌های بازتولیدپذیر، ردگیری دقیق آرتیفکت‌ها بر اساس هش محتوا و گیت‌های سنجش کیفیت پیاده می‌کنید؛ چارچوبی که تیم‌های پیشرو هوش مصنوعی برای جلوگیری از خطاهای پرهزینه به کار می‌برند.

هر آنچه از درس 01 تا 12 آموختید، تنها یک مرحله از یک پایپ‌لاین بود. این درس نقش داربستی را دارد که آن مراحل را به یک اجرای یکپارچه‌ی سرتاسری (end-to-end) تبدیل می‌کند: توکنایز، پیش‌آموزش، مقیاس‌پذیری، SFT، هم‌راستاسازی، ارزیابی، کوانتایز و سرو. شما قرار نیست یک مدل 70B را روی لپ‌تاپ آموزش دهید؛ بلکه لایه‌ی هماهنگ‌کننده (orchestration layer)، مانیفست (manifest)، گیت ارزیابی (eval gate) و طرح بازگشت به عقب (rollback plan) را می‌سازید؛ یعنی همان ابزارهایی که یک تیم پیشرو در سال 2026 برای تصمیم‌گیری درباره‌ی انتشار مدل به کار می‌برد. این پروژه‌ی پایانی (capstone) است.

اهداف یادگیری

  • ترکیب دوازده درس پیشین (دو درس توکنایزر، داده، پیش‌آموزش، مقیاس‌پذیری، SFT، RLHF، DPO، CAI، ارزیابی، کوانتایز و استنتاج) در قالب مشخصات یک پایپ‌لاین بازتولیدپذیر واحد
  • تعریف قرارداد آرتیفکت (artifact contract) بین مراحل: ورودی هر مرحله چیست، چه خروجی‌ای تولید می‌کند و مرحله‌ی بعد چگونه ورودی را اعتبارسنجی می‌کند
  • ساخت یک هماهنگ‌کننده (orchestrator) که آزمایش‌ها را ردگیری، آرتیفکت‌ها را هش‌گذاری و تصمیم‌های انتشار را بر اساس آستانه‌های ارزیابی کنترل می‌کند
  • طراحی طرح بازگشت به عقب: اجرای مجدد کدام آرتیفکت‌ها ارزان و کدام‌یک گران است، و یک چک‌پوینت خراب چقدر هزینه روی دست تیم می‌گذارد

صورت مسئله

کدهای درس‌های قبلی به‌تنهایی کار می‌کنند. توکنایزر آموزش دیده؛ مدل Tiny GPT پیش‌آموزش دیده؛ مجموعه‌داده‌ی SFT سرهم شده؛ مدل پاداش آموزش دیده؛ DPO اجرا شده؛ ارزیابی‌ها اندازه‌گیری شده‌اند؛ وزن‌های کوانتایزشده خروجی گرفته شده‌اند و سرور استنتاج بالا آمده است. اما هر کدام در قالب یک نوت‌بوک مجزا بودند. هر یک قراردادهای نام‌گذاری، مسیرهای خروجی و seed تصادفی خاص خود را داشتند.

یک فرایند آموزش مدل‌های پیشرو (frontier training run) شبیه یک نوت‌بوک نیست. آموزش Llama 3 405B حدود 30 میلیون ساعت H100 در طول تقریباً 54 روز زمان برد. مدل DeepSeek-V3 حدود 2.8 میلیون ساعت H800 مصرف کرد. در این بازه، یک چک‌پوینت خراب، یک بار نشت داده (data contamination) یا یک افت عملکرد در ارزیابی می‌تواند یک هفته زمان تقویمی و یک ماه بودجه‌ی پردازنده‌ی گرافیکی یک تیم را بر باد دهد. راه‌حل تیم‌ها برای نجات از این فجایع، رعایت بهداشت پایپ‌لاین (pipeline hygiene) است: هر مرحله ورودی قطعی، خروجی قطعی، یک مانیفست، یک هش و یک گیت نظارتی دارد.

این درس پروژه‌ی پایانی است. قرار نیست کل این پایپ‌لاین را روی لپ‌تاپ اجرا کنید؛ بلکه هماهنگ‌کننده‌ای می‌نویسید که مراحل را مدیریت کند، مانیفستی که جزئیات اجرا را ثبت کند، مدل اعتبارسنجی که شرط‌های انتشار را بسنجد، و طرح بازپخشی (replay plan) که به فردی ثالث اجازه دهد کار شما را از روی یک فایل منفرد دوباره اجرا کند. حجم کد کم است، اما انضباط مهندسی بالایی می‌طلبد.

این الگو بدون هیچ تغییری از 100M تا 1T پارامتر مقیاس‌پذیر است. همان چهار مؤلفه یعنی مانیفست، هماهنگ‌کننده، گیت ارزیابی و مخزن آرتیفکت (artifact store)، هم Llama 3 را اجرا می‌کنند و هم مدل آزمایشی کوچک شما را. تفاوت فقط در بزرگی اعداد داخل پیکربندی هر مرحله است، نه در ساختار کلی پایپ‌لاین.

مفاهیم پایه

دوازده مرحله

هر درس از فاز 10 یک مرحله است. گراف کامل وابستگی‌ها به این صورت است:

01 واژگان توکنایزر02 توکنایزر آموزش‌دیده03 مجموعه‌داده شاردشده04 چک‌پوینت مدل پایه05 دستورالعمل آموزش مقیاس‌پذیر06 چک‌پوینت SFT07 مدل پاداش + خط‌مشی PPO08 خط‌مشی DPO09 خط‌مشی پالایش‌شده CAI / GRPO10 گزارش ارزیابی11 وزن‌های کوانتیزه‌شده12 سرور استنتاجدروازه انتشار

مراحل 07 و 08 می‌توانند موازی اجرا شوند؛ اما بقیه‌ی مراحل وابستگی قطعی دارند. تغییر در مرحله‌ی 02 (توکنایزر)، تمام آرتیفکت‌های پایینی را باطل می‌کند؛ اما تغییر در مرحله‌ی 10 (ارزیابی)، فقط تصمیم انتشار را بی‌اعتبار می‌سازد.

مانیفست

مانیفست فایلی منفرد است که اجرای فرایند را به‌قدری کامل توصیف می‌کند که اجرای دوباره‌ی دقیق آن ممکن باشد. هیچ خروجی‌ای در پایپ‌لاین نباید به وضعیتی بیرون از مانیفست متکی باشد. فیلدهای آن ساده ولی کاملاً اجباری هستند.

pipeline_version: 1.2.3
seed: 42
git_commit: a1b2c3d4
stages:
  01_tokenizer:
    recipe: bpe_32k
    input_hash: sha256:...
    output_hash: sha256:...
    wall_clock_sec: 3600
    cost_usd: 12

هش خروجی مرحله‌ی N دقیقاً هش ورودی مرحله‌ی N+1 است. با کوچک‌ترین مغایرتی، پایپ‌لاین متوقف می‌شود. این سازوکار مانع از نادیده گرفتن خرابی داده‌ها در مراحل ابتدایی می‌شود و به هم‌تیمی شما در قاره‌ای دیگر امکان می‌دهد بررسی کند که بازپخش فرایندش، آرتیفکتی عیناً مشابه خروجی شما تولید کرده است یا خیر.

در عمل، تیم‌ها از یک شمای کوچک YAML به همراه یک ابزار بررسی مانیفست استفاده می‌کنند که تغییرات را نسبت به آخرین اجرای موفق مقایسه می‌کند. هر تغییری فراتر از فیلدهای مورد انتظار (مانند هزینه یا زمان تقویمی)، هشداری جدی به شمار می‌آید.

نوع‌بندی آرتیفکت‌ها

خروجی هر مرحله یک آرتیفکت دارای نوع (typed artifact) است؛ نه یک پوشه‌ی درهم‌برهم و نه یک فایل pickle، بلکه یک نوع مشخص با ساختار داده‌ای معین.

مرحله نوع آرتیفکت فیلدهای کلیدی
01-02 توکنایزر vocab.json، merges.txt، config.json، هش
03 مجموعه‌داده shards[]، تعداد سطر، تعداد توکن، آمار حذف داده‌های تکراری
04-05 چک‌پوینت weights.safetensors، config.json، وضعیت بهینه‌ساز، شمارنده‌ی گام
06 مدل SFT چک‌پوینت + دستورالعمل SFT + ترکیب داده‌ها
07 مدل پاداش چک‌پوینت RM + هش داده‌های ترجیحات
08-09 خط‌مشی (Policy) چک‌پوینت + هش مرجع + مقدار بتا + سقف بودجه‌ی KL مصرف‌شده
10 گزارش ارزیابی امتیازهای محک (benchmark) + تغییرات ناشی از افت عملکرد + هش داده‌های ارزیابی
11 مدل کوانتایزشده وزن‌های کوانتایزشده + داده‌های کالیبراسیون + اختلاف دقت نسبت به FP16
12 مشخصات سرور اندپوینت + هش مدل + پیکربندی + هوک‌های مشاهده‌پذیری

این نوع‌بندی مانع از شایع‌ترین حالت خرابی می‌شود: یعنی فرستادن خروجی مرحله‌ی 08 به عنوان ورودی مرحله‌ی 06، یا فرستادن اشتباهی یک مدل آموزش‌دیده با DPO به مسیر SFT برای انتشار. استفاده از آرتیفکت‌های نوع‌بندی‌شده و امضاهای مشخص برای هر مرحله باعث می‌شود این خطاها همان ابتدا و در لحظه‌ی بررسی پایپ‌لاین متوقف شوند، نه اینکه بعد از پنج روز آموزش مشخص شوند.

گیت ارزیابی

پایان کار به معنای «اتمام آموزش» نیست؛ تحویل نهایی زمانی است که «آموزش تمام شده باشد و گیت ارزیابی هم پاس شود». شرایط این گیت قبل از شروع اجرا تعیین می‌شود.

gates:
  mmlu:      >= baseline + 0.5   # no regression
  humaneval: >= baseline + 1.0
  truthfulqa: >= baseline         # no drop
  safety_refusal_rate: <= 0.05
  kl_from_reference: <= 25.0
  cost_total_usd: <= 50000

همه‌ی گیت‌ها آستانه‌های عددی دارند. هیچ معیاری بر اساس «به نظر خوب می‌رسد» یا تأیید سلیقه‌ای وجود ندارد. اگر همه‌ی گیت‌ها پاس شوند، آرتیفکت قابل انتشار شناخته می‌شود. اگر حتی یک گیت رد شود، فرایند متوقف می‌ماند تا زمانی که بازبین مشخصی مستقیماً آن را تأیید کند که این تأییدیه نیز در مانیفست ثبت می‌شود.

دو گیت اصلی جلوی اغلب فجایع را می‌گیرند: یک گیت افت عملکرد (regression) (مدل جدید روی محک‌های اصلی باید دست‌کم هم‌سطح مدل قبلی باشد) که باگ‌های حین آموزش را شکار می‌کند؛ و یک گیت بودجه‌ی KL (سیاست هم‌راستاشده نباید بیشتر از مقدار X از مدل مرجع خود دور شود) که مانع از اعمال بیش از حد هم‌راستاسازی می‌شود. هر پایپ‌لاین پروداکشن به هر دوی این گیت‌ها مجهز است.

هماهنگ‌کننده

قطعه کد کوچکی که مانیفست را می‌خواند، مراحل را اجرا می‌کند، آرتیفکت‌ها را زیر نظر می‌گیرد و با بروز اولین تناقض در قراردادها متوقف می‌شود. قرار نیست سراغ Airflow یا Kubeflow بروید؛ برای حفظ بهداشت پایپ‌لاین، بهتر است ابزاری ساده باشد که خودتان نوشته‌اید.

وظیفه‌ی هماهنگ‌کننده بسیار مشخص و محدود است:

  1. گراف جهت‌دار بدون دور (DAG) را از روی مانیفست استخراج کند.
  2. برای هر مرحله بررسی کند که آیا خروجی مورد انتظار از قبل با هش معتبر وجود دارد یا نه (در این صورت از آن عبور کند).
  3. مرحله را اجرا کند، لاگ‌های stdout و stderr را بگیرد و زمان واقعی و هزینه را اندازه بگیرد.
  4. هش خروجی را با هش ورودی مورد انتظار در مرحله‌ی بعدی مطابقت دهد.
  5. در صورت بروز خطا، یک مانیفست ناقص به همراه نام مرحله‌ی خطا ثبت کند و با کد خروجی غیرصفر خارج شود.

این منطق در 200 سطر پایتون جا می‌شود؛ شبیه فایل code/main.py در همین درس. در عمل، پایپ‌لاین‌های واقعی از torchrun یا ray برای اجرای مراحل روی کلاسترها کمک می‌گیرند، اما خود هماهنگ‌کننده روی یک سیستم منفرد اجرا می‌شود.

ردگیری آزمایش‌ها و ذخیره‌سازی آرتیفکت‌ها

دو سیستم خارجی پایه‌ی اصلی این پایپ‌لاین هستند:

ابزار ردگیری آزمایش‌ها (مانند wandb، neptune یا mlflow). این سیستم منحنی‌های تابع زیان (loss)، معیارهای ارزیابی و اطلاعات تله‌متری سیستم را در هر مرحله ثبت می‌کند. اینجا جایی است که اگر سه هفته بعد بخواهید اجرای A را با B مقایسه کنید، به آن رجوع خواهید کرد. تیم‌ها تقریباً همیشه از سرویس‌های مدیریت‌شده (hosted) برای این کار استفاده می‌کنند؛ چرا که ساخت ابزار اختصاصی، وقت باارزش آموزش را تلف می‌کند.

مخزن آرتیفکت (مانند S3، R2 یا GCS). فضای ذخیره‌سازی شیء (object store) تغییرناپذیر برای چک‌پوینت‌ها، مجموعه‌داده‌ها، توکنایزرها و گزارش‌های ارزیابی. دسترسی به این آرتیفکت‌ها بر اساس هش آن‌ها صورت می‌گیرد نه نام فایل. نام‌هایی مثل latest.pt به‌شدت مستعد خطا هستند؛ در حالی که نامی مثل ckpt-7b-step-20000-sha256:abc123.safetensors یک قرارداد روشن و بدون ابهام است.

هماهنگ‌کننده داده‌هایش را در هر دوی این سیستم‌ها می‌نویسد: ابزار ردگیری برای بررسی نمودارها توسط انسان‌هاست و مخزن آرتیفکت برای بازیابی ورودی‌های مراحل بعدی.

برآورد هزینه‌ها

فرایند آموزش یک مدل پیشرو برچسب قیمت دلاری مشخصی دارد. انضباط مالی در دو نقطه اعمال می‌شود:

تخمین پیش از اجرا. با استفاده از مانیفست، حجم محاسبات بر حسب FLOPs تخمین زده می‌شود (برای پیش‌آموزش: فرمول 6 × پارامترها × توکن‌ها)، سپس ساعت‌های کاری GPU محاسبه می‌شود (FLOPs تقسیم بر نرخ پردازش اوج تقسیم بر ضریب بهره‌وری) و در نهایت هزینه‌ی دلاری بر اساس نرخ اجاره‌ی لحظه‌ای محاسبه می‌شود. اگر این برآورد از گیت بودجه فراتر برود، پایپ‌لاین اصلاً شروع به کار نمی‌کند.

ردگیری در حین اجرا. در طول اجرا، زمان تقویمی و هزینه‌ی هر مرحله در مانیفست ثبت می‌شود. پس از پایان هر بخش، باقی‌مانده‌ی بودجه بررسی خواهد شد. اگر مرحله‌ای هزینه‌ی بیش از حد تراشیده باشد، گیت مرحله‌ی بعد با بودجه‌ی جدید ارزیابی می‌شود. نباید زمانی که سرمایه‌گذار زنگ می‌زند تازه متوجه اتمام بودجه شوید!

هزینه‌ی گزارش‌شده برای آموزش Llama 3 حدود 61 میلیون دلار و برای اجرای اصلی پیش‌آموزش DeepSeek-V3 تقریباً 5.6 میلیون دلار بود. این تفاوت عمدتاً ناشی از بهره‌وری سخت‌افزاری و معماری مخلوط کارشناسان (MoE) است؛ با این حال، ارقام مشخص هزینه‌ها به این دلیل شفاف است که هر دو تیم آن را به تفکیک مراحل ردگیری کرده‌اند، نه کلی به ازای کل اجرا.

بازتولیدپذیری در مقابل قطعیت

این دو مفهوم یکسان نیستند. بازتولیدپذیر (Reproducible) یعنی استفاده از همان مانیفست، همان کد و همان زیرساخت، چک‌پوینتی تولید کند که معیارهای ارزیابی نهایی معادلی داشته باشد. اما قطعی (Deterministic) یعنی داده‌های خروجی روی بیت‌به‌بیت فایل‌ها کاملاً یکسان باشند.

آموزش مدل‌های زبانی امروزی بازتولیدپذیر است، اما قطعی نیست. ترتیب reduce در آموزش توزیع‌شده، رفتار غیرقطعی کرنل‌های GPU (مثل cuBLAS یا flash-attn) و خطاهای گرد کردن در دقت ترکیبی دست‌به‌دست هم می‌دهند تا مقادیر ممیز شناور بین دو اجرای مختلف در سطح 1e-5 تفاوت پیدا کنند. این مسئله برای معیارهای نهایی که تغییری نمی‌کنند کاملاً بی‌خطر است؛ اما اگر بخواهید با مقایسه‌ی بیتی دیباگ کنید، کار را خراب می‌کند. چاره‌ی کار این است که هش ورودی و خروجی هر مرحله به همراه مهم‌ترین معیارهای ارزیابی ثبت شوند؛ در صورتی که این داده‌ها تطابق داشته باشند، فرایند «بازتولیدشده» به شمار می‌رود، حتی اگر وزن‌ها بیت‌به‌بیت یکسان نباشند.

قبولردمانیفست v1.2.3هماهنگ‌کنندهمراحل 01 ← 12مخزن آرتیفکت(آدرس‌دهی مبتنی بر محتوا)ردیاب آزمایش(متریک‌ها، نمودارها)دروازه ارزیابیانتشاربرنامه بازگشت

طرح بازگشت به عقب

قبل از شروع اجرا، برای خرابی هر مرحله پلن بازگشت تدوین کنید. مراحل به سه دسته تقسیم می‌شوند:

  • ارزان برای اجرای دوباره (در حد چند ساعت): توکنایزر، ارزیابی، کوانتایز و سرور استنتاج؛ فقط کافی است دوباره اجرا شوند.
  • متوسط (در حد چند روز): SFT، DPO و CAI. مدل پایه را دست‌نخورده نگه دارید و فقط مراحل هم‌راستاسازی را از نو اجرا کنید.
  • گران‌قیمت (چندین هفته و میلیون‌ها دلار هزینه): پیش‌آموزش. راه‌حل اینجا «اجرای مجدد» نیست؛ بلکه «استفاده از آخرین چک‌پوینت سالم و اجرای دوباره‌ی مراحل ارزان‌تر پایینی با داده‌های اصلاح‌شده» است.

به دلیل ساختار نوع‌بندی‌شده و هش‌دار مراحل، هماهنگ‌کننده می‌تواند دامنه‌ی باطل‌شدن را خودکار محاسبه کند: یعنی مرحله‌ی شکست‌خورده به اضافه‌ی تمام مراحل پس از آن باطل می‌شوند. خرابی در مرحله‌ی 06 (SFT)، مراحل 06، 07، 08، 09، 10، 11 و 12 را از اعتبار می‌اندازد؛ اما خرابی در مرحله‌ی 11 (کوانتایز)، صرفاً مراحل 11 و 12 را لغو می‌کند. مشخص کردن این موارد از قبل، مانع از تصمیم‌گیری‌های فی‌البداهه در ساعت 4 صبح و اوج خستگی تیم می‌شود.

رویکردهای پروداکشن مشاهده‌شده در سال 2026

بیشتر تیم‌های پیشرو به اسکلت اجرایی یکسانی رسیده‌اند:

  • توکنایزر: BPE با 128 هزار توکن به همراه سازوکار بایت رزرو (byte fallback). آموزش‌دیده روی برشی کوچک، متعادل و چندزبانه.
  • پیش‌آموزش: بین 10 تا 20 تریلیون توکن، عمدتاً وب به همراه کد و داده‌های سنتتیک. بهینه‌سازهای Muon یا AdamW. راهبردهای FSDP2 یا DeepSpeed ZeRO-3. چک‌پوینت‌گذاری گرادیان. وزن‌های BF16 با نسخه‌ی اصلی FP32.
  • هم‌راستاسازی با نظارت (SFT): بین 500 هزار تا 2 میلیون جفت دستورالعمل، ترکیبی از نمونه‌های انسانی و سنتتیک با حذف دقیق داده‌های تکراری نسبت به مجموعه‌ی ارزیابی.
  • هم‌راستاسازی: DPO یا ترکیب CAI با GRPO؛ و محدود کردن RLHF تنها به نقاطی که سیگنال ترجیحات چندبُعدی‌تر از آن است که با DPO حل شود.
  • ارزیابی: آزمون‌های MMLU-Pro، MATH، HumanEval+، GPQA، SWE-Bench Verified، LiveBench، به علاوه‌ی یک مجموعه‌ی تست اختصاصی نگه‌داشته‌شده (held-out) که عموم هرگز آن را نمی‌بینند.
  • کوانتایز: تکنیک‌های 4 بیتی مثل GPTQ یا AWQ برای سرو، و 8 بیتی برای ارزیابی‌های ایمنی که افت دقت برایشان بسیار حساس است.
  • سرو مدل: vLLM، TensorRT-LLM یا ابزارهای بهینه‌شده‌ی داخلی. دسته‌بندی پیوسته. دیکودینگ حدسی. حذف هوشمندانه‌ی محتوای کش کلید-مقدار.

شاید اعداد هر شش ماه جابه‌جا شوند، اما اسکلت پایپ‌لاین تغییری نمی‌کند.

جستجوی پرتوعرض پرتو را بکشید
BEAM SEARCHEach step expands every surviving beam into B candidate continuations, scores them by cumulative log-probability, and keeps only the best B. Greedy decoding is the special case B equals 1: one path, no backtracking. Wider beams explore more but cost proportionally more compute.
در هر گام، هر پرتوِ باقی‌مانده به B ادامه‌ی کاندید بسط داده می‌شود، بر اساس لگاریتم احتمال تجمعی امتیازدهی می‌گردد و فقط B مورد برتر حفظ می‌شوند. رمزگشایی حریصانه حالت خاص B برابر با 1 است: یک مسیر، بدون بازگشت به عقب. پرتوهای عریض‌تر مسیرهای بیشتری را بررسی می‌کنند اما به همان نسبت به محاسبات بیشتری نیاز دارند.

پیاده‌سازی

کد این درس یک هماهنگ‌کننده و یک ارزیاب مانیفست است، نه دوازده اسکریپت آموزش مدل. هر مرحله با یک تابع جایگزین شبیه‌سازی شده است که آرتیفکت خروجی را با شکل و هش صحیح تولید می‌کند. اجرای هماهنگ‌کننده به صورت سرتاسری نشان می‌دهد که زیرساخت پایپ‌لاین پیش از سوزاندن هزینه‌ی GPU روی مراحل واقعی، به‌درستی کار می‌کند.

برای بررسی پیاده‌سازی کامل به code/main.py مراجعه کنید. بخش‌های کلیدی آن عبارتند از:

  • کلاس دادگانی Manifest: نسخه‌ی پایپ‌لاین، seed، کامیت git، مراحل و گیت‌ها.
  • کلاس دادگانی Stage: نام، نوع، ورودی‌ها (هش‌ها)، خروجی (هش)، زمان اجرا و هزینه.
  • متد Orchestrator.run(): استخراج گراف وابستگی‌ها، مدیریت اجرای مراحل، اعتبارسنجی هش‌ها و به‌روزرسانی مانیفست.
  • متد EvalGate.check(): خواندن مقادیر آستانه، مقایسه با آخرین گزارش ارزیابی و اعلام قبولی یا رد.
  • کلاس ArtifactStore (نسخه‌ی ساختگی درون‌حافظه‌ای): ذخیره و بازیابی بر اساس هش با شبیه‌سازی عملکرد S3.
  • کلاس CostTracker: ثبت هزینه‌های تفکیکی هر مرحله و تجمیعی، و توقف در صورت عبور از سقف تعیین‌شده.

پایپ‌لاین ارائه‌شده در main.py دوازده مرحله‌ی نمادین را اجرا می‌کند، مانیفست مربوطه را می‌سازد و نحوه‌ی رد شدن در گیت ارزیابی را نمایش می‌دهد تا مشخص شود یک اجرای متوقف‌شده چه وضعیتی دارد. با جایگزینی هر تابع نمادین با اسکریپت واقعی درس مربوطه، اسکلتی را در اختیار خواهید داشت که یک پایپ‌لاین واقعی پیشرو از آن استفاده می‌کند.

استفاده از آن

این گردش کار استاندارد سه دستور اصلی دارد:

python code/main.py plan    # validate manifest, compute cost estimate, print DAG
python code/main.py run     # execute stages, writing to manifest.out.yaml
python code/main.py gate    # read manifest.out.yaml, apply eval gates, ship-or-hold

همیشه کار را با اجرای دستور plan آغاز کنید. بخش زیادی از باگ‌های پایپ‌لاین در این مرحله مشخص می‌شوند؛ مواردی مانند آستانه‌های تعریف‌نشده برای گیت‌ها، هش‌های نامعتبر و برآوردهای بیش از حد بودجه. اجرای plan هزینه‌ای ندارد؛ اما اجرای run بسیار گران است. با شناسایی زودهنگام باگ‌ها، هزینه‌ها را کاهش دهید.

خروجی دستور gate یا به صورت SHIP خواهد بود یا HOLD: <reason>. تعلیق اجرا نشانه شکست نیست؛ بلکه نقطه‌ی تصمیم‌گیری است. یک بازبین مشخص یا مستقیماً دستور نادیده‌گرفتن خطا را با ثبت در سیستم صادر می‌کند، یا طرح بازگشت به عقب را تأیید می‌کند.

تحویل نهایی

این درس فایل outputs/skill-llm-pipeline-reviewer.md را تولید می‌کند. کافی است مانیفست پیشنهادی پایپ‌لاین را به این ابزار بدهید تا تمام قراردادها از جمله نوع‌بندی مراحل، زنجیره‌ی هش‌ها، گیت‌ها، طرح بازگشت به عقب و تخمین هزینه‌ها را بررسی کند. این ابزار از تأیید مانیفست‌هایی که فاقد گیت ارزیابی هستند، بودجه‌ی KL نامحدود دارند، یا داده‌های ارزیابی را با داده‌های آموزش مخلوط کرده‌اند، خودداری می‌کند.

تمرین‌ها

  1. هماهنگ‌کننده را طوری توسعه دهید که مراحل 07 و 08 به صورت موازی اجرا شوند. برای این کار از ماژول استاندارد concurrent.futures استفاده کنید. مطمئن شوید خروجی هر دو مرحله در مانیفست نهایی ثبت شود و هش ورودی مرحله‌ی 09 از ترکیب قطعی هر دوی آن‌ها به دست بیاید.

  2. یک گیت «بررسی نسبت آلودگی» (contamination check) اضافه کنید. با داشتن هش مجموعه‌داده‌ی ارزیابی و شارد‌های مجموعه‌داده‌ی آموزش، میزان هم‌پوشانی را (از طریق تطابق دقیق رشته‌ای یا تطابق 13-gram) اندازه بگیرید. اگر این هم‌پوشانی از 0.1% بیشتر بود، گیت باید رد شود. یک مجموعه‌داده‌ی آموزشی آلوده به آن بدهید و تأیید کنید که گیت جلوی ادامه‌ی اجرا را می‌گیرد.

  3. ابزار تخمین هزینه را بر اساس اصول بنیادین پیاده‌سازی کنید. برای مرحله‌ی 04 (پیش‌آموزش)، میزان FLOPs را با رابطه‌ی 6 × پارامترها × توکن‌ها بسنجید. فرض را بر بهره‌وری 40% نسبت به توان پردازشی تئوری (MFU) روی H100 با نرخ 989 TFLOPs برای محاسبات BF16 و هزینه‌ی ساعتی 2.50 دلار برای هر GPU بگذارید. این هزینه را برای آموزش یک مدل 7B با 2T توکن محاسبه و با ارقام منتشرشده برای مدل Llama 2 مقایسه کنید.

  4. یک سناریوی بازگشت به عقب ناقص بسازید. یک خرابی را در مرحله‌ی 09 (CAI) شبیه‌سازی کنید، سپس بدون دست زدن به مراحل کش‌شده‌ی 01 تا 08، مراحل 09 تا 12 را از نو اجرا کنید. هماهنگ‌کننده باید آرتیفکت‌های کش‌شده را بر اساس هش آن‌ها تشخیص دهد و از پردازش مجددشان عبور کند. زمان صرفه‌جویی‌شده نسبت به اجرای کامل از ابتدا را اندازه بگیرید.

  5. امکانات مشاهده‌پذیری (observability) را اضافه کنید. برای هر مرحله اسپَن‌های OpenTelemetry ایجاد کنید و خصوصیاتی مثل پارامترها، توکن‌های دیده‌شده، تابع زیان (loss) و هزینه را در آن بگنجانید. این اسپَن‌ها را به یک جمع‌آوری‌کننده‌ی (collector) محلی بفرستید. هدف صرفاً ساخت داشبورد نیست؛ بلکه باید وضعیت سلامت هر مرحله با یک شناسه‌ی ردگیری (Trace ID) واحد، قابل رهگیری باشد.

اصطلاحات کلیدی

اصطلاح در گفت‌وگوها معنای دقیق مهندسی
مانیفست (Manifest) «فایل دستورالعمل» فایل YAML یا JSON شامل نسخه‌ی پایپ‌لاین، seed، تنظیمات هر مرحله و آستانه‌ی گیت‌ها؛ به‌اندازه‌ای کامل که بتوان اجرا را بازپخش کرد
آدرس‌دهی با محتوا (Content-addressed) «بر اساس هش نه اسم» ذخیره‌سازی آرتیفکت‌ها بر پایه‌ی شناسه SHA-256 محتوای آن‌ها، تا نسخه‌ی A هرگز با B اشتباه نشود
گیت ارزیابی (Eval gate) «معیار انتشار» آستانه‌های عددی روی معیارهای محک و امتیازهای ایمنی که پیش از تأیید یک آرتیفکت برای انتشار، حتماً باید پاس شوند
بودجه‌ی KL (KL budget) «میزان تغییرات مدل در هم‌راستاسازی» تعیین سقفی مشخص برای KL(policy∥reference)\mathrm{KL}(\text{policy} \Vert \text{reference}) تجمیعی در طول مراحل هم‌راستاسازی که در قالب یک گیت اعمال می‌شود
بهره‌وری محاسباتی مدل (MFU) «میزان استفاده از توان سخت‌افزار» Model FLOPs Utilization؛ نسبت توان پردازشی به‌دست‌آمده به حداکثر توان تئوری. 40% برای مقیاس 70B و 55% برای 7B مقادیر متداولی هستند
طرح بازگشت به عقب (Rollback plan) «برنامه‌ی پیش‌بینی‌شده برای خرابی» مجموعه‌ای از اقدامات تدوین‌شده به ازای هر مرحله در زمان بروز خطا: اجرای مجدد، بازگشت به عقب یا آموزش مجدد با ورودی‌های اصلاح‌شده
هماهنگ‌کننده (Orchestrator) «رهبر ارکستر» فرایندی که مانیفست را می‌خواند، مراحل را اجرا می‌کند، هش‌ها را می‌سنجد و با مشاهده‌ی هرگونه تخطی از قراردادها متوقف می‌شود
مخزن آرتیفکت (Artifact store) «نسخه‌ی S3 برای وزن‌ها» فضای ذخیره‌سازی شیء تغییرناپذیر با آدرس‌دهی محتوامحور؛ تنها مرجع موثق برای چک‌پوینت‌ها، مجموعه‌داده‌ها و گزارش‌های ارزیابی
بازتولیدپذیر (Reproducible) «نتیجه‌ی یکسان در اجرای دوباره» وزن‌های متفاوت در سطح بیتی اما با معیارهای نهایی معادل؛ هدف واقع‌بینانه در آموزش توزیع‌شده‌ی مدل‌های زبانی بزرگ
گیت هزینه (Cost gate) «سقف مجاز مصرف بودجه» تخمین هزینه پیش از اجرا در کنار ردگیری حین پردازش؛ اگر برآورد از بودجه بیشتر شود، پایپ‌لاین اصلاً شروع به کار نمی‌کند

برای مطالعه‌ی بیشتر

سؤالات متداول

چرا در پایپ‌لاین LLM آرتیفکت‌ها بر اساس هش ذخیره می‌شوند؟

آدرس‌دهی بر پایه‌ی هش SHA-256 مانع از اشتباه گرفتن نسخه‌ها یا جایگزینی ناخواسته فایل‌ها می‌شود و زنجیره‌ی اتصالات هر مرحله را دقیق و قطعی نگه می‌دارد.

تفاوت بازتولیدپذیری با قطعیت بیتی در آموزش مدل چیست؟

بازتولیدپذیری یعنی رسیدن به نتایج و معیارهای ارزیابی یکسان با ورودی مشابه، در حالی که کرنل‌های غیرقطعی GPU مانع از یکسانی بیت‌به‌بیت وزن‌ها می‌شوند.

گیت ارزیابی (Eval Gate) چگونه از انتشار مدل ناقص جلوگیری می‌کند؟

با اعمال آستانه‌های عددی سخت‌گیرانه روی بنچمارک‌ها و تغییرات رفتار مدل (مثل بودجه KL)، پیش از صدور مجوز انتشار جلوی افت کیفیت مدل را می‌گیرد.

ما رو توی گوگل بیشتر ببین

با افزودن نکست ادمین به «منابع ترجیحی» گوگل، درس‌ها و مطالب ما را در بخش اخبار برتر جستجو بیشتر می‌بینید.