Llama-Swap: حل المشكلة الأكثر إزعاجاً في نماذج اللغة المحلية

BBetter Stack
Computing/SoftwareConsumer ElectronicsInternet Technology

Transcript

00:00:00يعمل إعداد النموذج المحلي لدينا بشكل رائع، حتى نحتاج إلى نموذج مختلف.
00:00:04الآن نقوم بإيقاف خادم llama، وتغيير المنافذ، وتحديث عنوان URL الأساسي لـ OpenAI، والانتظار
00:00:10لإعادة التحميل، ونأمل فقط ألا يحدث أي خلل.
00:00:13كل ذلك لأن نموذج البرمجة لدينا ضخم جداً للدردشة السريعة، ونموذجك الصغير غبي جداً
00:00:18للبرمجة الحقيقية.
00:00:19LlamaSwap يصلح ذلك.
00:00:21نقطة نهاية واحدة، نماذج متعددة، تبديل تلقائي، وأدواتك لا تعرف أن شيئاً قد تغير.
00:00:26سأريك كيفية إعداد هذا في الدقائق القليلة القادمة.
00:00:34معظم مطوري نماذج اللغة المحلية يصطدمون في النهاية بنفس العائق.
00:00:37في البداية تستخدم شيئاً مريحاً، مثل llama أو lmstudio، شيئاً يعمل ببساطة.
00:00:44لأنه يعمل بالفعل.
00:00:45وبصراحة هذا رائع، لأنها أصبحت أفضل بكثير.
00:00:48لكن بعد ذلك نبدأ في الرغبة في مزيد من التحكم.
00:00:51تريد أعلام llama CPP دقيقة، وتوزيع طبقات GPU، وربما حجم السياق، وخلفيات مخصصة، أو
00:00:59حتى نماذج تجريبية.
00:01:01لذا تقترب أكثر من خادم llama الخام، وهذا يمنحك شعوراً رائعاً.
00:01:06إلى أن تدرك أنك استبدلت مشكلة بأخرى.
00:01:09الآن أنت تفعل هذا.
00:01:11توقف خادم llama، ثم تبدأ QuinCoder، ثم بعد خمس دقائق، ماذا
00:01:16تفعل؟
00:01:17أنت توقف خادم llama الخاص بك.
00:01:18أنت تتنقل بين هذه النماذج.
00:01:20وفي كل مرة تفعل ذلك، شيء ما ينتظر، أو يعيد الاتصال، أو يفشل، أو يستخدم النموذج الخاطئ
00:01:26بصمت.
00:01:27لذا ما تحاول فعله حقاً هو الاحتفاظ بنقطة نهاية واحدة في الواجهة، وتبديل النماذج التي تريدها
00:01:31خلفها.
00:01:33هذه هي الفجوة التي يسدها llama swap.
00:01:36إذا كنت تستمتع بأدوات البرمجة التي تسرع سير عملك، فتأكد من الاشتراك.
00:01:39لدينا فيديوهات تصدر طوال الوقت.
00:01:41الآن دعني أريك كيف يعمل كل هذا، قبل أن نتحدث عنه.
00:01:44حالياً يعمل llama swap محلياً على منفذ واحد.
00:01:48العميل الخاص بي يعرف فقط عنوان URL الأساسي هذا، لا يوجد عنوان لـ Quin وآخر لـ small LM، وآخر
00:01:55للتضمينات (embeddings)، بل باب أمامي واحد فقط.
00:01:58إليك إعداد بسيط يحتوي على نموذجين.
00:02:02أحدهما QuinCoder، والآخر small LM2.
00:02:06وكل واحد له أمره الخاص.
00:02:09وكل واحد له ملف النموذج الخاص به.
00:02:11وكل واحد له حجم السياق الخاص به.
00:02:14والفرق بينهما هو أن كل واحد منهما لديه أيضاً وقت بقاء (TTL) خاص به.
00:02:19الآن سأطلب شيئاً من نموذج البرمجة.
00:02:22أرسل طلباً عادياً للدردشة بأسلوب OpenAI.
00:02:25يقول حقل النموذج QuinCoder، حسناً، رائع.
00:02:30دعونا نراقب السجلات.
00:02:32ينتظر حتى تصبح الخلفية جاهزة، ثم يرسل الطلب.
00:02:36الآن إليك الشيء الذي لا يحدث.
00:02:39أنا لا أقوم بتغيير عنوان URL.
00:02:41أنا لا أعيد تشغيل open web UI.
00:02:43أنا لا أعدل هذا في cursor.
00:02:46أنا أقوم بتغيير حقل واحد فقط.
00:02:48لذا ينتقل النموذج من QuinCoder إلى small LM2، نفس نقطة النهاية، نفس العميل، نموذج مختلف.
00:02:55وعندما يظل النموذج خاملاً بعد وقت البقاء (TTL)، يمكن لـ llama swap إلغاء تحميله لتعود ذاكرة VRAM.
00:02:59هذه هي الحيلة كلها.
00:03:00تعتقد أدواتك أنها تتحدث إلى واجهة برمجة تطبيقات واحدة.
00:03:02بينما يتولى llama swap الجزء الفوضوي خلف الكواليس للتحكم حقاً في كيفية سير الأمور.
00:03:04حسناً، عظيم.
00:03:09إذن ما هو llama swap؟
00:03:10لقد قمت بعرضه هنا، أليس كذلك؟
00:03:11فكر فيه كمركز لنماذجك المحلية.
00:03:12تطبيقاتك لا تتحدث مباشرة مع كل خادم نموذج.
00:03:13بل تتحدث إلى llama swap.
00:03:16ثم ينظر llama swap في حقل النموذج ويقرر ما يجب أن يحدث.
00:03:19إذا كان النموذج يعمل بالفعل، فسيقوم بتوجيه الطلب.
00:03:21إذا لم يكن النموذج يعمل، فسيقوم ببدء تشغيله.
00:03:25وإذا كان هناك نموذج آخر يجب أن يفسح المجال، فسيقوم بإيقافه.
00:03:28ثم يتلقى العميل استجابة طبيعية.
00:03:31لذلك لا داعي لتغيير عناوين URL الأساسية كل 10 دقائق.
00:03:35هناك ملف تنفيذي واحد، ملف إعداد واحد، ونقطة نهاية API مستقرة واحدة.
00:03:38إنه مبني بلغة Go ويستخدم إعدادات YAML.
00:03:41يعمل كوكيل (proxy) لواجهات برمجة التطبيقات المتوافقة مع OpenAI وAnthropic ويمكنه
00:03:45أن يعمل أمام خلفيات مثل llama cpp وvllm وtabby API وغيرها.
00:03:48إذا كنت محظوظاً، فقد يكون لديك 10 أو 20 نموذجاً على القرص، ولكن ذاكرة VRAM تكفي فقط
00:03:53لتحميل نموذج أو اثنين.
00:03:59وقت البقاء (TTL) يساعد في ذلك.
00:04:05إذا ظل النموذج خاملاً لفترة كافية، يمكن لـ llama swap إلغاء تحميله.
00:04:06بدلاً من أن تظل وحدة معالجة الرسومات (GPU) محملة بنموذج لا نستخدمه بالفعل، يمكنه
00:04:08تفريغ تلك الذاكرة للطلب التالي.
00:04:11من قبل، كان عليك تذكر ما الذي يعمل حالياً.
00:04:17الآن الإعداد يتذكر ذلك بدلاً عنك.
00:04:20في هذه المرحلة، السؤال البديهي هو لماذا لا نكتفي باستخدام llama أو LM Studios أو خادم
00:04:23llama العادي؟
00:04:25والإجابة هي، حسناً، قد تفعل ذلك.
00:04:31Llama swap لا يحل محل هذه الأدوات دائماً.
00:04:32إنه يحل مشكلة محددة للغاية.
00:04:35مقارنة بـ llama، فإن llama swap ليس متجراً للنماذج أو أداة تنزيل أو واجهة سطر أوامر
00:04:37سهلة للمبتدئين.
00:04:40ليس هذا هو الهدف هنا.
00:04:47الهدف هو التحكم.
00:04:49أنت تحضر إصدارات llama cpp الخاصة بك، وتحضر أعلامك الخاصة، وتحدد بالضبط كيفية تشغيل
00:04:50كل نموذج.
00:04:55مقارنة بـ LM Studio، فإن llama swap يركز أكثر على الخادم، ولا يتطلب واجهة رسومية.
00:04:57إنه يناسب بشكل أفضل جهاز التطوير، أو خادم المختبر المنزلي، أو Docker، أو جهازاً مشتركاً
00:05:02حيث تحتاج الأدوات فقط إلى واجهة برمجة تطبيقات مستقرة.
00:05:07هذا ليس بسهولة تشغيل “llama run llama 3”.
00:05:09أنت بحاجة إلى ملفات النماذج الخاصة بك.
00:05:13تحتاج إلى فهم خلفيتك التقنية.
00:05:15تحتاج إلى كتابة YAML.
00:05:17تحتاج إلى معرفة الأعلام التي تناسب وحدة معالجة الرسومات الخاصة بك.
00:05:19لا يوجد معرض مدمج للنماذج يقوم بتنزيل وتهيئة كل شيء لك.
00:05:22لذا بصراحة، الإعداد مرهق للغاية.
00:05:26ولكن بالنسبة لبعض المطورين، هذا يحل ألماً معيناً.
00:05:29ألم معرفة النموذج الذي تريده بالضبط، ولكن إضاعة الوقت في ربط وإعادة ربط
00:05:32كل شيء من حوله.
00:05:38يستحق التجربة إذا كنت تستخدم أدوات مثل cursor أو continue أو عملاء مخصصين أو نصوصاً محلية.
00:05:39سيكون هذا مفيداً، لكن الإعداد يتطلب جهداً أكبر.
00:05:44إذن هذا هو llama swap.
00:05:47نقطة نهاية API مستقرة واحدة، نماذج محلية متعددة خلفها، تبديل تلقائي، إلغاء تحميل
00:05:49عند الخمول، وتحكم كامل في الخلفية.
00:05:54الفكرة الرئيسية هنا بسيطة.
00:05:56عملاؤك يتوقفون عن الاهتمام بخادم النموذج الذي يعمل بالفعل.
00:05:58Llama swap يتولى كل ذلك نيابة عنهم.
00:06:02إذا كنت تستمتع بأدوات برمجية كهذه، فتأكد من الاشتراك.
00:06:04نراكم في فيديو آخر.
00:06:06نراكم في فيديو آخر.

