Transformers documentation
Quatre sur six
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.

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
],
),
)