# NVFP4

A quantização NVFP4 empacota pesos lineares de precisão completa no formato de ponto flutuante de 4 bits da NVIDIA enquanto o modelo é carregado. [NVFP4Config](/docs/transformers/main/pt/main_classes/quantization#transformers.NVFP4Config) substitui os módulos `torch.nn.Linear` elegíveis, sem viés, cujos `in_features` e `out_features` são ambos divisíveis por 16, por uma implementação linear NVFP4 do [NVFP4 Hub kernel](https://huggingface.co/kernels-community/nvfp4-gemm). As interfaces de atenção e MLP do modelo não são substituídas.

> [!TIP]
> NVFP4 requer uma GPU Blackwell com capacidade de computação 10.0 ou mais recente, uma build compatível do PyTorch habilitada para CUDA e o pacote [kernels](https://github.com/huggingface/kernels).

Instale o Accelerate e uma versão compatível do `kernels`.

```bash
pip install --upgrade accelerate kernels
```

Passe [NVFP4Config](/docs/transformers/main/pt/main_classes/quantization#transformers.NVFP4Config) para [from_pretrained()](/docs/transformers/main/pt/main_classes/model#transformers.PreTrainedModel.from_pretrained) com um único dispositivo CUDA. Os pesos são quantizados conforme são carregados, portanto, o checkpoint de origem deve conter pesos em ponto flutuante.

```py
import torch

from transformers import AutoModelForCausalLM, AutoTokenizer, NVFP4Config

model_id = "meta-llama/Llama-3.2-1B"
quantization_config = NVFP4Config()
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    dtype=torch.bfloat16,
    device_map="cuda",
    quantization_config=quantization_config,
)

tokenizer = AutoTokenizer.from_pretrained(model_id)
inputs = tokenizer("NVFP4 is", return_tensors="pt").to(model.device)
output = model.generate(**inputs, max_new_tokens=20)
print(tokenizer.decode(output[0], skip_special_tokens=True))
```

Use `modules_to_not_convert` para manter módulos selecionados em sua precisão original.

```py
quantization_config = NVFP4Config(modules_to_not_convert=["vision", "lm_head"])
```

Os módulos lineares NVFP4 têm suporte a `torch.compile`. A primeira invocação compilada inclui o tempo de compilação do grafo, portanto, aqueça o modelo antes de medir o throughput de geração.

## Limitações atuais

- Apenas um dispositivo CUDA é suportado. Configurações de paralelismo de tensor e `device_map` multi-dispositivo são rejeitadas até que o comportamento de sharding dos metadados de escala NVFP4 seja definido.
- O offload para CPU e disco não é suportado.
- Checkpoints NVFP4 pré-quantizados não são suportados.
- Modelos NVFP4 não podem, no momento, ser serializados com [save_pretrained()](/docs/transformers/main/pt/main_classes/model#transformers.PreTrainedModel.save_pretrained) nem treinados.

