Transformers documentation

Quatre sur six

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

and get access to the augmented documentation experience

to get started

Quatre sur six

Four Over Six est une bibliothèque permettant d'effectuer une quantification FP4 rapide et précise, en particulier avec le format NVFP4 sur les GPU NVIDIA Blackwell. Notre méthode met à l'échelle de manière adaptative les blocs NVFP4 à 4 ou 6 afin de réduire l'erreur de quantification sur les valeurs proches du maximum de chaque bloc, comme décrit dans notre prépublication.

Four Over Six visual explanation

Notre implémentation fonctionne de manière la plus efficace sur les GPU NVIDIA Blackwell. Cependant, vous pouvez exécuter Four Over Six sur du matériel plus ancien, voire sur des CPU, sans aucune modification de code, car dans ces cas, notre framework bascule automatiquement sur une implémentation qui effectue la simulation par multiplication de matrices en FP32.

Pour quantiser un modèle en NVFP4 avec 4/6, vous pouvez charger votre modèle de la manière suivante :

from transformers import AutoModelForCausalLM, FourOverSixConfig

model = AutoModelForCausalLM.from_pretrained(
    "Qwen/Qwen3-8B",
    device_map="auto",
    quantization_config=FourOverSixConfig(),
)

Nous prenons en charge de nombreuses options de quantisation couramment utilisées lors de la quantisation NVFP4, notamment la transformation de Hadamard aléatoire, le mise à l'échelle par blocs 2D, les entrées transposées et l'arrondi stochastique, comme décrit dans notre prépublication. Ces options peuvent être activées en définissant le paramètre approprié dans le FourOverSixConfig transmis ci-dessus. Des options de quantisation personnalisées peuvent être appliquées à des couches individuelles en définissant module_config_overrides, ou bien elles peuvent être exclues de la quantisation en définissant modules_to_not_convert, comme illustré ci-dessous.

Entraînement

Notre couche linéaire quantifiée inclut une implémentation du passage arrière, ce qui permet de poursuivre l’entraînement de nombreux modèles avec peu de modifications. Assurez-vous de définir keep_master_weights sur True et d’exclure les couches de la quantisation si nécessaire (il est souvent important de conserver les dernières couches d’un réseau en haute précision) :

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
        ],
    ),
)
Update on GitHub