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.2).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

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)
  • kernels paketi:
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

ParametreVarsayılanAçıklama
bits4Ağırlık kuantizasyonu için bit genişliği (2, 4 veya 8)
group_size64Kantizasyon grubu başına öğe sayısı
modules_to_not_convertNoneTam hassasiyette tutulacak modül adlarının listesi
dequantizeFalseFloat'a zorla dekuantizasyon (MPS olmayan cihazlar için)
Update on GitHub