Transformers documentation
Mantener los módulos en precisión completa
Mantener los módulos en precisión completa
Algunos módulos pierden más precisión que otros al cuantizarlos. Mantenerlos en su precisión original tiene un pequeño coste de memoria y puede recuperar gran parte de la precisión. Esto aplica cuando cuantizas un modelo durante su carga. Un punto de control precuantizado ya registra qué módulos omitió.
Módulos omitidos por defecto
Si no se pasa una lista de omisión, la mayoría de los métodos mantienen estos módulos sin cuantizar.
- Las salidas de incrustaciones, normalmente
lm_head. - Pesos vinculados a otros pesos, como los incrustados de entrada que comparten pesos con
lm_head. - El último módulo del modelo.
- Módulos que el modelo lista en
_keep_in_fp32_modules.
Algunos métodos establecen su propio valor predeterminado. HQQ, FP-Quant y Four Over Six solo omiten lm_head. SINQ solo omite los módulos en _keep_in_fp32_modules.
Pasar una lista de omisión
Pase los nombres de los módulos al argumento de lista de omisión de la configuración del método. El ejemplo siguiente mantiene lm_head y las proyecciones descendentes del MLP en bf16 con 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",
)Una lista de omisión reemplaza los módulos omitidos predeterminados en lugar de añadirse a ellos, aunque los módulos en
_keep_in_fp32_modulespermanecen omitidos. Incluyalm_headen su lista si aún desea que no esté cuantizado. AWQ es la excepción y añade su lista a los predeterminados.
El nombre del argumento depende del método.
| Argumento | Métodos |
|---|---|
modules_to_not_convert | La mayoría de los métodos, incluidos AWQ, EETQ, FBGEMM FP8, Fine-grained FP8, Four Over Six, FP-Quant, HIGGS, Metal, MXFP4, NVFP4, Quanto, SINQ y torchao |
llm_int8_skip_modules | bitsandbytes, tanto en modo de 4 bits como en modo de 8 bits |
skip_modules | HQQ |
GPTQ adopta el enfoque opuesto. modules_in_block_to_quantize enumera los módulos que se deben cuantizar, y todo lo demás en el bloque se deja sin cuantizar.
Coincidir con los nombres de los módulos
La mayoría de los métodos comparan cada entrada de la lista de omisión con los nombres completos de los módulos de model.named_modules(), como model.layers.3.mlp.down_proj. HQQ es la excepción y coincide con los nombres de las capas de forma exacta. Una entrada coincide de una de tres maneras.
- Como sufijo.
mlp.down_projcoincide con la proyección descendente en cada capa. - Como prefijo que termina en un límite de módulo.
model.layers.1coincide conmodel.layers.1.mlppero no conmodel.layers.11.mlp. - Como una expresión regular con el mismo límite.
model\.layers\.(0|1)coincide con las dos primeras capas.
Imprima los nombres de los módulos para encontrar las entradas correctas.
for name, _ in model.named_modules():
print(name)Elija qué módulos omitir
Omite los módulos donde el error de redondeo afecta más la precisión a cambio de menos memoria ahorrada. Comienza con los valores predeterminados, mide la precisión en tu tarea y añade módulos solo si esta disminuye.
lm_headgenera los logits para cada token del vocabulario, por lo que los errores en esa capa cambian directamente qué token se selecciona. Se omite de forma predeterminada. En modelos con vocabularios grandes, también es una de las capas individuales más grandes, por lo que cuantizarla ahorra memoria real si la precisión se mantiene.- Las capas de router o gate de MoE, como
mlp.gateen Qwen3-MoE omlp.routeren gpt-oss, deciden a qué expertos va cada token. Son muy pequeñas y un error de redondeo puede enviar un token al experto equivocado, por lo que casi siempre vale la pena omitirlas. - Los codificadores de visión y los proyectores multimodales en los modelos de visión-lenguaje son pequeños en comparación con el modelo de lenguaje, y los errores en ellos distorsionan cada token de imagen. Omítalos si la comprensión de imágenes se degrada.
- Las primeras y últimas capas del decodificador suelen tener más valores atípicos de activación que las capas intermedias. Omítalas cuando la precisión del modelo cuantizado sea notablemente peor que en bf16.
Cada módulo que omitas se mantiene en su precisión original y consume memoria. Comprueba que el modelo sigue cabiendo después de añadir elementos a la lista de omisión.
Update on GitHub