Transformers documentation
Metal
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
| Parameter | Default | Deskripsi |
|---|---|---|
bits | 4 | Lebar bit untuk kuantisasi bobot (2, 4, atau 8) |
group_size | 64 | Jumlah elemen per grup kuantisasi |
modules_to_not_convert | None | Daftar nama modul yang akan dipertahankan dalam presisi penuh |
dequantize | False | Paksa dequantization ke float (untuk perangkat non-MPS) |