المستوى: متوسّط — يفترض معرفة أساسية ببايثون وسطر الأوامر.
وقت القراءة: نحو 7 دقائق.
هتحتاج: جهاز ماك بمعالج Apple Silicon، ونسخة PyTorch مدعومة من حزم الأنوية المنشورة (عادةً آخر إصدارين)، وأحدث نسخة من transformers من الفرع الرئيسي.
صيغة GGUF التي طوّرها فريق llama.cpp هي الأكثر انتشارًا لتشغيل النماذج محليًا، وتعتمد عليها أدوات مثل Ollama وLM Studio وJan. الجديد أن Hugging Face أضافت دعمًا لتشغيل هذه الملفّات بكفاءة داخل مكتبة transformers نفسها، عبر إعادة استخدام أنوية ggml المكتوبة لمعالجات ماك. التركيز الأوّلي على الاستدلال المحلّي على Apple Silicon، بدءًا من معمارية Qwen3.5.
قبل البدء: اختر مستوى التكميم
ملفّ GGUF الواحد يحمل الأوزان والبيانات الوصفية ومعلومات المُجزّئ. والتكميم (Quantization) يقلّل الحجم على حساب بعض الدقّة. هذه أحجام نموذج Qwen3.5-4B من Unsloth بحسب Hugging Face:
- BF16: 8.42 جيجابايت (المرجع غير المكمّم).
- Q6_K: 3.53 جيجابايت.
- Q5_K_M: 3.14 جيجابايت.
- Q4_K_M: 2.74 جيجابايت، ونقطة البداية المقترحة.
ابدأ بـQ4_K_M، وجرّب Q5_K_M أو Q6_K إذا كانت لديك ذاكرة أكبر. وقيّم الجودة على المهامّ التي تريدها فعلًا.
الخطوة 1: التثبيت
pip install -U "git+https://github.com/huggingface/transformers.git" kernels
الخطوة 2: حمّل النموذج
الإضافة الوحيدة الخاصّة بـGGUF هي تمرير اسم الملفّ عبر gguf_file:
import torch
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)
لا حاجة لإعدادات إضافية: عندما تبقى الأوزان مضغوطة على Metal، تحمّل المكتبة أنوية ggml المتوافقة تلقائيًا. وإذا تعذّر جلب نواة الانتباه، يعود النموذج إلى sdpa مع تحذير. وبدون نواة تكميم متوافقة، يفكّ المحمّل تكميم النموذج ويستهلك ذاكرة أكبر.
الخطوة 3: ولّد النص
messages = [{"role": "user", "content": "Explain why the sky is blue in a few sentences."}]
inputs = tokenizer.apply_chat_template(
messages, tokenize=True, add_generation_prompt=True,
return_dict=True, return_tensors="pt",
).to(model.device)
with torch.inference_mode():
outputs = model.generate(**inputs, max_new_tokens=256)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
الخطوة 4: شغّله كخادم
يمكنك تشغيل النقطة نفسها كخادم متوافق مع واجهة OpenAI:
pip install -U "transformers[serving] @ git+https://github.com/huggingface/transformers.git" kernels
transformers serve "unsloth/Qwen3.5-4B-GGUF:Qwen3.5-4B-Q4_K_M.gguf"
ما قبل النقطتين هو المستودع، وما بعدهما اسم الملفّ. ثم أضف في تطبيق مثل Jan مزوّدًا مخصّصًا بعنوان http://localhost:8000/v1 ومعرّف النموذج نفسه. وللنماذج التي تدعم التفكير، استخدم --reasoning off أو --reasoning on.
متى تستخدم هذا بدل llama.cpp؟
تقول Hugging Face صراحة إن llama.cpp يبقى المحرّك الموصى به عندما تكون الأولوية للاستدلال المحلّي الكفء. قيمة الدعم الجديد في أشياء أخرى: فحص الطبقات الداخلية للنموذج المكمّم بأدوات PyTorch، وتقييم النسخ المكمّمة بسير عمل transformers المعتاد، والتحقّق من صحّة تحويل الأوزان، وتجربة أساليب توليد جديدة. ويمكنك أيضًا فكّ التكميم ومتابعة الضبط الدقيق عبر GgufConfig(dequantize=True).
جرّب بنفسك
ثبّت المكتبة، وحمّل نسخة Q4_K_M من Qwen3.5-4B، واطرح عليها سؤالًا بالعربية. ثم جرّب Q6_K على السؤال نفسه وقارن الإجابتين: هل يستحق فرق الجودة الذاكرة الإضافية على جهازك؟
المصادر: Hugging Face — 2026-09-22



