Phase 17: Infrastructure & Production

خدمة محركات داخلية الصفحةالتأمل، التعبئة المستمرة، المزدوج المزدوج

إنّ معدل إمداد المحركات العاملة الحديثة يعتمد على ثلاث أخطاء مشتركة، وليس على خدعة واحدة. الاهتمام المرفوع دائماً يعمل يتم حقن الطلبات الجديدة في اللحظة النشطة بين إعادة تشكيل الكود. قطع مُزقتة من المُسجلات المُقدمة، تُطالب بالطول، لذا لا تُجوع رموز التشفير أبداً. تشغيل كل ثلاثة و Llama 3.3 70B FP8 على واحد H100 SXM5 يدفع 2,200-2,400 tok / s عند 128 متزامن حوالي 25% فوق vLLM الخاص الافتراضي و 3-4x حلقة PyTorch ساذجة. يقرأ هذا الدروس الجدول و نواة الاهتمام من vLLM المحرك المرجعي لجميع التقنيات الثلاث على مستوى يمكنك رسم الرسم، وينتهي مع لعبة مستمرة المجموعة في code/main.pyأن المخططات تملأ وتفكّر بالطريقة التي تقوم بها (VLLM)

Type: Learn

Languages: Python (stdlib, toy continuous batching scheduler)

Prerequisites: Phase 17 · 01 (Model Serving), Phase 11 (LLM Engineering)

Time: ~75 minutes

أهداف التعلم

  • شرح PagedAttention كمنصب متخزن KV: الكتل، جداول الكتل، ولماذا تبقى التجزئة أقل من 4% عند تحميل الإنتاج.
  • الرسم البياني لتنظيمات مستمرة على مستوى التكرار: كيف تترك التسلسلات المنتهية اللسلة والتي تتضمن جديدة دون استنزاف.
  • وصف المكملات المسبقة المقطوعة في جملة واحدة واسم مقياس التأخير الذي يحمي (لمحة: إنه ذيل TTFT ، وليس متوسط التنقل).
  • تحقق من مزيج ميزات vLLM مقابل ماتريكية التوافق لنسخة الخاص بك قبل تمكين كل تحسين في وقت واحد.

المشكلة

حلقة خدمة PyTorch البديلة تعمل طلب واحد في كل مرة: إضفاء الرمز، إضفاء التمثال، فك الشفرة حتى EOS، العودة. في مستخدم واحد هذا يعمل. في مئة، هو صف من الناس الصبورين. الإصلاح الواضح الإعداد ثابت يضع كل طلب في أطول طلب في النافذة، ويقوم بتشفير كل إصدار إلى أطول إصدار متوقع، ويقفز المجموعة بأكملها في أبطأ تسلسل. تدفع مقابل التشغيل الذي لا تستخدمه، والطلبات السريعة تنتظر الطلبات البطيئة.

حلّت (VLLM) ثلاث مشاكل في وقت واحد. PagedAttention يمنع تكسير الاحتفاظ الكهربائي من تناول 60-80% من ذاكرة GPU بالطريقة التي تقوم بها التخصيص المتماشى الكلاسيكي. يسمح التجمع المستمر لطلبات بالانضمام والخروج من المجموعة بين كل تكرار لتفكيك الرمز، لذلك تكون المجموعة مليئة بالعمل الحقيقي دائمًا. يكسّر التمليح المسبق المقطوع عرض رمز 32 كيلو في شرائح رمز 512 تتداخل مع فك الشفرة، لذا لا يتجمد عرض طويل كل رمز فك الشفرة على جهاز التلفزيون.

إنّه من المفترض أن تكون هناك ثلاثة أشكال في الإنتاج 2026، عليك أن تفهم ما تفعله كلّ واحد، لأنّ أوضاع الفشل كلها على المخطط، وليس على النموذج.

المفهوم

PagedAttention كنظام ذاكرة افتراضية

كاش كيف هوnum_layers × 2 × num_heads × head_dim × seq_len × bytes_per_elementفي كل تسلسل. بالنسبة للاما 3.3 70B عند 8192 رمزا، وهذا حوالي 1.25 جيجابايت لكل تسلسل في BF16. إذا قمت بحجز مسبق 8192 فتحة لكل طلب ولكن متوسط الطلب لا يستخدم سوى 1500 رمزا، كنت تضيع حوالي 82% من HBM احتجت.

تستعير PagedAttention الفكرة من ذاكرة نظام التشغيل الافتراضي. لا يتم تعيين cache KV على التسلسل. يتم تخصيصه في كتلة ذات حجم ثابت (توهات 16 توهات افتراضية). لكل تسلسل جدول كتلة يقوم بتخريط مواقع الوهات المنطقية الخاصة به إلى أجهزة تعريف كتلة جسدية. عندما ينمو تسلسل ما بعد كتلة المخصصة، يتم إضافة كتلة أخرى. عندما تنتهي، تعود كتلةها إلى حوض البحيرة.

