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

Kuantisasi Metal melakukan kuantisasi afine pada perangkat Apple Silicon (MPS) menggunakan kernel Metal yang dihosting di Hugging Face Hub (kernels-community/mlx-quantization-metal-kernels). Kernel ini berasal dari framework MLX dan dikompilasi melalui pustaka kernels.

Bobot dikemas ke dalam tensor uint32 dengan skala dan bias per grup, dan jalur maju menggunakan kernel Metal dequantization + matmul yang terfusi (affine_qmm_t). Hal ini menjaga penggunaan memori tetap rendah sambil menjalankan inferensi sepenuhnya di GPU tanpa round-trip ke CPU.

Lebar bit yang didukung adalah 2, 4, dan 8. Ukuran grup dapat dikonfigurasi (default 64).

Persyaratan

  • Mac Apple Silicon (M1 / M2 / M3 / M4) dengan dukungan MPS
  • Paket kernels:
pip install kernels

Kernel Metal diunduh secara otomatis dari Hub saat pertama kali digunakan — tidak perlu kompilasi manual.

Kuantisasi secara langsung

Muat model apa pun dan kuantisasi saat pemuatan dengan meneruskan MetalConfig. Semua lapisan nn.Linear yang memenuhi syarat akan diganti dengan versi terkuantisasi.

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

Muat model yang sudah dikuantisasi

Jika checkpoint sudah berisi bobot terkuantisasi (weight sebagai uint32 yang dikemas, scales, qbiases), bobot tersebut dimuat secara langsung — tidak diperlukan kuantisasi ulang.

from transformers import AutoModelForCausalLM, MetalConfig

model = AutoModelForCausalLM.from_pretrained(
    "your-org/model-metal-4bit",
    device_map="mps",
)

Dequantisasi

Pada mesin tanpa MPS, checkpoint yang sudah dikuantisasi sebelumnya akan otomatis didekuantisasi kembali ke float agar model tetap dapat digunakan di CPU atau CUDA. Anda juga dapat memaksa perilaku ini secara eksplisit:

from transformers import AutoModelForCausalLM, MetalConfig

config = MetalConfig(dequantize=True)
model = AutoModelForCausalLM.from_pretrained(
    "your-org/model-metal-4bit",
    quantization_config=config,
    device_map="cpu",
)

The input "Exclude layers" is a short phrase, likely a heading or label. "Exclude" translates to "Kecualikan" or "Hilangkan" or "Lewati". In the context of model architecture or configuration, "Kecualikan" (Exclude) is the most standard and professional term. "Layers" translates to "Lapisan". So, "Kecualikan lapisan". Kecualikan lapisan

Beberapa lapisan (misalnya, lm_head) dapat dikecualikan dari kuantisasi melalui modules_to_not_convert:

config = MetalConfig(bits=4, group_size=64, modules_to_not_convert=["lm_head"])

Opsi konfigurasi

ParameterDefaultDeskripsi
bits4Lebar bit untuk kuantisasi bobot (2, 4, atau 8)
group_size64Jumlah elemen per grup kuantisasi
modules_to_not_convertNoneDaftar nama modul yang akan dipertahankan dalam presisi penuh
dequantizeFalsePaksa dequantization ke float (untuk perangkat non-MPS)
Update on GitHub