Transformers documentation

Mantener los módulos en precisión completa

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

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_modules permanecen omitidos. Incluya lm_head en 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.

ArgumentoMétodos
modules_to_not_convertLa 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_modulesbitsandbytes, tanto en modo de 4 bits como en modo de 8 bits
skip_modulesHQQ

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_proj coincide con la proyección descendente en cada capa.
  • Como prefijo que termina en un límite de módulo. model.layers.1 coincide con model.layers.1.mlp pero no con model.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_head genera 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.gate en Qwen3-MoE o mlp.router en 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