انخفضت التجزئة من 60-80% (معتاد) إلى أقل من 4% (PagedAttention). لا يمكنك تمكين PagedAttention مع العلم هو السفن التخصيصية الوحيدة vLLM. الزر هو --gpu-memory-utilization(الوضع الافتراضي 0.9) ، الذي يخبر vLLM كمية HBM أن تستخدمه للكتلات KV بعد وزن الحمل والتنشيط.

الإعداد المستمر على مستوى التكرار

"المركبات الديناميكية" القديمة تنتظر نافذة (قول 10 ms) لملء مجموعة ، ثم تشغيل prefill + decode + decode + decode حتى تنتهي كل تسلسل. ترك التسلسلات السريعة مبكرا وجلس ساكنا بينما انتهت GPU من البطيئات.

يعمل الإعداد المستمر بين كل خطوة لتفكيك.RUNNINGفي كل إعادة التكرار:

  1. أي تسلسل فيRUNNINGالذي ضرب EOS أو max_tokens يتم إزالتها.
  2. يبحث المخطط في صف الانتظار. إذا كان هناك كتلة KV مجانية، فإنه يسمح بتسلسلات جديدة (مليئة أو استئناف).
  3. المخطط الأمامي يذهب على أي شيء الآن فيRUNNING، إصدار رمز جديد لكل تسلسل

لا يتم إعادة حجم الحزمة إلى رقم ثابت. تتشارك التسلسلات في مواقع مختلفة في خروجهما واحدة متضخمة إلى الأمام. في 2026 vLLM هذا يسمى V1 scheduler. عدم تغير المفتاح: يقوم المخطط بتشغيل مرة واحدة لكل تكرار للكشف وليس مرة واحدة لكل طلب.

الاحتمالات المسبقة المقطوعة تحمي ذيل TTFT

يحتوي إعداد الـ 32k-token على Llama 3.3 70B على ~ 800 ms من إعداد الـ prefill النقي على H100 واحد. أثناء إعداد الـ prefill ، قم بتشخيص الرموز لكل تسلسل آخر في المجموعة. في حلقة خدمة ، يصبح تأخير الـ first-token latency (TTFT) من إشارة طويلة إطار التأخير بين الرموز (ITL) لعدد من المستخدمين الآخرين.

تقسم الملفات المسبقة المقطوعة المقطوعة المقطوعة إلى قطع ذات الحجم الثابت (أعلامة افتراضية 512) وتجدد كل قطعة كوحدة. بين القطعات يمكن للمخطط أن يقدم تسلسلات فك التشفير بنموذج واحد. يمكنك تبادل ضرب تأخير الملفات المسبقة المطلقة الصغيرة (بضع سم في كل قطعة) مقابل اضطراب وقت فك التشفير أقل بكثير. تنخفض P99 ITL تحت الحمل المختلط من ~ 50 سم إلى ~ 15 سم في المعايير المنشورة.

التفاعل بين الثلاثة التخلفات

جميع الميزات الثلاث تتضمن بعضها البعض. PagedAttention يمنح الجدول الجدولي مصدر KV ذو حبوب دقيقة للتجارة مع. الحزمة المستمرة تحتاج إلى هذا المصدر ذو حبوب دقيقة لذلك فإن قبول تسلسل جديد لا يفرض إعادة التنسيق العالمية. الاحتمالات المزروعة هي قرار يتخذه الجدول الجدولي على نفسRUNNINGقائمة إنها سياسة واحدة أخرى لمخطط، وليس نظام منفصل.

لا تحتاج إلى معرفة كل علم، عليك أن تعرف ما يُحسن من المخطط: الخدمة الخيرية تحت ميزانية الكتلة الكهربائية، تخضع لقطع المكملات المسبقة.

تحقق من ماتريكس التوافق

