Transformers documentation

Quatro sobre seis

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

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