پیشکد/کد پاک شده NVIDIA Dynamo و llm-d
Type: Learn
Languages: Python (stdlib, toy disaggregated-vs-colocated simulator)
Prerequisites: Phase 17 · 04 (Serving Engine Internals), Phase 17 · 08 (Inference Metrics)
Time: ~75 minutes
اهداف یادگیری
- توضیح دهید که چرا پر کردن و رمزگذاری پیش از کار، دارای اختصاص بهینه GPU های مختلف است و زباله های زیر رنگ بندی را مقادیر کنید.
- نقشه معماری تجزیه شده: جمع آوری پیش از پر کردن، جمع بندی کد، انتقال KV از طریق NIXL، روتر.
- شرایطی را که در آن دسته بندی نتیجه نمی دهد (تغییر کوتاه، خروجی کوتاه) نام ببرید.
- NVIDIA Dynamo (در بالا) را از llm-d (Kubernetes-native) متمایز کنید و هر یک را با یک زمینه عملیاتی مطابقت دهید.
مشکل
شما Llama 3.3 70B را در 8 H100 اجرا می کنید. تحت بار کاری مخلوط (پرومبت های طولانی + خروجی کوتاه) ، GPU ها در طول رمزگذاری بیکار هستند زیرا بیشتر محاسبات برای پر کردن قبل مصرف شده است. تحت بار کاری مختلف (پرومبت های کوتاه + خروجی طولانی) ، برعکس اتفاق می افتد.
تاثیر بودجه: 20-40 درصد زمان GPU در منابع اشتباه تلف می شود. شما خرید H100 محاسبه برای اجرای حافظه محدود کد گذاری، یا خرید H100 HBM باند عرض برای اجرای محاسبه محدود prefill. هر دو زباله گران هستند.
تجزیه و تقسیم prefill و decode به مجموعه های جداگانه اندازه گیری برای هر گلو بطری. KV cache انتقال از prefill pool به decode pool از طریق بین وصلات باند-بایت بالا.
مفهوم
چرا گلوهای بطری متفاوت هستند
Prefill ترانسفورماتور را در یک پرامپت ورودی کامل اجرا کنید. ضربات ماتریکس غالب است؛ محدود به محاسبه. H100 FP8 ~ 2000 TFLOPS از تولید مفید را می دهد. بهره وری دسته خوب است یک پرامپت ورودی چندین توکن را پردازش می کند.
Decode تولید یک توکن در یک زمان، خواندن وزن کامل هر تکرار. حافظه-بندبایت محدود. HBM3 ~ 3 TB / s را می دهد. بهره وری دسته تنها در یک زمان همزمان بالا خوب است وزن خواندن در سراسر دسته کاهش می یابد.
قرار دادن آنها: شما GPU های بهینه شده برای هر دو را می خریدید. H100 در هر دو مورد خوب است اما هزینه یکسان است. در مقیاس، شما می خواهید مخزن پر کردن قبل از H100 / محاسبه سنگین؛ مخزن رمزگذاری H200 / حافظه سنگین، یا با کوانتاسیون تهاجمی.
معماری
┌──────────────┐
Request → │ Router │ ───────────────────────┐
└──────┬───────┘ │
│ │
▼ (prompt only) │
┌──────────────┐ KV cache ┌───────▼──────┐
│ Prefill pool │ ─── NIXL ────► │ Decode pool │
│ (compute) │ │ (memory) │
└──────────────┘ └──────┬───────┘
│ tokens
▼
ClientNIXL انتقال بین گره های NVIDIA است. زمانی که در دسترس است از RDMA / InfiniBand استفاده می کند، در غیر این صورت از TCP عقب نشینی می کند. تاخیر انتقال واقعی است معمولاً 20-80 ms برای کیش KV یک پیام 4K-token در 70B FP8. به همین دلیل پیام کوتاه توجیه تجزیه نمی کند: مالیات انتقال از پس انداز فراتر می رود.
دینامو در مقابل دوم
NVIDIA Dynamo(اعلان GTC 2025، 1.0 GA):
- به عنوان یک نوازنده فوق VLLM، SGLang، TRT-LLM می نشیند.
- برنامه نویس پروفایلگر بار کار را اندازه گیری می کند، برنامه نویس SLA خودآگاه تنظیمات پیش از پر کردن: تناسب کد را تنظیم می کند.
- هسته زنگ، قابلیت گسترش پایتون
- افزایش تولید: NVIDIA گزارش 6x برای DeepSeek-R1 MoE در GB200 NVL72 + Dynamo در رژیم تاخیر متوسط (developer.nvidia.com، 2025-06) ؛ گزارش های جامعه "تا 30x" در کامل Blackwell + Dynamo + DeepSeek-R1 stacks یک منبع اصلی واحد را ندارند و باید به عنوان جهت داده مورد توجه قرار گیرند.
- GB300 NVL72 + Dynamo: تا 50 برابر تولید MoE در مقابل Hopper در هر صفحه محصول Dynamo (developer.nvidia.com، غیرمجاز).
llm-d(Red Hat + AWS، Kubernetes بومی):
- پیش از پر کردن / رمزگذاری / روتر به عنوان سرویس های مستقل Kubernetes.
- HPA در هر نقش با سیگنال های عمق صف (پرداخت) / استفاده از KV (شکود)
topologyConstraint packDomain: rackبسته های prefill+decode click روی همان ریک برای انتقال KV با عرض باند بالا.- llm-d 0.5 (2026): تخلیه KV سلسله مراتبی، مسیریابی LoRA آگاه از کیش، شبکه UCCL، مقیاس به صفر.
اگه ميخواي از دينامو استفاده کنيد اگه ميخواي از يک آرکستراتور با کنترل بالا استفاده کنيد از llm-d اگه ميخواي از بوميان اصلي کوبرنتيس استفاده کنيد و به اکوسيستم CNCF متعهد باشيد
اقتصاد
ترکیب داخلی (هیچ مطالعه موردی منتشر نشده است لنگر در ترتیب بزرگی):
- 2 میلیون دلار در سال هزینه بر روی خدمت های قرار داده شده است.
- با "دينامو" به "دستور" تبديل شد
- همان حجم درخواست، همان SLA تاخیر P99
- پس انداز گزارش شده: $600K–$800 هزار دلار در سال (3040% کاهش)
- هیچ دستگاه جدیدی نیست
ما این ارقام را از چندین افشای مشتری به جای یک مطالعه موردی قابل ذکر ترکیب می کنیم؛ نزدیک ترین نقطه داده منتشر شده 2x سریع تر TTFT / 61٪ بالاتر با Dynamo KV روٹنگ (baseten.co، 2025-10) و پیش بینی VAST + CoreWeave از 60130% بیشتر توکن / $ در 4060% KV نرخ ضربه (vastdata.com، 2025-12). پس انداز از اندازه مناسب هر حوضچه است؛ بار کاری سنگین پیش از پر کردن (RAG با پیشاپیش 8K +) از بار متوازن بیشتر سود می برند.
چه زمانی نباید به صورت دسته بندی تقسیم شود
- پیامد < 512 توکن و محصول < 200 توکن: مالیات بر انتقال بر سود غالب است.
- کلستر کوچک (< 4 GPU): تنوع کافی در استخر.
- تیم نمی تواند دو مجموعه GPU را با مقیاس بندی هر نقش کار کند: Dynamo کمک می کند اما به طور معمولی نیست.
- بدون پارچه RDMA: مالیات انتقال TCP سنگین تر است.
روتر با مرحله 17 · 11 ادغام می شود
روترهای تجزیه شده KV-cache-aware هستند (فاز 17 · 11). یک درخواست روی مجموعه کدگذاری قرار می گیرد که پیشگویی خود را نگه دارد اگر مطابقت نداشته باشد، جریان prefill → decode. سرعت ضربه و ترکیب تجزیه روتر cache-aware تعیین می کند که آیا یک prefill جدید حتی مورد نیاز است.
در "بلیک ویل" تعداد واقعی
GB300 NVL72 + Dynamo 50x MoE throughput را در خط های پایه Hopper نشان می دهد. روتینگ متخصص MoE در پر کردن پیش فرض سنگین است اما در رمزگذاری حافظه سنگین است (کاش های متخصص) ، بنابراین تجزیه یک پیروزی دوگانه است. مدل مرزی 2026 خدمت می کند MoE غالب است (DeepSeek-V3 ، انواع آینده GPT-5).
شماره هایی که باید به یاد داشته باشی
اعداد معیار حرکت NVIDIA و استیک نتیجه گیری هر سه ماهه نتایج را به روز می کند. قبل از نقل قول دوباره بررسی کنید.
- DeepSeek-R1 در GB200 NVL72 + Dynamo: ~6x throughput vs baseline در رژیم متوسط تاخیر (developer.nvidia.com، 2025-06) ؛ ادعاهای جامعه "تا 30x" در استاک های کامل Blackwell + Dynamo مجموعه های جهتی بدون یک منبع اصلی هستند.
- GB300 NVL72 + Dynamo: تا 50 برابر تولید MoE در مقابل Hopper (developer.nvidia.com، غیرمجاز).
- لنگر پس انداز (مجموعه داخلی، نه یک مطالعه موردی): $600-800K/year off a $2 میلیون دلار هزینه سالانه در SLA ثابت
- حد تخفیف: درخواست ها > 512 توکن + خروجی > 200 توکن.
- انتقال KV از طریق NIXL: 20-80 ms برای KV 4K-prompt در 70B FP8.
ازش استفاده کن
code/main.pyشبیه سازی سرویس های جمع شده و تقسیم شده. گزارش تولید، هزینه هر درخواست و کراسور در طول عرض.
-باده
این درس به ما کمک می کندoutputs/skill-disaggregation-decider.mdبا توجه به حجم کار و کلستر، تصمیم می گیرد که آیا به طور قطع تقسیم شود.
تمرینات
- فرار کن
code/main.pyدر چه طولي از جداسازی به جلوتر از colocation میره؟ - طراحی حوضچه پر کردن پیش و رمزگذاری برای یک سرویس RAG با طول پیشگویی P99 8K، خروجی 300.
- دینامو در مقابل llm-d: یکی را برای یک فروشگاه خالص Kubernetes بدون ترجیح زمان اجرا پایتون انتخاب کنید.
- هزینه انتقال KV را محاسبه کنید: 4K پیش پر کردن در 70B FP8 = ~ 500 MB KV. در RDMA 100 GB / s، انتقال = 5 ms. در TCP 10 GB / s = 50 ms. چه چیزی برای SLA شما مهم است؟
- رویتینگ متخصص MoE الگوهای دسترسی KV را تغییر می دهد. تجزیه با MoE که کارشناسان مختلف را به هر توکن فعال می کند چگونه رفتار می کند؟
اصطلاحات کلیدی
| Term | What people say | What it actually means |
|---|---|---|
| Disaggregated serving | "split prefill/decode" | Separate GPU pools for each phase |
| NIXL | "NVIDIA transport" | Dynamo's inter-node KV transfer (RDMA/TCP) |
| NVIDIA Dynamo | "the orchestrator" | Stack-above coordinator for vLLM/SGLang/TRT-LLM |
| llm-d | "Kubernetes native" | Red Hat + AWS K8s disaggregated stack |
| Planner Profiler | "Dynamo auto-config" | Measures workload, configures pool ratios |
| SLA Planner | "Dynamo policy" | Auto-rate-matches prefill:decode to meet SLOs |
packDomain: rack | "llm-d topology" | Pack prefill+decode on same rack for fast KV |
| UCCL | "unified collective" | llm-d 0.5 networking layer for scale-to-zero |
| MoE expert routing | "expert per token" | DeepSeek-V3 pattern; disaggregation helps |
خواندن بیشتر
- NVIDIA — Introducing Dynamo
- NVIDIA — Disaggregated LLM Inference on Kubernetes
- TensorRT-LLM Disaggregated Serving blog
- llm-d GitHub
- llm-d 0.5 release notes
This free lesson is part of the AI Engineering from Scratch curriculum. Read the full explanation, run the lesson code, and verify the result in the interactive reader or from the repository source.
Browse the complete course catalog or open this lesson on GitHub.