تحقق من كل مزيج من الميزات مع ماتريكس التوافق لنسخة vLLM الخاصة بك بالضبط قبل تمكينهم جميعا في وقت واحد، لأن ما يشكّل تغييرات بين الإصدارات. في v0.18.0 تعتبر المصفوفة المميزة التشخيص المضاربة متوافقة مع التخزين المضارب والتحفظ المحفوظة في الاحتفاظ بالجزء، وتعرض صفحة التشخيص المضاربة لمعروفين عن عدم توافقين: التوازي في خط الأنابيب من خلال v0.15.0، وتشخيص النموذج المخطط من خلال v0.10.0. بالنسبة لمنهج مشروع نفسه، غالباً ما تكون الاختيار المتباعد لعام 2026 EAGLE-3 ("method": "eagle3"() ، التي تم تغطيتها في المرحلة 17 · 05.

أرقام يجب أن تتذكر

  • إلاما 3.3 70B FP8، H100 SXM5، 128 متزامن، كل ثلاثة على: 2,200-2,400 توك / ثانية.
  • نفس النموذج، vLLM الافتراضي (لا يوجد إعادة إكمال قطعة): ~1,800 توك/س.
  • نفس النموذج، بطيء PyTorch الحلقة الأمامية: ~ 600 توك / ثانية.
  • النفايات المزقتة في KV تحت PagedAttention عند عبء الإنتاج: <4%.
  • P99 ITL تحت الحمل المختلط: ~ 15 ms مع إعادة التعبئة المزروعة، ~ 50 ms بدون.

كيف يبدو المخطط

while True:
    finished = [s for s in RUNNING if s.is_done()]
    for s in finished: release_blocks(s); RUNNING.remove(s)

    while WAITING and have_free_blocks_for(WAITING[0]):
        s = WAITING.pop(0)
        allocate_initial_blocks(s)
        RUNNING.append(s)

    # schedule prefill chunks + decode in one batch
    batch = []
    for s in RUNNING:
        if s.in_prefill:
            batch.append(next_prefill_chunk(s))   # e.g. 512 tokens
        else:
            batch.append(decode_one_token(s))     # 1 token

    run_forward(batch)                            # one fused GPU call

code/main.pyهذا بالضبط هذا الحلقة في stdlib Python مع عدد رمز مزيف وتخفيف المضي قدما مزيفا تشغيله يظهر كيفية إزالة القطع المسبقة يحتفظ بتشريح تسلسل حي خلال إزالة طويلة.

استخدمها

code/main.pyيحاكي نظام المواعيد على شكل vLLM مع ميزات قابلة للتبديل. قم بتشغيله لرؤية:

  • NAIVEوضع: طلب واحد في كل مرة، لا يوجد شحنة.
  • STATICوضع: المكعب والانتظار، الاختيار الكلاسيكي.
  • CONTINUOUSوضع: القبول والإفراج على مستوى التكرار.
  • CONTINUOUS + CHUNKEDوضع: إملأ قطع من قبل متداخلة مع فك الرمز.

وتظهر الخروج إجمالي الانتقال (الرموز لكل ثانية افتراضية) ، المتوسط TTFT، و P99 ITL. CONTINUOUS + CHUNKEDيجب أن يهيمن الصف على حركة المرور المختلطة.

أرسله

هذا الدرس يُنتجoutputs/skill-vllm-scheduler-reader.md. بالنظر إلى إعداد الإعداد (حجم الحزمة، استخدام ذاكرة KV، حجم التملأ المقطوع، إعداد المضاربة) ، فإنه ينتج تشخيص المخطط الذي يسمي أي من الثلاثة أخطاء افتراضية هي عرق الزجاجة وما الذي يجب ضبطه.

التمارين

  1. أركضcode/main.py. مقارنةSTATICإلىCONTINUOUSعلى عبء عمل مع طلبات مختلطة قصيرة وطويلة. من أين يأتي الفجوة في التعبئة من كفاءة الإعداد المسبق، كفاءة فك الشفرة، أو تأخير الذيل؟
  2. تعديل جدول اللعب لإضافة --max-num-batched-tokens. ما هي القيمة الصحيحة لـ H100 يعمل على Llama 3.3 70B FP8؟ (تلميح: إنها وظيفة من حجم كتلة KV وعدد كتلة حرة، وليس HBM خام.)
  3. إعادة قراءة ملاحظات إصدار vLLM v0.18.0. أي مزيج من العلامات يستبعد بعضها البعض؟ قم بإدراجها.
  4. حساب نفايات تقطيع مخزن KV لمتابعة 1000 طلب مع متوسط 1500 رمزا خروجا، std 600 رمزا، تحت (أ) التخصيص المتماشى لكل طلب عند 8192 أقصى، (ب) PagedAttention مع 16 حجر رمزا.
  5. شرح في فقرة واحدة لماذا يساعد التعبئة المسبقة في قطع من المواد في P99 ITL ولكن لا تسفر عن المعدات بشكل منفصل. من أين تأتي الفوز في الممارسة العملية؟

الشروط الرئيسية

TermWhat people sayWhat it actually means
PagedAttention"the KV trick"Fixed-size block allocator for KV cache; fragmentation <4%
Block table"the page table"Per-sequence map from logical token position to physical KV block
Continuous batching"dynamic batching, but right"Admit/release decisions made every decode iteration
Chunked prefill"prefill splitting"Break long prefill into 512-token slices interleaved with decode
TTFT"first token time"Prefill + queue + network; dominated by prefill at long prompts
ITL"inter-token latency"Time between consecutive decode tokens; dominated by batch size
Goodput"throughput that meets SLO"Tokens/sec where every request still hit TTFT and ITL targets
V1 scheduler"the new scheduler"vLLM's 2026 scheduler; runs continuous batching with chunked prefill
--gpu-memory-utilization"the memory knob"Fraction of HBM reserved for KV blocks after weights and activations

المزيد من القراءة

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.