توسيع نماذج اللغة للإنتاج: دليل عملي

الاستفادة من واجهات برمجة التطبيقات لتكامل نماذج اللغة الكبيرة

يمكن تحقيق دمج نماذج اللغة الكبيرة (LLMs) في قاعدة التعليمات البرمجية من خلال طرق متنوعة، ولكن يوصى بشدة باستخدام واجهة برمجة تطبيقات متوافقة مع OpenAI لعمليات النشر الإنتاجية. يوفر هذا النهج المرونة اللازمة للتكيف مع المشهد المتطور بسرعة للنماذج. يمكن أن تصبح النماذج التي كانت تعتبر متطورة قبل أشهر قليلة قديمة بسرعة.

منذ الطفرة التي بدأت مع ChatGPT في عام 2022، برزت واجهة برمجة تطبيقات OpenAI كمعيار واقعي لربط التطبيقات بنماذج اللغة الكبيرة. يسمح هذا المعيار للمطورين ببناء التطبيقات باستخدام الموارد المتاحة، مثل البدء بـ Mistral 7B في Llama.cpp على دفتر ملاحظات والانتقال بسلاسة إلى خوادم واجهة برمجة تطبيقات Mistral AI لعملية النشر الإنتاجية. هذا يلغي الانغلاق على نموذج واحد أو محرك استدلال أو مزود واجهة برمجة تطبيقات.

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

بالإضافة إلى عروض واجهة برمجة التطبيقات من كبار بناة النماذج، يقدم عدد متزايد من الشركات الناشئة في مجال البنية التحتية للذكاء الاصطناعي خدمة الاستدلال كخدمة للنماذج ذات الأوزان المفتوحة. يختلف هؤلاء المزودون في مناهجهم. يستخدم البعض، مثل SambaNova و Cerebras و Groq، أجهزة متخصصة أو تقنيات مثل فك التشفير التخميني لتسريع الاستدلال، لكنهم يقدمون مجموعة أصغر من النماذج. يدعم البعض الآخر، مثل Fireworks AI، نشر نماذج مخصصة مضبوطة بدقة باستخدام محولات Low Rank Adaptation (LoRA). تتطلب مجموعة الذكاء الاصطناعي المتنوعة بحثًا شاملاً قبل الالتزام بمزود معين.

اعتبارات نشر نماذج اللغة الكبيرة في الموقع

في الحالات التي لا تكون فيها المناهج المستندة إلى السحابة ممكنة بسبب قيود الخصوصية أو اللوائح التنظيمية أو البنية التحتية الموجودة مسبقًا (على سبيل المثال، استثمرت الشركة بالفعل في خوادم GPU)، يصبح النشر في الموقع ضروريًا. يمكن أن يمثل هذا عدة تحديات. تتضمن بعض الأسئلة الشائعة التي تطرح:

  • اختيار النموذج: يعتمد النموذج المناسب على حالة الاستخدام المحددة. سيكون للنموذج المصمم لروبوت محادثة لخدمة العملاء متطلبات مختلفة عن النموذج المستخدم لتوليد معزز بالاسترجاع أو كمساعد للتعليمات البرمجية. يوصى بقضاء بعض الوقت مع مزودي واجهة برمجة التطبيقات لتحديد نموذج يلبي الاحتياجات.
  • متطلبات الأجهزة: يعد تحديد الأجهزة الضرورية أمرًا بالغ الأهمية، لأن وحدات معالجة الرسومات باهظة الثمن وقد يكون من الصعب الحصول عليها. يمكن أن يوفر النموذج نفسه رؤى حول الأجهزة المطلوبة لتشغيله. تتطلب النماذج الأكبر حجمًا المزيد من الأجهزة. يمكن حساب تقدير تقريبي للحد الأدنى لذاكرة وحدة معالجة الرسومات عن طريق ضرب عدد المعلمات (بالمليارات) في 2 جيجابايت للنماذج المدربة بدقة 16 بت. بالنسبة للنماذج ذات 8 بت، يلزم 1 جيجابايت لكل مليار معلمة. يمكن لتقنيات ضغط النموذج مثل التكميم تقليل هذا إلى 512 ميجابايت لكل مليار معلمة. هذا هو الحد الأدنى. هناك حاجة إلى ذاكرة إضافية لتقديم النموذج لعدة مستخدمين في وقت واحد بسبب ذاكرة التخزين المؤقت للمفتاح والقيمة، والتي تعمل كذاكرة قصيرة المدى للنموذج. تقدم مصفوفة دعم Nvidia إرشادات حول وحدات معالجة الرسومات المطلوبة لتشغيل النماذج المختلفة.
  • التكرار: بالإضافة إلى تحديد حجم الأجهزة للنموذج، يجب أخذ التكرار في الاعتبار. عقدة GPU واحدة معرضة للفشل، لذلك من المهم نشر نظامين أو أكثر للتبديل في حالة الفشل وموازنة التحميل.
  • طرق النشر: يمكن نشر نماذج اللغة الكبيرة وتقديمها في الإنتاج باستخدام طرق مختلفة: المعدن العاري مع موازنات التحميل أو الآلات الافتراضية أو الحاويات في Docker أو Kubernetes. يبسط Kubernetes عمليات النشر واسعة النطاق عن طريق أتمتة إنشاء الحاويات والشبكات وموازنة التحميل.

