Ultra Techالنسخة الإنجليزية

llama.cpp

llama.cpp 0.7.0 ينقل الخادم إلى المنفذ 9931، ويضيف ذاكرة مؤقّتة على البطاقة الرسومية لخبراء MoE المحفوظين في ذاكرة الجهاز

فُحص آلياً على صفحة llama.cpp في .

ينقل الإصدار llama.cpp 0.7.0 المنفذ الذي يستمع عليه llama-server افتراضياً من 8080 إلى 9931. والمنفذ (port) هو الرقم الذي يأتي بعد اسم الجهاز في العنوان، كما فيlocalhost:8080، وعليه تتّصل برامجك بالخادم. ويضيف الإصدار أيضاً ذاكرة مؤقّتة على البطاقة الرسومية لخبراء نماذج MoE المحفوظين في ذاكرة الجهاز، تقدّر الصفحة أنّها تسرّع توليد النصّ بما يصل إلى نحو 2.2 مرّة حين يكون الخبراء منقولين خارج البطاقة ، إلى جانب طرق جديدة لفكّ الترميز التخميني وقائمة طويلة من النماذج الجديدة. وتؤرّخه صفحة الإصدار في 15 تشرين الأول الساعة 17:13. إن كان شيء على جهازك يتحدّث إلى llama-server علىlocalhost:8080، فراجعه قبل أن تحدّث؛ وإن كنت تشغّل نموذج MoE كبيراً على بطاقة صغيرة، فهذا الإصدار يستحقّ أن تجرّبه.

ما الذي تغيّر

صار الخادم يستمع افتراضياً على المنفذ 9931 بدلاً من 8080. والاستثناء صور Docker — أي الحزم الجاهزة التي تشغّل الخادم داخل حاوية معزولة عن بقيّة جهازك: داخل الحاوية يبقى المنفذ 8080.

ونموذج مزيج الخبراء (MoE، اختصار Mixture of Experts) مبنيّ من كتل كثيرة اسمها «الخبراء»، ولا تمرّ كلّ كلمة إلّا على عدد قليل منها. فإن لم يتّسع النموذج كلّه في ذاكرة البطاقة الرسومية نفسها (VRAM)، فيمكن أن يبقى الخبراء في ذاكرة الجهاز الرئيسية (RAM). والجديد في 0.7.0 ذاكرة مؤقّتة لهؤلاء الخبراء على البطاقة، تضبطها بالخيار --moe-cache-mib: يعمل الخبراء على البطاقة الرسومية من ذاكرة مؤقّتة من نوع LRU — أي ذاكرة تحتفظ بما استُعمل مؤخّراً وتُخرج ما طال إهماله — وتقدّر الصفحة الكسب بتوليد أسرع بما يصل إلى 2.2 مرّة. وصارت هذه الذاكرة المؤقّتة مشتركة بين أكثر من بطاقة رسومية.

ونماذج التضمين — وهي التي تحوّل النصّ إلى متّجه من الأرقام يُستعمل في البحث — صارت تتخطّى ذاكرة الـ logits ورأس النموذج اللغوي (LM head) حين يكون التجميع (pooling) مفعّلاً. والـ logits هي الدرجات التي يعطيها النموذج لكلّ كلمة محتملة تالية، ولا حاجة إليها حين تريد متّجهاً لا كلمة؛ والتجميع أن تُدمج متّجهات كلمات النصّ في متّجه واحد يمثّله كلّه. وتقول الصفحة إنّ هذا يعني استهلاكاً من ذاكرة البطاقة أقلّ بما يصل إلى 10 مرّات.

وفي فكّ الترميز التخميني (speculative decoding) — أن يقترح نموذج صغير الكلمات التالية ثمّ يراجعها النموذج الكبير دفعة واحدة، فيخرج النصّ أسرع — طريقتان جديدتان: LiliCorr، التي تختار المرشّحات بنموذج مسوِّد صغير من نوع transformer فوق DFlash ، وMTP لنموذج GLM5-Next، مع مسار محسَّن للانتباه المتناثر (sparse attention). وهناك خيار جديد،--spec-draft-n-ubatch، يحدّد حجم دفعة النموذج المسوِّد على حدة، ليوفّر من ذاكرة البطاقة.

وفي النماذج الجديدة: K2 Horizon بنسختيه الكثيفة وMoVA ؛ وPrism Bonsai 2 27B، وهو نموذج ثلاثيّ القيم (ternary)، أي أنّ كلّ وزن من أوزانه يأخذ واحدة من ثلاث قيم فقط ؛ وEmbeddingGemma-2، الذي يحوّل النصّ والصور والصوت إلى متّجهات ؛ ونماذج القرار LiquidAI d1-3B وd1-omni-600M وvLLM decision 2 وvLLM d3 وpplx-decider ، وقد مُدّت إليها واجهة /v1/systemone في الخادم ؛ وMiniCPM-V 4.7، وهو نموذج متعدّد الوسائط ؛ وNemotron Super 3.5 VL وNemotron Bolt 74B A9B ؛ وبنية maion-coder.

وفي داخل الخادم، أُعيد بناء طبقة المحادثة حول common_chat_session، وصار مُخرَج المحادثة المنسَّق مصفوفة من الأجزاء بدلاً من نصّ واحد. وحصلت واجهة الويب المدمجة على مدير للنماذج: جدول واحد لكلّ النماذج التي يقدّمها الخادم، تتفرّع منه صيغ تكميمها، مع بحث وتصفية وترتيب ومفضّلة. وانتقلت ggml إلى v0.27.0.

ما كان قبل ذلك

تعرض الصفحة كلّ ما سبق على أنّه التغييرات منذ v0.6.0. وحتّى هذا الإصدار، كان llama-server يستمع افتراضياً على 8080 ، وكان مُخرَج المحادثة المنسَّق نصّاً واحداً.

ما معناه لك

ابدأ بالمنفذ. إن كان سكربت، أو إشارة مرجعية في متصفّحك، أو إضافة في محرّرك، أو تطبيق آخر، يصل إلى llama-server على localhost:8080، وأنت تشغّل الخادم دون أن تختار له منفذاً، فهذا العنوان لن يجد شيئاً بعد التحديث: الخادم صار على 9931. فإمّا أن توجّه برامجك إلى 9931، وإمّا أن تعيد المنفذ إلى 8080 حين تشغّل الخادم. وإن كنت تشغّله من إحدى صور Docker، فالمنفذ داخل الحاوية باقٍ على 8080 ، فلا يمسّ هذا التغيير إعداداً يصل إلى منفذ الحاوية.

وإن كنت تشغّل نموذج MoE كبيراً على بطاقة متواضعة، وجزء منه في ذاكرة الجهاز، فجرّب --moe-cache-mib. ورقم الـ 2.2 مرّة حدّ أعلى تذكره الصفحة، للحالة التي يكون فيها الخبراء منقولين خارج البطاقة ؛ فإن كان نموذجك يتّسع كلّه في ذاكرة البطاقة، فلا عمل لهذه الذاكرة المؤقّتة عندك. والصفحة لا تقول كم تجعل حجمها، فجرّب أكثر من حجم، وقِس عدد الكلمات في الثانية قبل التحديث وبعده. أمّا كم ذاكرة يحتاج النموذج، ولماذا تهمّ سرعة تلك الذاكرة، فيشرحه دليلناأيّ جهاز يشغّل نموذجاً محلّيّاً.

وإن كنت تقدّم نموذج تضمين للبحث، فحدّث وانظر كم يأخذ من ذاكرة البطاقة الآن: أقلّ بما يصل إلى 10 مرّات حين يكون التجميع مفعّلاً. وإن كنت تستعمل نموذجاً مسوِّداً وذاكرة بطاقتك ضيّقة، فالخيار الذي يستحقّ نظرك هو--spec-draft-n-ubatch.

وإن كانت شيفرتك تقرأ مُخرَج المحادثة المنسَّق من الخادم، فانتبه إلى أنّه صار مصفوفة أجزاء بعد أن كان نصّاً واحداً. والصفحة تضع هذا التغيير بين تغييرات الواجهة البرمجية ، ولا تقول أيّ ردود HTTP يصل إليها، إن وصل إلى أيّ منها؛ فجرّب شيفرتك على 0.7.0 قبل أن تحدّث جهازاً تعتمد عليه.

المصدر

صفحة الإصدار على GitHub: llama.cpp v0.7.0.