Transformers documentation
Metal
Metal
Metal kuantizasyonu, Apple Silicon (MPS) cihazlarında Hugging Face Hub üzerinde barındırılan Metal çekirdeklerini (kernels-community/mlx-quantization-metal-kernels) kullanarak afin kuantizasyon gerçekleştirir. Bu çekirdekler MLX çerçevesinden kaynaklanır ve kernels kütüphanesi aracılığıyla derlenir.
Ağırlıklar, grup başına ölçek ve sapma değerleriyle birlikte uint32 tensörlerine paketlenir ve ileri geçiş, birleştirilmiş dequantization + matmul Metal çekirdeğini (affine_qmm_t) kullanır. Bu, CPU'ya gidip gelme olmadan çıkarımı tamamen GPU üzerinde çalıştırırken bellek kullanımını düşük tutar.
Desteklenen bit genişlikleri 2, 4 ve 8'dir. Grup boyutu yapılandırılabilir (varsayılan 64).
Gereksinimler
- MPS desteğine sahip Apple Silicon Mac (M1 / M2 / M3 / M4)
kernelspaketi:
pip install kernels
Metal çekirdekleri, ilk kullanımda Hub'dan otomatik olarak indirilir — manuel derleme gerekmez.
Uygulama sırasında kuantizasyon
Herhangi bir modeli yükleyin ve MetalConfig geçirerek yükleme sırasında onu kuantize edin. Uygun tüm nn.Linear katmanları, kuantize edilmiş versiyonlarıyla değiştirilir.
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))Önceden niceliklendirilmiş bir model yükleyin
Eğer bir checkpoint zaten quantize edilmiş ağırlıklar içeriyorsa (weight paketlenmiş uint32 olarak, scales, qbiases), bunlar doğrudan yüklenir — yeniden quantize etmeye gerek yoktur.
from transformers import AutoModelForCausalLM, MetalConfig
model = AutoModelForCausalLM.from_pretrained(
"your-org/model-metal-4bit",
device_map="mps",
)Dequantize
MPS bulunmayan makinelerde, önceden kuantize edilmiş bir checkpoint, modelin CPU veya CUDA üzerinde kullanılabilir kalması için otomatik olarak float'a dekuantize edilir. Bu davranışı açıkça da zorlayabilirsiniz:
from transformers import AutoModelForCausalLM, MetalConfig
config = MetalConfig(dequantize=True)
model = AutoModelForCausalLM.from_pretrained(
"your-org/model-metal-4bit",
quantization_config=config,
device_map="cpu",
)Katmanları hariç tut
Belirli katmanlar (ör. lm_head), modules_to_not_convert aracılığıyla kuantizasyondan hariç tutulabilir:
config = MetalConfig(bits=4, group_size=64, modules_to_not_convert=["lm_head"])Yapılandırma seçenekleri
| Parametre | Varsayılan | Açıklama |
|---|---|---|
bits | 4 | Ağırlık kuantizasyonu için bit genişliği (2, 4 veya 8) |
group_size | 64 | Kantizasyon grubu başına öğe sayısı |
modules_to_not_convert | None | Tam hassasiyette tutulacak modül adlarının listesi |
dequantize | False | Float'a zorla dekuantizasyon (MPS olmayan cihazlar için) |