Key Takeaway

يعالج Llama-Swap تعقيدات إدارة النماذج المحلية عبر توفير نقطة نهاية مستقرة تدير تشغيل وإيقاف وتبديل النماذج وتفريغ ذاكرة VRAM آلياً بناءً على الطلبات الواردة.

Highlights

  • يقوم Llama-Swap بتوحيد نماذج اللغة المحلية المتعددة خلف نقطة نهاية API واحدة متوافقة مع OpenAI وAnthropic.

  • يعمل النظام على تبديل النماذج تلقائياً بناءً على حقل النموذج في طلب API دون الحاجة لتغيير عناوين URL في التطبيقات.

  • تسمح ميزة وقت البقاء (TTL) بإلغاء تحميل النماذج من ذاكرة VRAM تلقائياً عند بقائها خاملة لتوفير الموارد لمهام أخرى.

  • يدعم البرنامج خلفيات تقنية متنوعة تشمل llama.cpp وvllm وTabby API عبر ملف إعداد واحد بتنسيق YAML.

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

Timeline

تحديات إدارة النماذج المحلية المتعددة

  • يتطلب التبديل اليدوي بين النماذج إيقاف الخوادم وتغيير المنافذ وتحديث إعدادات التطبيقات في كل مرة.
  • تفتقر الأدوات البسيطة مثل LM Studio إلى التحكم الدقيق في معلمات التشغيل المتقدمة وتوزيع الذاكرة.
  • يؤدي التبديل المتكرر إلى حدوث أخطاء في الاتصال أو استخدام نماذج خاطئة بشكل غير مقصود.

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