Kubernetes لنشر نماذج اللغة الكبيرة

يقوم Kubernetes بتجريد الكثير من التعقيد المرتبط بعمليات النشر واسعة النطاق عن طريق أتمتة إنشاء الحاويات والشبكات وموازنة التحميل. لقد تبنت العديد من المؤسسات Kubernetes بالفعل وفهمته. تفضل Nvidia و Hugging Face وغيرهما البيئات المحتواة مع Nvidia Inference Microservices (NIMs) و Hugging Face Generative AI Services (HUGS)، التي تم تكوينها مسبقًا لأحمال العمل وعمليات النشر الشائعة.

محركات الاستدلال

تتوفر محركات استدلال مختلفة لتشغيل النماذج، بما في ذلك Ollama و Llama.cpp، والتي تتوافق مع مجموعة واسعة من الأجهزة. لتوسيع نطاق النماذج، غالبًا ما يتم استخدام مكتبات مثل vLLM و TensorRT LLM و SGLang و PyTorch. يركز هذا الدليل على نشر النماذج باستخدام vLLM، لأنه يدعم مجموعة واسعة من النماذج الشائعة ويوفر دعمًا وتوافقًا واسعًا عبر Nvidia و AMD والأجهزة الأخرى.

إعداد بيئة Kubernetes

يتطلب إعداد بيئة Kubernetes للعمل مع وحدات معالجة الرسومات برامج تشغيل وتبعيات إضافية مقارنة بإعداد Kubernetes النموذجي. ستختلف عملية الإعداد لأجهزة AMD و Nvidia.

يستخدم هذا الدليل K3S في تكوين عقدة واحدة. الخطوات الأساسية مماثلة للبيئات متعددة العقد، ولكن يجب استيفاء التبعيات على كل عقدة عامل GPU، وقد يتطلب تكوين التخزين تعديلات.

الهدف هو توفير أساس قوي لنشر أحمال عمل الاستدلال بطريقة صديقة للإنتاج. المتطلبات الأساسية التالية مطلوبة:

  • خادم أو محطة عمل مع لوحة AMD أو Nvidia GPU واحدة على الأقل مدعومة
  • تثبيت جديد لنظام التشغيل Ubuntu 24.04 LTS

تبعيات Nvidia

يتطلب إعداد بيئة K3S مسرعة من Nvidia تثبيت CUDA Drivers Fabric Manager وبرامج تشغيل الخادم Headless. قم بتثبيت أدوات خادم Nvidia لتصحيح مشكلات برنامج التشغيل.

أحد الاعتبارات الحاسمة في مجال نماذج اللغة الكبيرة (LLMs) هو اختيار النموذج المناسب لحالة الاستخدام المحددة. هناك مجموعة كبيرة من النماذج المتاحة، ولكل منها نقاط قوتها وضعفها. على سبيل المثال، قد يكون النموذج المصمم لروبوت محادثة لخدمة العملاء مختلفًا تمامًا عن النموذج المستخدم لتوليد معزز بالاسترجاع أو كمساعد للتعليمات البرمجية. لذلك، من الضروري قضاء بعض الوقت مع مزودي واجهة برمجة التطبيقات (APIs) لتحديد نموذج يلبي الاحتياجات المحددة للتطبيق المقصود. يجب أن تتضمن عملية الاختيار هذه تقييمًا دقيقًا لقدرات النموذج ودقته وسرعته وتكلفته. علاوة على ذلك، من المهم مراعاة ترخيص النموذج وشروط الاستخدام لضمان الامتثال لأي متطلبات قانونية أو تنظيمية ذات صلة.

