الفصل 10 — طبقة محرك LLM

تم النشر في: 1447-11-15 آخر تحديث في: 1448-01-23 الإصدار: 1
الفصل 10 — طبقة محرك LLM

الفصل 10 — طبقة محرك LLM

المقالة العاشرة من الجولة الفصلية لـ LLM Primer VI: توسيع أنظمة الذكاء الاصطناعي. الفصل الذي يُسمِّي الحد بين المحرك والمنصة، ويمشي على المحركات الخمسة المُهيمنة على تلك الطبقة في 2026.


لماذا يوجد هذا الفصل

مشت الفصول 1–9 على الآلة التي يلمسها تمرير أمامي واحد: الحلقة الانحدارية الذاتية، وذاكرة KV، وبنية GPU، والتكميم الذي يُقلِّصها، والتجميع الذي يُخفي وقتها العاطل، وفك التشفير التخميني الذي يكسر اعتمادها التسلسلي. لا يُشحَن أيٌّ من ذلك كمكتبة تستطيع pip install ونسيانها. أحدهم يُوصِّلها في وقت تشغيل عقدة واحدة يُغلِّف نموذجاً، ويمتلك ذاكرة KV، ويُجَدوِل الطلبات على دُفعة مستمرة، ويُعرِّض واجهة استدلال. ذلك الوقت التشغيل هو المحرك. يُسمِّي الفصل 10 وظيفةَ طبقة المحرك، ويُميِّزها عن طبقة المنصة (الفصل 11)، ويمشي على المحركات الخمسة — vLLM وTensorRT-LLM وSGLang وTGI وOllama — التي تُقايض ميكانيكياً على نفس الوظيفة.

في سطر واحد: يُشغِّل المحرك نموذجاً واحداً على GPU واحد أو بضع GPU في عملية واحدة؛ لا يُصادق، ولا يُوازن الحمل، ولا يُسلسل النماذج، ولا يُوسِّع تلقائياً — تلك اهتمامات المنصة، ويفوز المحرك بأدائه لعمله الضيق جيداً.

10.1 vLLM هو الافتراضي الأصلي في Python

vLLM هو المحرك الذي يجب أن تصل إليه أغلب فرق الإنتاج أولاً، لأنه يتَّخذ القرار الافتراضي الصحيح على كل محور لن يعرف المبتدئ كيف يُفكِّر فيه، ويفعل ذلك في Python. PagedAttention يمنحه انهيار التجزئة من 60–80 بالمئة إلى أرقام آحادية، مما يُضاعف تقريباً حجم الدُّفعة المحقَّق على نفس GPU. التجميع المستمر يعتلي فوق ذلك طبيعياً، مع خلط التعبئة الأمامية المُجزَّأة لعمل التعبئة وفك التشفير في نفس التكرار بحيث لا يكون الحد بينهما وقتاً ميتاً. مشاركة البادئات بالنسخ عند الكتابة مجانية من تصميم جدول الكتل. الواجهة حقاً دُفعة غير متصلة أو HTTP مُتوافق مع OpenAI في بضعة أسطر، وكل عمارة نموذج جديدة تحطُّ هناك بسرعة لأن المجتمع واسع. إنه المحرك الذي يجب توحيد المعيار عليه عندما لا يكون للمُشغِّل سبب مُحدَّد لاختيار غيره.

10.2 TensorRT-LLM يشتري الإنتاجية بخط بناء

عرض TensorRT-LLM ضيق. إن كان الأسطول حصرياً NVIDIA، وإن كانت كل نقطة مئوية من الإنتاجية لكل دولار مهمَّة، وإن كان الفريق سيدفع ضريبة هندسية لتصريف ملفات محرك خاصة بالنموذج لكل جيل عتاد، يستخرج TRT-LLM 15–35 بالمئة إنتاجية أعلى من vLLM على نفس العتاد. الآلية على مستوى النواة: أنزل رسم المحوِّل إلى IR خاص بـ NVIDIA، اندمج النوى المتجاورة (layernorm + matmul + تفعيل في إطلاق واحد)، اختر النوى المُثلى بحسب الشكل من مكتبة مُضبَطة مسبقاً، أنتج محركاً مُتسلسَلاً، وشغِّله تحت Triton Inference Server. الاندماج مهم لأن نفقات إطلاق النواة 5–10 μs لكلٍّ، ويطلق تمريرٌ أمامي ساذج لـ 70B آلاف منها لكل رمز. الضريبة هي خط البناء نفسه — خطوة تصريف لكل نموذج ولكل GPU ولكل نطاق دُفعات، ولا تُقدِّر أغلب الفرق كلفتها التشغيلية. SGLang هو التخصص الآخر: RadixAttention يُخزِّن ذاكرة KV لكل بادئة مُوجِّه رآها المحرك في شجرة radix، بحيث يتشارك طلبان لهما بادئة بطول k رموز KV لتلك k بالضبط عبر الدُّفعات وعبر الزمن. على أعباء وكيلية بمُوجِّهات نظام طويلة مُشترَكة وذيول مُتغيِّرة قصيرة، يُقدِّم SGLang إنتاجية 2–6× على vLLM، وDSL المُخرَجات المُهيكَلة يُنفِّذ مخطَّطات JSON على مستوى القياس بحيث يُضمَن أن تُتحقَّق المُخرَجات.