آلية عمل التبديل التلقائي وإدارة الذاكرة

  • يستخدم العميل عنوان URL موحد لجميع النماذج مهما اختلف نوعها أو حجمها.
  • يحدد ملف YAML أوامر التشغيل الخاصة لكل نموذج مع تعيين وقت بقاء محدد لإخلاء الذاكرة.
  • تتعرف الأدوات مثل Cursor أو Open WebUI على النماذج المختلفة من خلال تغيير حقل الاسم فقط في الطلب.

يعمل Llama-Swap كبوابة أمامية تستقبل الطلبات وتراقب السجلات لانتظار جاهزية الخلفية التقنية. عند إرسال طلب لنموذج QuinCoder ثم طلب آخر لنموذج Small LM2، يقوم النظام بتبديل المحرك في الخلفية دون إعادة تشغيل الواجهات الرسومية. تكمن الحيلة التقنية في قدرة النظام على إلغاء تحميل النماذج الخاملة لإعادة ذاكرة VRAM إلى وحدة معالجة الرسومات فور انتهاء مدة TTL المحددة.

البنية التقنية والمقارنة بالأدوات المتاحة

  • البرنامج مبني بلغة Go ويعمل كوكيل (Proxy) بين التطبيقات ومحركات التشغيل المختلفة.
  • يسمح النظام بإدارة عشرات النماذج المخزنة على القرص الصلب رغم محدودية ذاكرة VRAM.
  • يتولى الوكيل اتخاذ قرار تشغيل النموذج أو إيقاف نموذج آخر لافساح المجال بناءً على توفر الموارد.

يعمل Llama-Swap كمركز وسيط يحلل حقل النموذج في كل طلب وارد. إذا كان النموذج المطلوب يعمل مسبقاً يتم توجيه الطلب فوراً، وإذا كان مغلقاً يتم تشغيله آلياً. هذه الطريقة تنهي الحاجة لتذكر النماذج النشطة حالياً وتجعل استهلاك الذاكرة أكثر كفاءة عبر تفريغ النماذج التي لا تستقبل طلبات نشطة.

متطلبات الإعداد وحالات الاستخدام المثالية

  • يتطلب استخدام Llama-Swap خبرة تقنية في كتابة ملفات YAML وفهم أعلام تشغيل المحركات.
  • يفتقر البرنامج إلى واجهة رسومية أو معرض لتحميل النماذج تلقائياً مما يجعله أداة للمحترفين.
  • يناسب النظام بيئات التطوير التي تعتمد على Docker أو خوادم المختبرات المنزلية المشتركة.

لا يعد Llama-Swap بديلاً كاملاً لأدوات مثل Ollama للمبتدئين، بل هو أداة متخصصة لحل ألم التبديل اليدوي. يجب على المستخدم إحضار ملفات النماذج الخاصة به ومعرفة الأعلام التقنية التي تناسب أجهزته. الفائدة الكبرى تظهر عند استخدام أدوات مثل Continue أو نصوص برمجية محلية تتطلب واجهة برمجة تطبيقات مستقرة لا تتغير بتغير النماذج خلفها.

Community Posts

View all posts