# NVFP4

Квантование NVFP4 упаковывает веса линейных слоёв с полной точностью в 4-битный формат с плавающей запятой NVIDIA в процессе загрузки модели. [NVFP4Config](/docs/transformers/main/ru/main_classes/quantization#transformers.NVFP4Config) заменяет подходящие модули `torch.nn.Linear` без смещения, у которых `in_features` и `out_features` делятся на 16, на реализацию линейного слоя NVFP4 из [NVFP4 Hub kernel](https://huggingface.co/kernels-community/nvfp4-gemm). Интерфейсы внимания и MLP модели не заменяются.

> [!TIP]
> NVFP4 требует GPU Blackwell с вычислительной способностью 10.0 или выше, совместимой сборки PyTorch с поддержкой CUDA и пакета [kernels](https://github.com/huggingface/kernels).

Установите Accelerate и совместимую версию `kernels`.

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

Передайте [NVFP4Config](/docs/transformers/main/ru/main_classes/quantization#transformers.NVFP4Config) в [from_pretrained()](/docs/transformers/main/ru/main_classes/model#transformers.PreTrainedModel.from_pretrained) с одним устройством CUDA. Веса квантуются по мере загрузки, поэтому исходная контрольная точка должна содержать веса с плавающей точкой.

```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))
```

Используйте `modules_to_not_convert`, чтобы сохранить выбранные модули в исходной точности.

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

Линейные модули NVFP4 поддерживают `torch.compile`. Первое скомпилированное вызывание включает время компиляции графа, поэтому прогрейте модель перед измерением пропускной способности генерации.

## Текущие ограничения

- Поддерживается только одно CUDA-устройство. Конфигурации с тензорным параллелизмом и многоустройственной `device_map` отклоняются, пока не будет определено поведение шардирования метаданных масштаба NVFP4.
- Оффлоад на CPU и диск не поддерживается.
- Чекпоинты NVFP4 с предварительным квантованием не поддерживаются.
- Модели NVFP4 в настоящее время не поддерживают сериализацию с помощью [save_pretrained()](/docs/transformers/main/ru/main_classes/model#transformers.PreTrainedModel.save_pretrained) и обучение.