جانب آخر مهم يجب مراعاته هو متطلبات الأجهزة اللازمة لتشغيل نماذج اللغة الكبيرة (LLMs). وحدات معالجة الرسومات (GPUs) ضرورية لتسريع عمليات التدريب والاستدلال لنماذج اللغة الكبيرة (LLMs)، ولكنها قد تكون باهظة الثمن وصعبة الشراء. يمكن أن يوفر النموذج نفسه رؤى حول الأجهزة المطلوبة لتشغيله. تتطلب النماذج الأكبر حجمًا المزيد من الأجهزة، لذلك من الضروري تحديد متطلبات الأجهزة المناسبة قبل نشر نموذج اللغة الكبيرة (LLM) في الإنتاج. يمكن حساب تقدير تقريبي للحد الأدنى لذاكرة وحدة معالجة الرسومات (GPU) عن طريق ضرب عدد المعلمات (بالمليارات) في 2 جيجابايت للنماذج المدربة بدقة 16 بت. بالنسبة للنماذج ذات 8 بت، يلزم 1 جيجابايت لكل مليار معلمة. يمكن لتقنيات ضغط النموذج مثل التكميم تقليل هذا إلى 512 ميجابايت لكل مليار معلمة. ومع ذلك، هذا هو الحد الأدنى، وهناك حاجة إلى ذاكرة إضافية لتقديم النموذج لعدة مستخدمين في وقت واحد بسبب ذاكرة التخزين المؤقت للمفتاح والقيمة، والتي تعمل كذاكرة قصيرة المدى للنموذج. تقدم مصفوفة دعم Nvidia إرشادات حول وحدات معالجة الرسومات (GPUs) المطلوبة لتشغيل النماذج المختلفة، والتي يمكن أن تكون موردًا قيمًا في تحديد الأجهزة المناسبة لتطبيق معين.

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

هناك عدة طرق مختلفة لنشر نماذج اللغة الكبيرة (LLMs) وتقديمها في الإنتاج، ولكل منها نقاط قوتها وضعفها. تتضمن بعض الطرق الشائعة المعدن العاري مع موازنات التحميل أو الآلات الافتراضية أو الحاويات في Docker أو Kubernetes. المعدن العاري هو أبسط طريقة، ولكنها قد تكون أقل مرونة وتتطلب المزيد من الإدارة اليدوية. توفر الآلات الافتراضية مزيدًا من المرونة، ولكنها لا تزال تتطلب بعض الإدارة. الحاويات، مثل Docker، خفيفة الوزن وقابلة للحمل، مما يجعلها مثالية لنشر نماذج اللغة الكبيرة (LLMs). يوفر Kubernetes ميزات إضافية للإدارة والتوسع، مما يجعله خيارًا شائعًا لعمليات النشر واسعة النطاق. يبسط Kubernetes عمليات النشر واسعة النطاق عن طريق أتمتة إنشاء الحاويات والشبكات وموازنة التحميل. لقد تبنت العديد من المؤسسات Kubernetes بالفعل وفهمته، مما يجعله خيارًا طبيعيًا لنشر نماذج اللغة الكبيرة (LLMs) في الإنتاج. تفضل Nvidia و Hugging Face وغيرهما البيئات المحتواة مع Nvidia Inference Microservices (NIMs) و Hugging Face Generative AI Services (HUGS)، التي تم تكوينها مسبقًا لأحمال العمل وعمليات النشر الشائعة. يمكن أن تساعد هذه الأدوات في تبسيط عملية النشر وتقليل مقدار الإدارة اليدوية المطلوبة.

تلعب محركات الاستدلال دورًا حاسمًا في تقديم نماذج اللغة الكبيرة (LLMs) في الإنتاج. تتوفر محركات استدلال مختلفة لتشغيل النماذج، ولكل منها نقاط قوتها وضعفها. تتضمن بعض محركات الاستدلال الشائعة Ollama و Llama.cpp، والتي تتوافق مع مجموعة واسعة من الأجهزة. لتوسيع نطاق النماذج، غالبًا ما يتم استخدام مكتبات مثل vLLM و TensorRT LLM و SGLang و PyTorch. يوفر كل محرك من هذه المحركات ميزات وإمكانيات مختلفة، لذلك من المهم اختيار المحرك المناسب لحالة الاستخدام المحددة. على سبيل المثال، vLLM هو محرك استدلال عالي الإنتاجية مصمم لخدمة نماذج اللغة الكبيرة (LLMs) مع إمكانية تجميع الدفعات المستمرة والتوجيه المدار. يدعم مجموعة واسعة من النماذج الشائعة ويوفر دعمًا وتوافقًا واسعًا عبر Nvidia و AMD والأجهزة الأخرى. TensorRT LLM هو محرك استدلال آخر مصمم لتحسين أداء نماذج اللغة الكبيرة (LLMs) على وحدات معالجة الرسومات (GPUs) من Nvidia. يوفر مجموعة متنوعة من التحسينات والتقنيات التي يمكن أن تساعد في تحسين وقت الاستدلال والإنتاجية. SGLang هي لغة برمجة مصممة لتبسيط تطوير ونشر تطبيقات نماذج اللغة الكبيرة (LLMs). يوفر مجموعة متنوعة من الميزات التي تجعل من السهل إنشاء تطبيقات معقدة تعتمد على نماذج اللغة الكبيرة (LLMs). PyTorch هو إطار عمل تعلم آلي شائع يمكن استخدامه لتدريب ونشر نماذج اللغة الكبيرة (LLMs). يوفر مجموعة متنوعة من الميزات والأدوات التي تجعل من السهل إنشاء نماذج معقدة ونشرها في الإنتاج.

