Transformers documentation
Metal
Metal
تنفّذ عملية التكميم على Metal تكميمًا خطيًا (affine) على أجهزة Apple Silicon (MPS) باستخدام نواة Metal مستضافة على Hugging Face Hub (kernels-community/mlx-quantization-metal-kernels). تنحدر هذه النوى من إطار MLX وتُترجم عبر مكتبة kernels.
تُحزم الأوزان في متجهات من نوع uint32 مع مقاييس وانحيازات لكل مجموعة، ويستخدم مسار الأمامي نواة Metal مدمجة لفك التكميم وضرب المصفوفات (affine_qmm_t). وهذا يحافظ على انخفاض استهلاك الذاكرة أثناء تشغيل الاستدلال بالكامل على وحدة معالجة الرسوميات دون أي ذهاب وإياب مع وحدة المعالجة المركزية.
العرضات البتية المدعومة هي 2 و4 و8. يمكن ضبط حجم المجموعة (الافتراضي 64).
المتطلبات
- ماك بـ Apple Silicon (M1 / M2 / M3 / M4) مع دعم MPS
- حزمة
kernels:
pip install kernels
تُحمَّل نوى Metal تلقائيًا من Hub عند الاستخدام الأول — دون الحاجة إلى تجميع يدوي.
Quantize on-the-fly
قم بتحميل أي نموذج وكمّته أثناء التحميل عن طريق تمرير MetalConfig. يتم استبدال جميع طبقات nn.Linear المؤهلة بنسخ كمّية منها.
from transformers import AutoModelForCausalLM, AutoTokenizer, MetalConfig
quantization_config = MetalConfig(bits=4, group_size=64)
model = AutoModelForCausalLM.from_pretrained(
"meta-llama/Llama-3.2-1B",
device_map="mps",
quantization_config=quantization_config,
)
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-3.2-1B")
inputs = tokenizer("Apple Silicon is", return_tensors="pt").to("mps")
output = model.generate(**inputs, max_new_tokens=50)
print(tokenizer.decode(output[0], skip_special_tokens=True))تحميل نموذج مُكمَّم مسبقًا
إذا كان نقطة التفتيش تحتوي بالفعل على أوزان مُكمّمة (weight كـ uint32 مُجمّعة، scales، qbiases)، يتم تحميلها مباشرةً — دون الحاجة إلى إعادة التكميم.
from transformers import AutoModelForCausalLM, MetalConfig
model = AutoModelForCausalLM.from_pretrained(
"your-org/model-metal-4bit",
device_map="mps",
)إلغاء التكميم
على الأجهزة التي لا تدعم MPS، يتم إلغاء تكميم نقطة التفتيش المُكمّمة مسبقًا تلقائيًا وإعادتها إلى نوع float حتى يظل النموذج قابلاً للاستخدام على وحدة المعالجة المركزية (CPU) أو CUDA. كما يمكنك فرض هذا السلوك بشكل صريح:
from transformers import AutoModelForCausalLM, MetalConfig
config = MetalConfig(dequantize=True)
model = AutoModelForCausalLM.from_pretrained(
"your-org/model-metal-4bit",
quantization_config=config,
device_map="cpu",
)استبعاد الطبقات
يمكن استبعاد طبقات معينة (مثل lm_head) من التكميم عبر modules_to_not_convert:
config = MetalConfig(bits=4, group_size=64, modules_to_not_convert=["lm_head"])خيارات التهيئة
| معامل | افتراضي | الوصف |
|---|---|---|
bits | 4 | عرض البتات لاختزال الأوزان (2 أو 4 أو 8) |
group_size | 64 | عدد العناصر في مجموعة التكميم |
modules_to_not_convert | None | قائمة بأسماء الوحدات التي يجب إبقاؤها بدقة كاملة |
dequantize | False | فرض فك التكميم إلى float (لأجهزة غير MPS) |