Transformers documentation

Quatro sobre seis

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Quatro sobre seis

Four Over Six é uma biblioteca para realizar quantização FP4 rápida e precisa, especialmente com o formato NVFP4 em GPUs NVIDIA Blackwell. Nosso método escala adaptativamente os blocos NVFP4 para 4 ou 6, a fim de reduzir o erro de quantização em valores próximos do máximo em cada bloco, conforme descrito em nosso preprint.

Four Over Six visual explanation

Nossa implementação é mais eficiente em GPUs NVIDIA Blackwell. No entanto, você pode executar o Four Over Six em hardware mais antigo e até em CPUs, sem nenhuma alteração de código, pois, nesses casos, nosso framework faz automaticamente o fallback para uma implementação que realiza a simulação com multiplicação de matrizes em FP32.

Para quantizar um modelo para NVFP4 com 4/6, você pode carregar seu modelo da seguinte forma:

from transformers import AutoModelForCausalLM, FourOverSixConfig

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

Suportamos diversas opções de quantização comumente utilizadas durante a quantização NVFP4, incluindo a transformada aleatória de Hadamard, escalonamento em blocos 2D, entradas transpostas e arredondamento estocástico, conforme descrito em nosso pré-impresso. Essas opções podem ser usadas definindo a opção apropriada no FourOverSixConfig passado acima. Camadas individuais podem receber opções de quantização personalizadas definindo module_config_overrides, ou serem excluídas da quantização definindo modules_to_not_convert, conforme mostrado abaixo.

Treinamento

A nossa camada linear quantizada contém uma implementação do passo de retropropagação, de modo que muitos modelos podem ser treinados com poucas modificações. Certifique-se de definir keep_master_weights como True e de excluir camadas da quantização conforme necessário (frequentemente é importante manter as últimas camadas de uma rede em alta precisão):

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