vLLM هو محرك استدلال وخدمة مفتوح المصدر للنماذج اللغوية الكبيرة (LLMs). تتمثل مرحلتا استدلال النموذج اللغوي في كلاً من: التعبئة المسبقة، التي تقوم بمعالجة المدخلات وتشكيل سجل الذاكرة الكهربائية ذات القيمة، والفك، الذي يستخدم ذلك السجل لتوليد الإخراج تدريجيًا بوحدة كلمة. لكل من هذه المراحل خصائص مختلفة في استخدام الموارد الحاسوبية والذاكرة وتوسيع النطاق. التفكيك والتعبئة المسبقة (P-D) يتم تنفيذهما على عمليات مختلفة، مما يسمح لكل مرحلة بتوسيعها وتحسينها بشكل مستقل. هذا يمكن أن يحسن استخدام الموارد والناتج الإخراجي والزمن المستغرق تحت الحمل. ومع ذلك، يتطلب ذلك نقل سجل الذاكرة الكهربائية ذات القيمة من عمليات التعبئة المسبقة إلى عمليات الفك، قبل أن يمكن بدء توليد الكلمات، مما يجعل النقل الفعال للذاكرة الكهربائية ذات القيمة أساسيًا لتقليل الزمن حتى الحصول على الكلمة الأولى (TTFT).
إحدى الطرق التي يقوم بها vLLM بتحقيق هذا النقل هي من خلال مكتبة NVIDIA Inference Xfer Library (NIXL) connector، والتي تنقل كتل KV عبر اتصالات تدعم وصولًا مباشرًا إلى الذاكرة (Remote Direct Memory Access) (RDMA)، مثل AWS Elastic Fabric Adapter (AWS EFA، شبكة RDMA ذات أداء منخفض تُستخدم بين الخوادم في AWS). على أنواع المثيلات المدعومة، تدعم AWS EFA GPUDirect RDMA وNeuron Direct RDMA. وبالتالي، يمكن لـ NIXL نقل كتل KV مباشرة بين GPU أو AWS Trainium في الذاكرة، دون الحاجة إلى الانتقال عبر الذاكرة الوسيطة. الوضع الافتراضي لـ NIXL connector هو pull-based: بعد انتهاء عملية التزويد المسبق لحفظ كتل KV، يقوم المحور بنقل البيانات الوصفية المصدرية، بما في ذلك أرقام أحجام كتل التزويد المسبق، إلى المثيل الذي يقوم بالتفكيك. ثم يقوم المثيل الذي يقوم بالتفكيك بتخصيص كتل الوجهة، وإعداد نقل NIXL، وبدء عملية NIXL READ لسحب كتل KV من المثيل الذي تم التزويد له مسبقًا. نظرًا لأن هذه الخطوات التنسيقية والإعداد تحدث بالتتابع بعد التزويد المسبق وقبل بدء عملية التفكيك، فإنها تطيل المسار الحرج للنقل، كما هو موضح في الجدول الزمني التالي.
الشكل 1: جدول زمني لنقل البيانات KV بطريقة السحب، حيث يتم تمرير الراوتر، وتخصيص الجانب التحليل، وبرنامج NIXL READ بشكل متسلسل على الطريق إلى العلامة الأولى
يقدم هذا المنشور ربطًا NIXL بأسلوب الدفع، يُزيل تنسيق وتهيئة نقل ما بعد الإفراز الكلي من المسار الحاسم. إذا كنت تستخدم التقديرات المنفصلة للإفراز/التفكيك مع vLLM، يمكن لطريقة الدفع أن تحسن استجابة التطبيق عن طريق تقليل TTFT وTPOT، خاصة عند معدلات الطلب العالية.
في اختبارنا على نشر 1P1D باستخدام Amazon Elastic Compute Cloud (Amazon EC2)، دوال P5en المتصلة بـ EFA، في وضع الضغط، تم تحقيق تحسين يصل إلى 3 أضعاف في TTFT، وتحسين يصل إلى 30 بالمئة في الوقت لكل توكين صادر (TPOT) مقارنةً بوضع السحب (انظر قسم بيانات الأداء) للنموذج Qwen3-32B. تعتمد النتائج على حجم العمل والإعدادات.
بنينا وضمنّنا الميزة على مجموعات خوادم AWS Trainium المتصلة بـ EFA، ثم قدمناها إلى vLLM كميزة مستقلة عن المحركات التسريعية. النتائج المستخلصة من هذه العملية تأتي من مجموعة Amazon EC2 P5en (GPU) المزودة بـ EFA، وتُظهر أن الفوائد تنتقل إلى وحدات GPU. يشرح هذا البوست الهيكل القائم على الضغط، وتدفق النقل، ونموذج التسلسل، ونتائج الأداء، وكيفية تكرار اختبارات المعايير.
نقل KV بناءً على الضغط
تشرح هذه القسم التصميم القائم على الضغط: بنيته، بروتوكول النقل، ونموذج التسلسل الذي يحافظ على نقل كيو في ممر الحرجة.
نظرة عامة على الهندسة المعمارية
تحسين التحويل القائم على الضغط يزيد من معدل تفريغ البيانات ومعدل تفكيك البيانات لسببين:
- هذا يزيل التسلسل في نموذج السحب من خلال تداخل عمل المنتج ومستهلك العمل. يقوم مثال فك التشفير بتسجيل الكتل المستهدفة مسبقًا بينما لا يزال المنتج يحسب KV. ثم يبدأ النقل بمجرد أن تكون كتل المنتج جاهزة، بدلاً من انتظار رحلة عبور ID على جانب المستهلك، مما يخلو المسار إلى العلامة الأولى من تلك الرحلة.
- إنه يقلل من وقت إعداد النقل عن عمليتي التشفير. يتم تنفيذ هذا الإعداد على جانب التزويد المسبق وعلى خيط عمل خلفية. فهو يُعد وصفات NIXL ويقدم عملية النقل، بحيث لا يقضي عمليتي التشفير على تلك الدورات خلال مرحلة إنتاج العلامات التي تتطلب زمنًا طويلًا.
التأثير الناتج هو انخفاض في TTFT وزيادة في معدل الإخراج للرموز على حالة التفكيك.
يقوم ربط الدفع بتنسيق ثلاثة أطراف: يقوم مثيل التفكيك بتسجيل الكتل المستهدفة مسبقًا، ويقوم مثيل التزويد المسبق بمطابقة كل طلب وإصدار التحويل، بينما يقوم خيط خلفية متخصص بنقل كتابة KV من خلال حلقة التمرير الأمامي للمحرك. يوضح الرسم البياني التالي كيف تتشكل هذه الأجزاء معًا.
الشكل 2: هيكل نقل البيانات الكمية القائم على الضغط، الذي يوضح كيف تتناغم مثيلة التشفير، ومثيلة التعبئة المسبقة، وخيط نقل الخلفية.
تفاصيل التنفيذ
للبروتوكول ثلاث خطوات منطقية.
1. التسجيل (جانب فك التشفير). عندما يقوم مثال فك التشفير بتخصيص الكتل المحلية لطلب يتطلب تعبئة مسبقة عن بعد، فإنه يُعدّ تسجيلًا يوضح أين يجب على مثال التعبئة المسبقة كتابة البيانات KV: هوية المثال وتواجد الكتل التي حصل على حقوقها للاحتفاظ بها. خلال نفس خطوة المحرك، ينقل العامل هذا التسجيل إلى مثال التعبئة المسبقة كإشعار NIXL. وبما أن التسجيل يحدث أثناء عملية التخصيص، فإن المُوصل يعرف الكتل الوجهة قبل أن ينتهي مثال التعبئة المسبقة من عملية التعبئة.
2. Rendezvous (جانب التعبئة المسبقة). يمكن وصول عملية التسجيل من المفسر وعملية التعبئة المسبقة من المنتج بترتيبين مختلفين، ويقوم الجهاز المتصل بالتعامل مع كليهما. إذا وصلت عملية التسجيل أولاً، يحتفظ المنتج بها حتى ينتهي تلقائيًا عملية التعبئة المسبقة. وإذا انتهت عملية التعبئة المسبقة أولاً، يحتفظ المنتج بكتل الطلبات حتى يصل التسجيل. أي حدث يحدث ثانيًا يؤدي إلى الانتقال. يقوم الجهاز المتصل بمطابقة الطلبات حسب ID، ويتعامل مع الطلبات المُعاد إصدارها بشكل صحيح، مع الربط الصحيح للطلبات التي تم استبعادها أو المحاولة مرة أخرى.
3. النقل (جانب التعبئة). بمجرد مطابقة الطلب، يقوم المنتج بإنشاء اتصال مع مثيلة التفكيك (إذا لم يكن موجودًا بالفعل) ويصدر أمر NIXL WRITE ينسخ كتل KV مباشرة إلى الذاكرة المسجلة للمفكك، مع توجيه كل رتبة تكرار تنسوري للمنفذ والمستهلك. يمكن للمنتج والمستهلك استخدام ترتيبات داخلية مختلفة لكتلات البلاك. يقوم كل جانب بتحويل مواقع الكتل إلى ترتيب فيزيائي خاص به وقت النقل، مما يسمح بأحجام مختلفة للكتل على كل جانب. يحمل كل أمر WRITE إشعارًا بالإنهاء يرسله NIXL إلى مثيلة التفكيك بمجرد وصول البيانات. يقوم المفكك بتحليل هذه الإشعارات، واحد لكل رتبة منتج يكتب فيها. يعامل المفكك كتل KV كمتلقاة فقط بعد وصول جميع الإشعارات المتوقعة، وفي ذلك الوقت يمضي الطلب نحو التفكيك.
نموذج التسلسل
يفصل ربط الضغطة بين تنفيذ النموذج واستعداد نقل البيانات، باستخدام خيط نقل خلفي متخصص في كل عامل تزويد بالبيانات. عند بدء الطلب، يقوم الحلقات الرئيسية بتفكيك البيانات وتخصيص كتل البيانات KV الهدف وتسجيلها مع مثيل التزويد بالبيانات، بينما تقوم الحلقات الرئيسية لتزويد البيانات بحساب سجل الكاشة للبيانات KV. بعد أن يكون التسجيل للوجهة والطلب KV جاهزين، يقوم الحلقة الرئيسية بالملء المسبق بتحويل كتل KV إلى الخيط الخلفية ويعود بسرعة إلى تنفيذ النموذج.
يقوم الخيط الخلفية بتأسيس أو إعادة استخدام اتصال NIXL، ويوجه أرقام كتل KV للطلب إلى وصفات الذاكرة، ويتحد الكتل المتجاورة في مناطق نقل أكبر، ويقدم عملية NIXL WRITE إلى مثيل التفكيك. عندما ينتهي NIXL من النقل، يرسل إشعارًا بالإنهاء إلى مثيل التفكيك، الذي بدوره يبدأ في توليد العلامات. تجنب إبقاء إعداد وطرح الوصفات ونقلها ضمن الحلقات الرئيسية التي تعتمد على التأخير، يمنع هذا العمل المتعلق بكل طلب من تأخر تنفيذ النموذج. يوضح الرسم البياني التالي نقل المسؤوليات بين الحلقات الرئيسية والخيوط الخلفية لكل طلب.
الشكل 3: نقل المسؤوليات بين الحلقة الرئيسية والثريد الخلفية لطلب واحد في نموذج التخزين داخل الثريد القائم على البث
مقارنة زمنية بين السحب والدفع
تلخص الرسم البياني التالي تدفقات النقل بالسحب والدفع التي تم وصفها في الأقسام السابقة، وتبرز تأثيرها على TTFT. وعلى الرغم من أن كلا النمطين يستخدمان نفس مسار بيانات NIXL وEFA/RDMA، فإن النقل بالسحب يقوم بإعادة الإرسال للبيانات الوصفية وتركيب جانب التشفير بعد التعبئة المسبقة، بينما يتداخل النقل بالدفع مع تركيب جانب التشفير بعد التعبئة المسبقة. ونتيجة لذلك، يزيل النقل بالدفع هذه العمليات من المسار الحاسم بعد التعبئة المسبقة، مما يسمح ببدء عملية التشفير في وقت أقرب.
الشكل 4: مقارنة تدفقات نقل الشحن والدفع، مع تسليط الضوء على كيفية تداخل الدفع في إعداد جانب التفكير مع التمهيد المسبق
تشمل الطريقتان الأخيرتان أيضًا تفاوتًا في الترتيب. يسمح وضع السحب للمرورب باختيار نسخة تفكيك بعد اكتمال عملية التزويد المسبق، مما يوفر مرونة أكبر لترتيب الشحن الذي يأخذ في الاعتبار الحمل والإدارة لجودة الخدمة. أما وضع الدفع في اختيار نسخة تفكيك مبكرًا، بحيث يمكن أن يتداخل إعداد الوجهة مع عملية التزويد المسبق. في المقابل، تحت ضغط مماثل، يمكن لحالة التمهيد أن تفرغ كتل KV الخاصة بها بشكل أسرع، لأن النقل يبدأ بمجرد استعداد كتل KV المطلوبة وتسجيل الوجهة.
بيانات الأداء
لأغراض التقييم، استخدمنا نموذج Qwen3-32B في توزيع 1P1D باستخدام مثيلات Amazon EC2 P5en المتصلة ببروتوكول EFA. لفصل أداء النقل من P إلى D، قمنا بتكوين الاختبار بحيث يتم إيقاف التخزين المؤقت للملفات باستخدام --no-enable-prefix-caching. هذه التكوين تسمح لعقدة التشفير باسترجاع سجل التخزين الكامل من عقدة التمهيد لكل طلب. وإلا، قد تستخدم الطلبات المتداخلة سلة التخزين المحلية لعقدة التشفير وتتجاوز عملية النقل، مما يؤدي إلى نتائج مقارنة مضللة.
يقارن الجدول التالي بين وضعية الضغط ووضعية السحب في نقل البيانات باستخدام KV. لقد قمنا بتجربة أطوال مدخلات تتراوح بين 1k–16k، وأسعار الاستعلام من 1–8 استعلامًا في الثانية (QPS). عند الحمل المنخفض والطلبات القصيرة، تؤدي الطريقتان نفس الأداء تقريبًا. مع زيادة QPS وأطوال المدخلات، يتردى أداء وضعية السحب بشكل حاد، حيث يصل إلى حوالي 1,744 مللي ثانية عند 8 QPS و16k. بينما تظل وضعية الضغط أقل بكثير، حوالي 540 مللي ثانية، أي انخفاض بنحو 3 أضعاف. تتشكل الفجوة لأن مشاركات وضع السحب تحتوي على وصفات NIXL داخل الصفحة في عامل التفكيك، بشكل متزامن داخل حلقة محركه، مما يؤدي إلى توقف العمل في إنتاج الرموز. أما وضع الدفع فينقلها إلى خيط خلفي، بعيدًا عن المسار الحاسم.
الشكل 5: TTFT للنقل السحبي مقابل النقل الضاغط للKV عبر أطوال الإدخال ومعدلات الطلب (تقنية الطبقة 1P1D، 128 توكينات خرج، تعطيل التخزين المؤقت للمصدر على نقطة التشفير)
يُظهر هذا الرسم البياني TPOT تحت نفس الظروف. النمط يشبه TTFT. عند الحمل الخفيف، يكون الضغط والسحب متقاربين، حوالي 5.6–5.8 مللي ثانية. مع زيادة الحمل وطول المدخلات، يزداد السحب إلى حوالي 10.4 مللي ثانية عند 4–8 QPS و16k، بينما يبقى الضغط حوالي 7 مللي ثانية. السبب هو أن الضغط يقلل من استهلاك وقت إعداد الوصفات وتقديمها من العامل الذي يقوم بالتفكير، ولا يتم نقص إنتاج الترقيات، لذا يظل معدل التأخير لكل ترقية ثابتًا حتى عند التزامن العالي والسياقات الطويلة.
الشكل 6: TPOT للدفع مقابل النقل KV بالسحب عبر أطوال المدخلات ومعدلات الطلبات (تقنية الطبقة 1P1D، 128 توكينات مخرج، إعاقة التخزين المؤقت للمعرّف على نقطة التشفير)
كيفية تشغيل اختبار التقييم
لإعادة إنتاج تكوين اختبار 1P1D الخاص بنا، يجب استخدام عقدة إعادة مملاة واحدة وعقدة تفكيك واحدة، باستخدام مثيلات Amazon EC2 P5en المتصلة بـ EFA، وذلك وفقًا للتعليمات التفصيلية في دليل إعادة إنتاج نتائجنا. يغطي الدليل إعداد البيئة، تشغيل خوادم إعادة المملاة والتفكيك لـ vLLM، إجراء الاختبار، وجمع النتائج. يمكن تشغيل هذه الميزة في تكوينات أخرى مدعومة، لكن نتائج الأداء ستختلف حسب الأجهزة، النموذج، حمل العمل، وتكوين الشبكة.
الخلاصة
في هذا البيان، أظهرنا كيف أن رابط KV القائم على الضغط يتداخل مع حساب التزويد المسبق مع تخصيص الكتل والتسجيل على جانب فك التشفير، مما يزيل الرحلة العكسية لمنعطف المحرك بعد التزويد المسبق وتركيب نقل الجانب التفسيري من المسار الحرج. هذا يقلل من TTFT وTPOT، خاصة عند معدلات طلب عالية. في اختبار Qwen3-32B لدينا على توزيع 1P1D باستخدام مثيلات Amazon EC2 P5en المتصلة بـ EFA، يوفر وضع الضغط تحسينًا يصل إلى 3 أضعاف في TTFT وتحسينًا بنسبة 30٪ في TPOT مقارنة بوضع السحب. تختلف النتائج حسب حجم العمل والتكوين. لاستخدام وضع الضغط، قم بتكوين كل من خوادم التزويد المسبق وفك التشفير لاستخدام NixlPushConnector بدلاً من NixlConnector.
اختر الرابط القائم على الضغط عندما يكون اختيار عقدة التشفير المبكر مقبولًا، ويكون معدل TTFT المنخفض هو الأولوية. يظل الرابط القائم على السحب أفضل للأعمال التي تتطلب نقل KV ثنائي الاتجاه، أو تأجيل اختيار عقدة التشفير حتى بعد التمهيد المسبق لإعادة التوجيه الذي يعترف بالحمل. يدعم vLLM كلا من روابط KV القائمة على الضغط والسحب، لذا يمكنك اختيار النهج الذي يناسب نشرك بشكل أفضل.
كتحسين مستقبلي، نقوم باستكشاف إدخال نموذج التسلسل NIXL الخلفية في المُشبك الطري، وانتقال إعدادات NIXL خارج المسار الحاسم، حتى يمكن للأعمال التي تعمل بنمط الطرح الاستفادة من نفس التحسينات. لقد قمنا بفتح طلب طرح لاستكشاف هذا الأمر.
الموارد المرتبطة
شكر وتقدير
نشكر مجتمع vLLM على دعمهم في الحفاظ على هذه الميزة.