10.3 شجرة القرار تمر بشكل عبء العمل لا بالإنتاجية العنوانية

المحركات الخمسة تتفرَّع على شجرة قرار صغيرة. حاسوب مطوِّر أو حافة بمُسرِّعات مختلطة ← Ollama. أسطول GPU إنتاجي، حصرياً NVIDIA، QPS عالٍ، وعائد إنتاجية يُبرِّر خط البناء ← TensorRT-LLM. عتاد مختلط أو تبديل نماذج متكرِّر، وعبء عمل تُهيمن عليه أنماط مُهيكَلة كثيفة البادئات (وكلاء، استدعاء أدوات، مُوجِّهات مشتركة طويلة) ← SGLang. عتاد مختلط، عبء دردشة عام، تكامل عميق مع Hugging Face ← TGI. كل شيء آخر ← vLLM. القرار ليس دائماً: المحركات قابلة للتبديل عند حد الواجهة — كلها تتحدَّث HTTP بأسلوب OpenAI — فيستطيع مُوجِّه على طبقة المنصة تحويل حركة المرور لكل نموذج، لكل عبء عمل، أو لكل منطقة دون تغيير كود العميل. تُشغِّل كثير من مكدسات الإنتاج محركَين أو ثلاثة جنباً إلى جنب. احذر المعيار العنواني: «رموز في الثانية على Llama-2-7B عند دُفعة 1» يُجيب عن سؤال لا يطرحه أي عبء عمل إنتاجي. عايِر على نموذجك الخاص، على توزيع مُوجِّهك، على ملف تعريف تزامنك؛ نصف يوم، يُوفِّر أشهراً.

يجدر بنا تذكُّره: حد طبقة المحرك هو نموذج واحد، عملية واحدة، GPU واحدة أو بضعة. اللحظة التي ينمو فيها المتطلب إلى محرَّكَين خلف موازن حمل، أو خط أنابيب متعدِّد النماذج، أو نظام حصص، أو مُوسِّع تلقائي، ينفد جواب المحرك وتتولَّى المنصة.

ما يُمهِّد له الفصل 10

كل محرك موصوف في هذا الفصل يتوقَّف عند نفس الحد. يعرف عن النوى، وكتل KV، والتجميع المستمر؛ لا يعرف عن النسخ المتماثلة، أو المستأجرين، أو السلاسل، أو المصادقة. يمشي الفصل 11 على طبقة المنصة التي تُعالج تلك الاهتمامات — Ray Serve وKServe وBentoML وTriton Inference Server — ويُبيِّن أن الاختيار أقل بكثير عن الميزات وأكثر عن أي نموذج تشغيلي يُطابق البنية التحتية والكفاءات القائمة للفريق.


التالي — الفصل 11: طبقة المنصة والتنسيق. Ray Serve وKServe وBentoML وTriton — المنصات الأربع التي تجلس فوق المحرك، مُختارَة بحسب ملاءمة ثقافة التشغيل.

هل تريد الصورة الكاملة؟ يشمل فصل الكتاب استدعاءات vLLM غير المتصلة والخادم القابلة للتشغيل، وخط بناء trtllm-build، وشرح RadixAttention في SGLang، وإطلاق TGI في Docker وقصة Ollama بكونها ملفاً ثنائياً واحداً، وتفاصيل إطار القرار الذي يُلخِّصه المقال. اطّلع على LLM Primer VI على أمازون ←

SHO
SHO
مدير التكنولوجيا والمؤسس لشركة RECEIPTROLLER. يركز على البيانات، مدفوع بالابتكار، دائم الفضول.