Transformers documentation
Cuatro sobre seis
Cuatro sobre seis
Four Over Six es una biblioteca para realizar cuantización FP4 rápida y precisa, especialmente con el formato NVFP4 en GPUs NVIDIA Blackwell. Nuestro método escala de forma adaptativa los bloques NVFP4 a 4 o 6 para reducir el error de cuantización en valores cercanos al máximo de cada bloque, tal como se describe en nuestro preprint.

Nuestra implementación funciona con mayor eficiencia en GPUs NVIDIA Blackwell. Sin embargo, puede ejecutar Four Over Six en hardware más antiguo e incluso en CPUs, sin realizar ningún cambio en el código, ya que en estos casos nuestro marco de trabajo recurre automáticamente a una implementación que realiza la simulación mediante multiplicación de matrices en FP32.
Para cuantizar un modelo a NVFP4 con 4/6, puede cargar su modelo de la siguiente manera:
from transformers import AutoModelForCausalLM, FourOverSixConfig
model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen3-8B",
device_map="auto",
quantization_config=FourOverSixConfig(),
)Adoptamos muchas opciones de cuantización diferentes que se utilizan comúnmente durante la cuantización NVFP4, incluyendo la transformación aleatoria de Hadamard, el escalado de bloques 2D, las entradas transpuestas y el redondeo estocástico, tal como se describe en nuestro preprint.
Estas pueden utilizarse configurando la opción adecuada en el FourOverSixConfig pasado anteriormente.
Las capas individuales pueden recibir opciones de cuantización personalizadas configurando module_config_overrides, o excluirse de la cuantización configurando modules_to_not_convert, como se muestra a continuación.
Entrenamiento
Nuestra capa lineal cuantizada incluye una implementación de la pasada inversa, por lo que muchos modelos pueden seguir entrenándose con pocas modificaciones.
Asegúrate de establecer keep_master_weights en True y de excluir las capas de la cuantización según sea necesario (suele ser importante mantener las últimas capas de la red en alta precisión):
from transformers import AutoModelForCausalLM, FourOverSixConfig
model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen3-8B",
device_map="auto",
quantization_config=FourOverSixConfig(
keep_master_weights=True,
modules_to_not_convert=[
"lm_head",
"model.layers.34.self_attn.q_proj",
"model.layers.34.self_attn.k_proj",
"model.layers.34.self_attn.v_proj",
# Add more layers here, e.g. self_attn.o_proj, MLP layers
],
),
)