Transformers documentation

Metal

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

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"])

خيارات التهيئة

معاملافتراضيالوصف
bits4عرض البتات لاختزال الأوزان (2 أو 4 أو 8)
group_size64عدد العناصر في مجموعة التكميم
modules_to_not_convertNoneقائمة بأسماء الوحدات التي يجب إبقاؤها بدقة كاملة
dequantizeFalseفرض فك التكميم إلى float (لأجهزة غير MPS)
Update on GitHub