Transformers documentation

GPTQ

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

GPTQ

Proyek GPT-QModel (paket Python gptqmodel) mengimplementasikan algoritma GPTQ, yaitu teknik kuantisasi pasca-pelatihan di mana setiap baris matriks bobot dikuantisasi secara independen untuk menemukan versi bobot yang meminimalkan error. Bobot ini dikuantisasi ke int4, tetapi dipulihkan ke fp16 secara langsung selama inferensi. Hal ini dapat menghemat penggunaan memori hingga 4x karena bobot int4 didekuantisasi dalam kernel yang terfusi, bukan di memori global GPU. Inferensi juga lebih cepat karena bitwidth yang lebih rendah membutuhkan waktu komunikasi yang lebih singkat.

AutoGPTQ tidak lagi didukung di Transformers. Instal GPT-QModel sebagai gantinya.

Install Accelerate, Transformers, dan Optimum terlebih dahulu.

pip install --upgrade accelerate optimum transformers

Lalu jalankan perintah di bawah ini untuk menginstal GPT-QModel.

pip install gptqmodel --no-build-isolation

Buat kelas GPTQConfig dan atur jumlah bit untuk kuantisasi, dataset untuk kalibrasi bobot kuantisasi, serta tokenizer untuk menyiapkan dataset.

from transformers import AutoModelForCausalLM, AutoTokenizer, GPTQConfig

tokenizer = AutoTokenizer.from_pretrained("facebook/opt-125m")
gptq_config = GPTQConfig(bits=4, dataset="c4", tokenizer=tokenizer)

Anda dapat meneruskan dataset Anda sendiri sebagai daftar string, tetapi sangat disarankan untuk menggunakan dataset yang sama dari paper GPTQ.

dataset = ["gptqmodel is an easy-to-use model quantization library with user-friendly apis, based on the GPTQ algorithm."]
gptq_config = GPTQConfig(bits=4, dataset=dataset, tokenizer=tokenizer)

Muat model yang akan dikuantisasi dan lewati GPTQConfig ke from_pretrained(). Atur device_map="auto" untuk secara otomatis memindahkan model ke CPU guna membantu model muat di memori, serta mengizinkan modul model dipindahkan antara CPU dan GPU untuk kuantisasi.

quantized_model = AutoModelForCausalLM.from_pretrained("facebook/opt-125m", device_map="auto", quantization_config=gptq_config)

Jika Anda kehabisan memori karena dataset terlalu besar (disk offloading tidak didukung), coba lewati parameter max_memory untuk mengalokasikan jumlah memori yang akan digunakan pada perangkat Anda (GPU dan CPU).

quantized_model = AutoModelForCausalLM.from_pretrained(
    "facebook/opt-125m",
    device_map="auto",
    max_memory={0: "30GiB", 1: "46GiB", "cpu": "30GiB"},
    quantization_config=gptq_config
)

Tergantung pada perangkat keras Anda, proses kuantisasi model dari awal dapat memakan waktu cukup lama. Kuantisasi model facebook/opt-350m pada GPU Google Colab tier gratis dapat memakan waktu sekitar 5 menit, tetapi kuantisasi model dengan 175 miliar parameter pada NVIDIA A100 dapat memakan waktu sekitar 4 jam. Sebelum Anda mengkuantisasi sebuah model, sebaiknya periksa di Hub apakah versi GPTQ-kuantisasi dari model tersebut sudah tersedia.

Setelah model dikuantisasi, Anda dapat menggunakan push_to_hub() untuk mendorong model dan tokenizer ke Hub agar mudah dibagikan dan diakses. Hal ini menyimpan GPTQConfig.

quantized_model.push_to_hub("opt-125m-gptq")
tokenizer.push_to_hub("opt-125m-gptq")

save_pretrained() menyimpan model terkuantisasi secara lokal. Jika model dikuantisasi dengan parameter device_map, pastikan untuk memindahkan seluruh model ke GPU atau CPU sebelum menyimpannya. Contoh di bawah ini menyimpan model di CPU.

quantized_model.save_pretrained("opt-125m-gptq")
tokenizer.save_pretrained("opt-125m-gptq")

# if quantized with device_map set
quantized_model.to("cpu")
quantized_model.save_pretrained("opt-125m-gptq")

Muat ulang model terkuantisasi dengan from_pretrained(), dan atur device_map="auto" untuk mendistribusikan model secara otomatis ke semua GPU yang tersedia, sehingga model dimuat lebih cepat tanpa menggunakan memori lebih dari yang dibutuhkan.

from transformers import AutoModelForCausalLM

model = AutoModelForCausalLM.from_pretrained("{your_username}/opt-125m-gptq", device_map="auto")

Marlin

Marlin adalah kernel CUDA GPTQ khusus 4-bit yang sangat dioptimalkan untuk arsitektur GPU NVIDIA A100 (Ampere). Proses pemuatan, dekuantisasi, dan eksekusi bobot pasca-dekuantisasi sangat diparalelkan, sehingga memberikan peningkatan inferensi yang signifikan dibandingkan kernel CUDA GPTQ asli. Marlin hanya tersedia untuk inferensi terkuantisasi dan tidak mendukung kuantisasi model.

Inferensi Marlin dapat diaktifkan dengan parameter backend di GPTQConfig.


from transformers import AutoModelForCausalLM, GPTQConfig

model = AutoModelForCausalLM.from_pretrained("{your_username}/opt-125m-gptq", device_map="auto", quantization_config=GPTQConfig(bits=4, backend="marlin"))

GPT-QModel

GPT-QModel adalah backend yang secara aktif dipelihara untuk GPTQ di Transformers. Awalnya di-fork dari AutoGPTQ, namun sejak itu telah berkembang dengan peningkatan signifikan seperti kuantisasi yang lebih cepat, penggunaan memori yang lebih rendah, dan nilai default yang lebih akurat.

GPT-QModel menyediakan kuantisasi asimetris yang berpotensi menurunkan error kuantisasi dibandingkan kuantisasi simetris. Model ini tidak kompatibel mundur dengan checkpoint AutoGPTQ lama, dan tidak semua kernel (Marlin) mendukung kuantisasi asimetris.

GPT-QModel juga memiliki dukungan yang lebih luas untuk model LLM terbaru, model multimodal (Qwen2-VL dan Ovis1.6-VL), platform (Linux, macOS, Windows 11), dan perangkat keras (AMD ROCm, Apple Silicon, CPU Intel/AMD, serta GPU Intel Datacenter Max/Arc, dll.).

Kernel Marlin juga diperbarui untuk GPU A100, dan kernel lainnya diperbarui untuk mencakup auto-padding bagi model legacy serta model dengan fitur in/out yang tidak seragam.

Sumber daya

Jalankan kuantisasi GPTQ dengan notebook PEFT untuk pengalaman langsung.

Update on GitHub