يتطلب إعداد بيئة Kubernetes للعمل مع وحدات معالجة الرسومات (GPUs) برامج تشغيل وتبعيات إضافية مقارنة بإعداد Kubernetes النموذجي. ستختلف عملية الإعداد لأجهزة AMD و Nvidia. يتطلب إعداد بيئة K3S مسرعة من Nvidia تثبيت CUDA Drivers Fabric Manager وبرامج تشغيل الخادم Headless. بالإضافة إلى ذلك، قد يكون من الضروري تثبيت أدوات إضافية، مثل Nvidia Container Toolkit، للسماح لـ Docker و Kubernetes باستخدام وحدات معالجة الرسومات (GPUs) من Nvidia. تتطلب أجهزة AMD تثبيت برامج تشغيل وبرامج AMD ROCm، بالإضافة إلى أي تبعيات إضافية قد تكون مطلوبة. من المهم اتباع الوثائق والإرشادات المقدمة من Nvidia و AMD بعناية لضمان إعداد البيئة بشكل صحيح وتشغيل وحدات معالجة الرسومات (GPUs) على النحو الأمثل. يستخدم هذا الدليل K3S في تكوين عقدة واحدة. الخطوات الأساسية مماثلة للبيئات متعددة العقد، ولكن يجب استيفاء التبعيات على كل عقدة عامل GPU، وقد يتطلب تكوين التخزين تعديلات.

الهدف هو توفير أساس قوي لنشر أحمال عمل الاستدلال بطريقة صديقة للإنتاج. المتطلبات الأساسية التالية مطلوبة: خادم أو محطة عمل مع لوحة AMD أو Nvidia GPU واحدة على الأقل مدعومة وتثبيت جديد لنظام التشغيل Ubuntu 24.04 LTS. بالإضافة إلى هذه المتطلبات الأساسية، من المهم التأكد من تحديث النظام بآخر التحديثات الأمنية وتصحيحات الأخطاء. يوصى أيضًا بتكوين جدار حماية لحماية النظام من الوصول غير المصرح به. أخيرًا، من المهم تنفيذ استراتيجية النسخ الاحتياطي والاستعادة لحماية البيانات في حالة حدوث فشل في النظام.

بمجرد إعداد بيئة Kubernetes وتكوينها، يمكن نشر نماذج اللغة الكبيرة (LLMs) باستخدام مجموعة متنوعة من الأدوات والتقنيات. أحد الأساليب الشائعة هو استخدام Helm، وهو مدير حزم لـ Kubernetes يسمح بتعريف وتثبيت وتحديث التطبيقات المعقدة. يمكن استخدام Helm لنشر نموذج اللغة الكبيرة (LLM) مع جميع تبعياته، مثل محرك الاستدلال وأي مكتبات أو أدوات أخرى مطلوبة. طريقة أخرى هي استخدام Kubernetes Operators، وهي وحدات تحكم مخصصة تعمل على تمديد وظائف Kubernetes لأتمتة إدارة التطبيقات المعقدة. يمكن استخدام Kubernetes Operator لنشر نموذج اللغة الكبيرة (LLM) ومراقبته تلقائيًا، بالإضافة إلى إدارة أي ترقيات أو تغييرات في التكوين. بغض النظر عن الطريقة المستخدمة، من المهم مراقبة أداء نموذج اللغة الكبيرة (LLM) وتسجيله بشكل صحيح لضمان تشغيله على النحو الأمثل وتلبية الاحتياجات المحددة للتطبيق. يمكن أن يتضمن ذلك مراقبة استخدام وحدة معالجة الرسومات (GPU) واستخدام الذاكرة ومعدل النقل وأي مقاييس أخرى ذات صلة، بالإضافة إلى تسجيل أي أخطاء أو تحذيرات تحدث. من خلال مراقبة هذه المقاييس وتسجيلها، يمكن للمطورين تحديد ومعالجة أي مشكلات بسرعة قبل أن تتسبب في حدوث وقت توقف أو مشكلات أخرى.