AI Infrastructure

تحسين حركة استنتاج النماذج: ضبط TCP والطبقات الشبكية لتقديم نماذج لغوية كبيرة بزمن استجابة منخفض

مع انتقال النماذج اللغوية الكبيرة (LLMs) من النماذج التجريبية إلى أحمال العمل الإنتاجية، ينتقل عنق الزجاجة غالباً من معالجة وحدة معالجة الرسومات (GPU) إلى مدخلات/مخرجات الشبكة. في سيناريوهات التقديم عالية الإنتاجية، نادرًا ما تكون تهيئة نواة لينكس القياسية كافية. يستكشف هذا المنشور طبقات البنية التحتية الحرجة—تحديداً ضبط بروتوكول التحكم في الإرسال (TCP) والطبقة الشبكية—التي تحدد ما إذا كان نموذجك سيخدم الطلبات في أجزاء من الألف من الثانية أم في ثوانٍ.

عنق الزجاجة في مكدس TCP أثناء تقديم الذكاء الاصطناعي

يتميز استنتاج النماذج اللغوية الكبيرة بوجود اتصالات طويلة الأمد لاستجابات التدفق (streaming) وطلبات صغيرة ومتكررة للمعالجة الدفعية (batch processing). تم تصميم مكدس TCP الافتراضي لحركة مرور الويب العامة، وليس للطلبات الدقيقة لاستنتاج الذكاء الاصطناعي. غالباً ما تحتاج المعلمات الرئيسية إلى ضبط لمنع مرحلة "البداية البطيئة" (Slow Start) من التأثير على زمن الاستجابة، ولتعظيم الإنتاجية على الروابط عالية النطاق الترددي وعالية زمن التأخير.

أولاً، يجب علينا تحسين أحجام مخازن الاستقبال والإرسال. تسمح المخازن الكبيرة لواجهة الشبكة بامتصاص الانبثاقات في حركة المرور، مما يمنع فقدان الحزم وإعادة الإرسال اللاحق. بالنسبة لروابط مركز البيانات النموذجية، يجب أن تكون هذه القيم أكبر بكثير من القيم الافتراضية.

# /etc/sysctl.conf

# تمكين الضبط التلقائي للشبكات عالية الإنتاجية
net.ipv4.tcp_window_scaling = 1

# زيادة أحجام المخازن إلى 16 ميجابايت (القياسي غالباً ما يكون بين 128 كيلوبايت و1 ميجابايت)
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 87380 16777216

بالإضافة إلى ذلك، يمكن لتمكين tcp_fastopen تقليل زمن إعداد الاتصال للطلبات المتكررة، وهو أمر بالغ الأهمية للخدمات القائمة على واجهة برمجة التطبيقات (API) حيث تحافظ العملاء على اتصالات دائمة.

الطبقات الشبكية: فهم الطبقة المادية

لا يمكن لضبط البرمجيات إصلاح القيود المادية. في مجموعات النماذج اللغوية الكبيرة، خاصة تلك التي تستخدم الاستنتاج الموزع أو vLLM، تهم الطبقة الشبكية بين العميل وخادم GPU بشكل كبير. تجنب توجيه حركة استنتاج النماذج عبر مفاتيح العمود-الورقة (spine-leaf switches) إذا كان ذلك يؤدي إلى إضافات غير ضرورية في عدد القفزات (hops). بدلاً من ذلك، استهدف طبقة Clos التي تقلل من عدد المفاتيح التي يتم عبورها.

لإعدادات متعددة العقد، فكر في استخدام RDMA (الوصول المباشر إلى الذاكرة عن بُعد) عبر إيثرنت المتقارب (RoCE) أو InfiniBand. يتجاوز RDMA مكدس شبكة النواة بالكامل، مما يسمح لوحدة معالجة الرسومات بقراءة البيانات مباشرة من بطاقة الشبكة. هذا يقلل من عبء وحدة المعالجة المركزية وزمن التأخير بنسبة تصل إلى 50% مقارنة بمكدسات TCP/IP القياسية.

# مثال: تكوين RoCE على بطاقة شبكة لينكس
# تأكد من تمكين PFC (التحكم في تدفق الأولوية) لمنع فقدان الحزم
sudo ethtool -K eth0 roce on
sudo ip link set dev eth0 type ipvlan mode l2

# التحقق من قدرة RoCE
sudo ethtool --dump-regset eth0 | grep roce

تحسينات على مستوى التطبيق

بeyond النواة والأجهزة، يلعب الضبط على مستوى التطبيق دوراً كبيراً. عند استخدام أطر عمل مثل vLLM أو TGI (Text Generation Inference)، قم بتمكين البatching المستمر. يسمح ذلك للخادم بضغط طلبات متعددة في عملية تمرير أمامي واحدة، مما يعظم استخدام وحدة معالجة الرسومات مع الحفاظ على زمن استجابة منخفض للطلبات الفردية.

علاوة على ذلك، تأكد من تكوين موازن الحمل HTTP الخاص بك للاتصالات طويلة الأمد. إذا كنت تستخدم Nginx أو HAProxy، فقم بزيادة proxy_read_timeout لاستيعاب أوقات التوليد المتغيرة للنماذج اللغوية الكبيرة. يعد انتهاء المهلة المبكر مصدراً شائعاً لأخطاء الاستجابة الجزئية في خدمات النماذج اللغوية الكبيرة الإنتاجية.

الخاتمة

لا يتعلق تحسين استنتاج النماذج اللغوية الكبيرة بشراء وحدات معالجة رسومات أسرع فحسب؛ بل يتطلب رؤية شاملة لمسار الطلب بأكمله. من خلال ضبط معلمات نواة TCP، والاستفادة من RDMA للاتصالات منخفضة زمن التأخير داخل العقدة، وتكوين موازنات الحمل للجلسات طويلة الأمد، يمكنك تقليل وقت ظهور الرمز الأول وزمن التأخير الإجمالي بشكل كبير. ابدأ بالطبقة الشبكية، وقياس خط الأساس الخاص بك، ثم كرر العملية. الفرق بين تجربة مستخدم متعثرة وسلسة يكمن غالباً في ملفات التكوين هذه.

Share: