→ العودة إلى المدونة
Open Source

كميات GGUF الخاصة ب llama.cpp في Transformers: كيفية التحقق من المسار المعبأ على Apple Silicon

يمكن ل Hugging Face Transformers الآن استخدام كميات GGUF بأسلوب llama.cpp عبر أنوية ggml Metal على Apple Silicon، لكن نجاح التحميل ليس دليلا على التنفيذ المعبأ. يقدم هذا الدليل للمشغلين خريطة تحقق عملية للفصل بين مسارات GGUF المعبأة وبين مسارات إزالة التكميم والرجوع في الانتباه.

بقلم Hamza Diaz
22 سبتمبر 202610 دقيقة قراءة15 مشاهدة

قد يبدو ملف GGUF مطمئنا وبسيطا في سير عمل Transformers. تحمل أثرا، وتوجه التشغيل إلى Apple Silicon، وتستدعي التوليد من كود Python مألوف. يبدأ السؤال الحقيقي بعد ذلك. هل بقي النموذج على مسار منخفض البتات المعبأ، أم أن جزءا من المكدس رجع إلى مسار آخر ووسع الذاكرة بهدوء خلف واجهة API نفسها؟

لهذا السبب يستحق مسار كميات GGUF الخاصة ب llama.cpp الجديد في Transformers الانتباه. أعلنت Hugging Face عن التكامل في 22 سبتمبر 2026: يمكن للكميات المتوافقة من GGUF أن تعمل عبر أنوية ggml Metal من داخل Transformers. هذه ليست مقالة أخرى عن تسمية التكميم. وهي أيضا ليست دليلا على أن كل ملف GGUF يتصرف الآن مثل بيئة تشغيل محلية خفيفة داخل PyTorch. إنها تطور أضيق وأكثر فائدة: يمكن للفرق التي تستخدم Transformers بالفعل اختبار مسار تنفيذ معبأ، بشرط أن تتحقق من المسار الذي تعمل عليه فعلا.

ما الذي تغير

كان لدى Transformers دعم ل GGUF قبل هذا الإعلان. تصف الوثائق مسارا يمكنه استيراد أوزان GGUF عبر GgufConfig(dequantize=True). لهذا المسار مكانه. إذا احتاج الفريق إلى موترات عادية بدقة أعلى للتوافق أو لسير عمل التدريب، فإن إزالة التكميم اختيار معقول. لكنه ليس الشيء نفسه مثل إبقاء الأوزان معبأة أثناء التوليد. للاطلاع على خلفية حول سبب أهمية تفاصيل التخطيط، راجع دليل Optijara إلى ترحيل تخطيط GGUF لكل موتر.

يسمح المسار الجديد لأوزان GGUF المكممة والمتوافقة بأن تبقى معبأة بينما يستدعي Transformers أنوية ggml Metal في بيئة Apple Silicon مدعومة. هذا مهم لأن كثيرا من الفرق بنت كود التقييم، وسير عمل التقسيم إلى رموز، وأغلفة النماذج، وتجارب الخدمة حول Transformers. نقل كل اختبار إلى بيئة تشغيل منفصلة يمكن أن يبطئ المقارنة الصادقة. يمنح هذا التكامل تلك الفرق طريقة لاختبار سلوك GGUF المعبأ من دون مغادرة سير عمل Python الحالي.

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

هذا أيضا لا يجعل Transformers بديلا مباشرا ل llama.cpp. يظل llama.cpp بيئة تشغيل مخصصة للاستدلال المحلي، وقد يبقى الاختيار الأفضل لكثير من أنماط النشر. التكامل الجديد جسر لفئة محددة من سير العمل، وليس ادعاء بالاستبدال.

ينبغي التعامل مع حدود الدعم كجزء من الميزة. يتطلب الإعلان استخدام فرع Transformers الرئيسي حتى الإصدار التالي، و Apple Silicon مع MPS، وإصدارات PyTorch وأنوية منشورة ومتوافقة. يغطي المحمل المعبأ معماريات Qwen3.5 الكثيفة ومعماريات خليط الخبراء، بما في ذلك نقاط تحقق Qwen3.8 المتوافقة. أسماء المعماريات هذه حد للدعم، وليست أمثلة على تغطية عامة. لا تعمم من ذلك إلى كل معمارية GGUF أو جهاز أو بطاقة نموذج أو نمط بيانات.

لماذا يهم GGUF المعبأ

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

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

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

خريطة التحقق من المسار المعبأ

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

طبقة الخريطةما يجب التحقق منهالدليل المطلوب الاحتفاظ بهقرار المشغل
الجهازتوفر Apple Silicon مع MPS واختيارهالعتاد، نظام التشغيل، فحص جهاز PyTorch، ملاحظات التشغيلتابع فقط إذا كان المسار المستهدف هو MPS فعلا
المعماريةعائلة النموذج ضمن المجموعة المدعومة الموثقةمعرف النموذج، المراجعة الدقيقة، ملاحظة المصدر، صنف المعماريةلا تستنتج الدعم من الامتداد .gguf
البناءفرع Transformers الرئيسي المتوافق أو مسار الإصدار التالي، مع حزمة PyTorch وأنوية متوافقةإصدارات الحزم، مصدر التثبيت، ملف القفلثبت الإصدارات قبل مقارنة النتائج
مسار الأوزانالمقصود أن يبقى GGUF معبأ، لا أن يوسع عمداالإعداد، غياب dequantize=True عندما يكون السلوك المعبأ مطلوبا، أثر الذاكرةتعامل مع إزالة التكميم كتجربة مختلفة
نواة التكميمتوفر عملية ggml Metal مكممة ومدعومةالتحذيرات، إصدار الحزمة، سلوك الذاكرة تحت توليد مطابقغياب الدعم يمكن أن يوسع الأوزان ويرفع الذاكرة
مسار الانتباهوجود دعم نواة الانتباه، أو فهم مسار الرجوعالتحذيرات، سلوك التوليد، أثر زمن الاستجابةرجوع SDPA يختلف عن توسيع الأوزان
شكل عبء العملالتحكم في طول الطلب، وعدد المخرجات، والحشو، والتجميع، وأخذ العيناتنص معيار القياس، المدخلات، البذرة أو إعدادات أخذ العيناتقارن فقط عمليات تشغيل متطابقة

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

استخدم روتين فحص يلتزم بالحقائق القابلة للملاحظة. سجل الأثر، ومراجعة النموذج، والمقسم إلى رموز، وقالب المحادثة، ونظام التشغيل، والعتاد، وإصدار PyTorch، وإصدار Transformers، وإصدار حزمة الأنوية. أكد MPS. تحقق من دعم المعمارية الموثق. تجنب GgufConfig(dequantize=True) عندما يكون الهدف هو التنفيذ المعبأ. شغل الطلب نفسه وطول المخرج نفسه مع تتبع ذروة الذاكرة. صنف التحذيرات إلى رجوع تكميم، أو رجوع انتباه، أو تنفيذ مدعوم متوقع.

مسبار تحميل أدنى

يستخدم الإعلان نمط التحميل هذا. إنه مثال غير منفذ هنا، وليس معيار قياس من Optijara. ثبت إصدار الفرع الرئيسي الموثق في بيئة معزولة، ثم سجل الالتزام الدقيق وإصدارات الحزم المتوافقة قبل الاختبار.

from transformers import AutoModelForCausalLM, AutoTokenizer

model_id = "unsloth/Qwen3.5-4B-GGUF"
filename = "Qwen3.5-4B-Q4_K_M.gguf"
tokenizer = AutoTokenizer.from_pretrained(model_id, gguf_file=filename)
model = AutoModelForCausalLM.from_pretrained(model_id, gguf_file=filename)

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

نموذج تفرع المحمل

flowchart TD A[اختيار أثر GGUF] --> B{هل المعمارية مدعومة؟} B -->|لا| X[استخدم بيئة تشغيل أخرى أو مسار توافق منزوع التكميم] B -->|نعم| C{هل الهدف Apple Silicon MPS؟} C -->|لا| Y[لا تفترض مسار Metal معبأ] C -->|نعم| D{هل بناء Transformers و PyTorch والأنوية متوافق؟} D -->|لا| Z[ثبت أو حدث قبل الاختبار] D -->|نعم| E{هل النية معبأة؟} E -->|dequantize true| F[أوزان موسعة للتوافق أو التدريب] E -->|packed intent| G{هل نواة ggml Metal المكممة متوفرة؟} G -->|لا| H[خطر رجوع الأوزان، قس الذاكرة] G -->|نعم| I[عمليات أوزان مكممة ومعبأة] I --> J{هل نواة الانتباه متوفرة؟} J -->|لا| K[رجوع انتباه مثل SDPA، صنفه على نحو منفصل] J -->|نعم| L[مسار توليد مدعوم] K --> M[قس زمن الاستجابة والذاكرة وسلوك المخرج] L --> M

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

يستحق التجميع والحشو عناية خاصة. بالنسبة إلى مدخلات فك الترميز غير المحشوة والمدعومة، يزيل تحسين التوليد قناع حشو كله آحاد في وقت مبكر؛ ومع ذلك يبقى الانتباه السببي محفوظا. لا تستطيع الدفعات المحشوة استخدام ذلك الاختصار. يظل توسيع العمل إلى generate_batch على MPS عملا مستقبليا في الإعلان. في المسارات المدعومة، تتداخل فحوص الإيقاف المؤجلة مع جدولة CPU وعمل GPU وتزيل أي خطوة إضافية من النتيجة المرجعة؛ لكنها لا تتجاهل شروط الإيقاف.

معيار قياس من دون خداع نفسك

تبلغ Hugging Face عن قياساتها على M2 Max بذاكرة 32GB، و macOS 26.6، و PyTorch 2.12.1، و kernels 0.17.0. تعامل مع هذه كشروط مصدرية، لا كنتائج Optijara. لم تشغل Optijara معيار قياس لهذا السير. هذه المقالة خطة تحقق، وليست ادعاء أداء.

تحذير معيار القياس ليس حاشية. متوسط llama-bench tg128 لفك الترميز فقط عبر ثلاث تكرارات من دون معالجة الطلب ليس البروتوكول نفسه كمثال Transformers generate مع طلب من 12 رمزا، ومرحلة prefill مشمولة، وأفضل نتيجة من ثلاث عمليات تشغيل دافئة.

عنصر ضبط معيار القياسلماذا يهمما يجب تسجيله
الأثر والمراجعة نفسيهمايمنع المقارنات بين أوزان مختلفةمعرف النموذج، تجزئة المراجعة، ملف GGUF
المقسم إلى رموز والقالب نفسيهمايمنع انجراف صيغة الطلبإصدار المقسم إلى رموز، قالب المحادثة
الطلب وعدد المخرجات نفسيهمايفصل prefill عن فك الترميزرموز الإدخال، حد الرموز المولدة
إعدادات أخذ العينات نفسهايبقي مسار المخرج قابلا للمقارنةدرجة الحرارة، top-p، البذرة إن استخدمت
العتاد ونظام التشغيل نفسيهمايزيل الالتباس على مستوى الجهازالجهاز، الذاكرة، إصدار نظام التشغيل
إصدارات الحزم نفسهاتوفر النواة يعتمد على البنىPyTorch، Transformers، kernels
فصل المراحل الدافئة والباردةتنزيل النواة والتحميل يمكن أن يهيمن على التشغيل الأولزمن التحميل البارد، زمن الاستجابة بعد التسخين

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

أخطاء شائعة

الخطأ الأول هو اعتبار أي تحميل ناجح ل GGUF دليلا على التنفيذ المعبأ. ليس دليلا. إنه بداية الفحص.

الثاني هو افتراض أن دعم Apple Silicon يعني دعما عالميا. المسار الأولي موجه إلى MPS ومقيد بالمعمارية. لا تثبت تسمية بطاقة النموذج دعم أنوية متعددة الوسائط، والأمثلة موجهة إلى توليد النص.

الثالث هو استخدام dequantize=True مع توقع سلوك ذاكرة معبأ. هذا العلم يغير التجربة. قد يكون هذا بالضبط ما تريده لعمل التوافق، لكن لا ينبغي خلطه في معيار قياس لمسار معبأ.

الرابع هو مقارنة أرقام llama.cpp و Transformers من دون مطابقة البروتوكول. معيار فك ترميز فقط واستدعاء generate مع prefill يجيبان عن سؤالين مختلفين.

الخامس هو تقديم ادعاءات إنتاجية مبكرا جدا. يمكن لمقتطف أن يثبت الجدوى. لكنه لا يثبت تكافؤ الجودة أو وقت التشغيل أو خفض التكلفة أو زمن الاستجابة تحت حركة حقيقية. اكتب سجل قرار معماري يختار بين llama.cpp و GGUF المعبأ في Transformers وإزالة التكميم الصريحة. ضمّن مكدس الخدمة، ومتطلبات المقسم إلى رموز، واحتياجات المحولات، والمراقبة، ودعم الحزم، وخطة الرجوع.

دليل التبني

اختبر الآن إذا كانت لديك أجهزة تقييم Apple Silicon، ونماذج توليد نص مدعومة، وسير عمل قائم على Transformers، وقدرة على تثبيت إصدارات الحزم. هذا مناسب للبحث والنمذجة الأولية والتقييم الداخلي حيث يمكن عزل اعتماد على الفرع الرئيسي عن الإنتاج.

انتظر إذا لم تكن معمارية النموذج موثقة كمدعومة، أو لم يكن الجهاز المستهدف MPS، أو كان عبء العمل يعتمد على سلوك متعدد الوسائط، أو كان شكل التجميع والحشو محوريا للأداء. انتظر أيضا إذا كانت مؤسستك لا تقبل إلا الحزم المستقرة المنشورة.

تجنب ثلاث خطوات تحديدا: الادعاء بأن llama.cpp قد استبدل، ونشر ادعاءات سرعة أو تكلفة قبل القياس المحلي، وتغيير الإعدادات الافتراضية للإنتاج من دون مسار رجوع. قد يكون المسار المعبأ ذا قيمة. المسار المقاس هو الذي يهم.

{"framework":"Packed-Path Verification Map","supportedDevice":"Apple Silicon with MPS when documented package and model constraints are met","supportedRuntimePath":"Transformers calling ggml Metal kernels for compatible packed GGUF quantized operations","fallbackRisks":["intentional dequantization","missing quantization kernel","attention fallback","unsupported architecture","batching or padding sensitivity"],"mustMeasure":["peak memory","prefill","decode","time to first token","streamed p95","cold load","padded versus unpadded behavior"],"safeInternalLinks":["/en/blog/gguf-per-tensor-layout-maps-quant-recipe-migration-2026","/en/blog/hugging-face-tokenizers-v1-same-ids-migration-matrix-2026"],"decisionOwner":"runtime or AI platform owner"}

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

النقاط الرئيسية

  • 1الخبر هو تنفيذ GGUF المعبأ عبر أنوية ggml Metal في Transformers، وليس تحميل ملفات GGUF لأول مرة.
  • 2نجاح تحميل `.gguf` لا يثبت التنفيذ منخفض البتات المعبأ، لأن إزالة التكميم قد تكون مقصودة أو مدفوعة برجوع.
  • 3رجوع التكميم ورجوع الانتباه فرعان منفصلان لهما آثار مختلفة على الذاكرة وزمن الاستجابة.
  • 4لا ينبغي تعميم دعم Apple Silicon MPS على كل جهاز أو معمارية أو نمط بيانات أو نمط تجميع.
  • 5يجب أن يطابق معيار القياس العادل الأثر، والمراجعة، والمقسم إلى رموز، والطلب، وطول المخرج، وأخذ العينات، والعتاد، وإصدارات الحزم.

الخلاصة

التنفيذ المعبأ هو القصة، لكن التحقق هو العمل. بالنسبة إلى فرق الذكاء الاصطناعي المحلي على Apple Silicon، يعد تكامل GGUF في Transformers مفيدا لأنه قد يسمح للنماذج المكممة المدعومة بأن تبقى معبأة داخل سير عمل PyTorch المألوف. ما زال المسار مقيدا بنضج الإصدار، وتوافق الحزم، ودعم النموذج، وشكل عبء العمل، وسلوك الرجوع. وثق مسار وقت التشغيل، وقسه محليا، ثم قرر ما إذا كان GGUF المعبأ في Transformers أو llama.cpp أو إزالة التكميم الصريحة يناسب المهمة.

الأسئلة الشائعة

هل يحل Hugging Face Transformers الآن محل llama.cpp لنماذج GGUF؟

لا. يسمح التكامل ل Transformers باستدعاء أنوية ggml Metal لمسارات GGUF المعبأة والمدعومة على Apple Silicon، بينما يظل llama.cpp بيئة تشغيل محلية مخصصة وقد يبقى الاختيار الصحيح لكثير من عمليات النشر.

هل هذه أول مرة يستطيع فيها Transformers تحميل ملفات GGUF؟

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

كيف تستطيع الفرق معرفة ما إذا كانت تستخدم مسار GGUF المعبأ أو تزيل تكميم الأوزان؟

ينبغي لها تثبيت الإصدارات، والتحقق من MPS وحالة دعم المعمارية، وتجنب dequantize=True المقصود عندما يكون السلوك المعبأ مطلوبا، وفصل تحذيرات نواة التكميم عن تحذيرات نواة الانتباه، ومقارنة ذروة الذاكرة تحت طلبات وأطوال مخرجات متطابقة.

هل يضمن ملف GGUF صغير ذاكرة تشغيل منخفضة؟

لا. يمكن أن تشمل ذاكرة وقت التشغيل أوزانا موسعة أثناء الرجوع، إضافة إلى KV cache وذاكرة مساحة العمل والتفعيلات وطول السياق وشكل الدفعة وإعدادات التوليد. بايتات الملف ليست ذروة الذاكرة.

هل يمكن للفرق قياس GGUF المعبأ في Transformers مباشرة مقابل أرقام llama.cpp؟

فقط بحذر. قد تستخدم قياسات llama-bench المنشورة لفك الترميز فقط وأمثلة generate في Transformers بروتوكولات مختلفة، لذلك ينبغي للاختبار العادل مطابقة الأثر، والمراجعة، والمقسم إلى رموز، والطلب، وعدد المخرجات، وأخذ العينات، والتسخين، والعتاد، والمقاييس.

المصادر

شارك هذا المقال

Hamza Diaz

بقلم

Hamza Diaz

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