# 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](./hqq), [FP-Quant](./fp_quant), dan [Four Over Six](./fouroversix) hanya melewati `lm_head`. [SINQ](./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](./bitsandbytes).

```py
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",
)
```

> [!WARNING]
> 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](./awq) adalah pengecualian dan menambahkan daftar Anda ke default.

Nama argumen bergantung pada metode.

| 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](./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](./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.

```py
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.

