Transformers documentation

Jaga modul dalam presisi penuh

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.23.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

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_modules tetap di-skip. Sertakan lm_head dalam daftar Anda jika Anda masih ingin ia tidak dikuantisasi. AWQ adalah pengecualian dan menambahkan daftar Anda ke default.

Nama argumennya bergantung pada metodenya.

ArgumenMetode
modules_to_not_convertSebagian 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_modulesbitsandbytes, dalam mode 4-bit dan 8-bit
skip_modulesHQQ

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_proj cocok dengan proyeksi turun di setiap lapisan.
  • Sebagai prefiks yang berakhir di batas modul. model.layers.1 cocok dengan model.layers.1.mlp tetapi tidak dengan model.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_head menghasilkan 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.gate di Qwen3-MoE atau mlp.router di 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