Transformers documentation
Jaga modul dalam presisi penuh
Jaga modul dalam presisi penuh
Beberapa modul kehilangan akurasi lebih banyak dibandingkan modul lain saat dikuantisasi. Menjaga modul-modul tersebut pada presisi aslinya membutuhkan sedikit memori tambahan dan dapat memulihkan sebagian besar akurasinya. Hal ini berlaku ketika Anda menguantisasi model saat memuatnya. Checkpoint yang sudah dikuantisasi sebelumnya sudah merekam modul mana saja yang dilewati.
Modul yang dilewati secara default
Jika Anda tidak meneruskan daftar lewati, sebagian besar metode tetap mempertahankan modul-modul ini dalam keadaan tidak terkuantisasi.
- Embedding output, biasanya
lm_head. - Bobot yang terikat ke bobot lain, seperti input embeddings yang berbagi bobot dengan
lm_head. - Modul terakhir model.
- Modul yang terdaftar model dalam
_keep_in_fp32_modules.
Beberapa metode menetapkan nilai default mereka sendiri. HQQ, FP-Quant, dan Four Over Six hanya melewati lm_head. SINQ hanya melewati modul-modul di _keep_in_fp32_modules.
Lewati daftar
Lewatkan nama modul ke argumen skip-list dari konfigurasi metode. Contoh di bawah ini mempertahankan lm_head dan proyeksi down MLP dalam bf16 dengan bitsandbytes.
from transformers import AutoModelForCausalLM, BitsAndBytesConfig
quantization_config = BitsAndBytesConfig(
load_in_4bit=True,
llm_int8_skip_modules=["lm_head", "mlp.down_proj"],
)
model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen3-0.6B",
quantization_config=quantization_config,
device_map="auto",
)Skip list menggantikan modul yang di-skip secara default, bukan menambahkannya, meskipun modul dalam
_keep_in_fp32_modulestetap di-skip. Sertakanlm_headdalam daftar Anda jika Anda masih ingin ia tidak dikuantisasi. AWQ adalah pengecualian dan menambahkan daftar Anda ke default.
Nama argumennya bergantung pada metodenya.
| Argumen | Metode |
|---|---|
modules_to_not_convert | Sebagian besar metode, termasuk AWQ, EETQ, FBGEMM FP8, Fine-grained FP8, Four Over Six, FP-Quant, HIGGS, Metal, MXFP4, NVFP4, Quanto, SINQ, dan torchao |
llm_int8_skip_modules | bitsandbytes, dalam mode 4-bit dan 8-bit |
skip_modules | HQQ |
GPTQ mengambil pendekatan yang berlawanan. modules_in_block_to_quantize mencantumkan modul yang akan dikuantisasi, dan semua yang lain dalam blok tersebut dibiarkan tidak dikuantisasi.
Cocokkan nama modul
Sebagian besar metode mencocokkan setiap entri dalam daftar lewati dengan nama modul lengkap dari model.named_modules(), seperti model.layers.3.mlp.down_proj. HQQ adalah pengecualian dan mencocokkan nama lapisan secara persis. Sebuah entri cocok dengan salah satu dari tiga cara.
- Sebagai akhiran.
mlp.down_projcocok dengan proyeksi turun di setiap lapisan. - Sebagai prefiks yang berakhir di batas modul.
model.layers.1cocok denganmodel.layers.1.mlptetapi tidak denganmodel.layers.11.mlp. - Sebagai ekspresi reguler dengan batas yang sama.
model\.layers\.(0|1)mencocokkan dua lapisan pertama.
Cetak nama modul untuk menemukan entri yang tepat.
for name, _ in model.named_modules():
print(name)Pilih modul mana yang akan dilewati
Lewati modul di mana kesalahan pembulatan paling memengaruhi akurasi untuk penghematan memori yang paling sedikit. Mulai dengan nilai bawaan, ukur akurasi pada tugas Anda, dan tambahkan modul hanya jika akurasi menurun.
lm_headmenghasilkan logits untuk setiap token dalam kosakata, sehingga kesalahan di sana secara langsung mengubah token mana yang dipilih. Lapisan ini dilewati secara default. Pada model dengan kosakata besar, lapisan ini juga merupakan salah satu lapisan tunggal terbesar, sehingga mengkuantisasinya menghemat memori secara nyata jika akurasinya tetap terjaga.- Lapisan router atau gate MoE, seperti
mlp.gatedi Qwen3-MoE ataumlp.routerdi gpt-oss, menentukan ke expert mana setiap token akan diarahkan. Lapisan ini sangat kecil, dan kesalahan pembulatan dapat mengirim token ke expert yang salah, sehingga hampir selalu layak untuk dilewati. - Encoder visual dan proyektor multimodal dalam model bahasa-visual berukuran kecil dibandingkan model bahasanya, dan kesalahan di sana mendistorsi setiap token gambar. Lewati komponen tersebut jika pemahaman gambar menurun.
- Beberapa lapisan decoder pertama dan terakhir sering kali memiliki lebih banyak outlier aktivasi daripada lapisan tengah. Lewati lapisan-lapisan tersebut ketika akurasi model terkuantisasi secara signifikan lebih buruk dibandingkan dalam bf16.
Setiap modul yang Anda lewati akan tetap berada pada presisi aslinya dan memakan memori. Pastikan model masih muat setelah Anda menambahkan ke daftar lewati.
Update on GitHub