# Обзор

Квантование хранит веса модели, а иногда и её активации, в меньшем количестве бит, что снижает требования к памяти. Обычно модели загружаются в формате bf16, где на каждый параметр приходится 2 байта. Модели с 8 млрд параметров требуют около 16 ГБ для хранения весов в bf16, около 8 ГБ при 8 битах и около 4–5 ГБ при 4 битах. Уменьшение разрядности приводит к некоторой потере точности, и каждый метод квантования предлагает свой баланс между потреблением памяти, скоростью и точностью.

Transformers поддерживает более 20 методов квантования через [from_pretrained()](/docs/transformers/main/ru/main_classes/model#transformers.PreTrainedModel.from_pretrained), поэтому код загрузки остаётся одинаковым независимо от выбранного метода.

## Два способа использования квантованной модели

Способ использования квантования зависит от того, является ли ваша контрольная точка уже квантованной.

| У вас есть | Что вы делаете | Методы |
|---|---|---|
| Чекпоинт с полной точностью | Передайте конфигурацию квантования в `from_pretrained`, и веса будут квантованы в процессе загрузки. | [Квантование модели при загрузке](#quantize-a-model-while-loading) |
| Чекпоинт, который уже квантован | Вызовите `from_pretrained` без конфигурации квантования. Transformers считывает метод из файла `config.json` в чекпоинте или из указанного вами файла GGUF. | [Загрузка предварительно квантованной контрольной точки](#load-a-pre-quantized-checkpoint) |

Некоторые методы, такие как AWQ, AutoRound, AQLM, compressed-tensors и GGUF, можно загрузить только из контрольной точки. Сначала вы квантуете модель с помощью собственной библиотеки метода, а затем загружаете результат в Transformers.

## Квантование модели при загрузке

Создайте класс конфигурации метода и передайте его в `quantization_config`. В примере ниже модель 8B загружается в 4 бита с помощью [bitsandbytes](./bitsandbytes).

```py
import torch
from transformers import AutoModelForCausalLM, BitsAndBytesConfig

quantization_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_compute_dtype=torch.bfloat16,
)
model = AutoModelForCausalLM.from_pretrained(
    "meta-llama/Llama-3.1-8B-Instruct",
    quantization_config=quantization_config,
    device_map="auto",
)
```

Каждый метод в этой группе имеет собственный класс конфигурации, например [TorchAoConfig](/docs/transformers/main/ru/main_classes/quantization#transformers.TorchAoConfig) или [BitsAndBytesConfig](/docs/transformers/main/ru/main_classes/quantization#transformers.BitsAndBytesConfig). Большинству из них не требуется набор данных для калибровки. Исключение составляет [GPTQ](./gptq), так как он выполняет калибровку на наборе данных во время загрузки модели.

## Загрузка предварительно квантованной контрольной точки

Предварительно квантованный чекпоинт содержит `quantization_config` в своём файле `config.json`. Когда `from_pretrained` находит его, соответствующий квантизатор выбирается автоматически.

```py
from transformers import AutoModelForCausalLM

model = AutoModelForCausalLM.from_pretrained(
    "TheBloke/zephyr-7B-alpha-AWQ",
    device_map="auto",
)
print(model.config.quantization_config.quant_method)
```

Установите библиотеку, от которой зависит метод, до загрузки контрольной точки. На каждой странице метода указано, что необходимо установить. Чтобы изменить параметры загрузки, например, какой ядро-бэкенд будет использоваться, передайте конфигурацию того же типа. Её параметры будут объединены с теми, что сохранены в контрольной точке.

### GGUF-чекпоинты

GGUF-чекпоинт — это единый файл, содержащий веса, конфигурацию и токенизатор, и в нём нет файла `config.json`, который мог бы прочитать `from_pretrained`. Укажите имя файла в параметре `gguf_file`.

```py
from transformers import AutoModelForCausalLM

model = AutoModelForCausalLM.from_pretrained(
    "unsloth/Qwen3.5-4B-GGUF",
    gguf_file="Qwen3.5-4B-Q4_K_M.gguf",
)
```

Большинство моделей в формате GGUF при загрузке деквантуются до полной точности, поэтому занимают столько же памяти, сколько и неквантованная модель. Веса остаются упакованными только на MPS при установленном пакете [kernels](https://huggingface.co/docs/kernels/index), и только для Qwen3.5 и Qwen3.5 MoE. Подробности — в разделе [GGUF](./gguf).

## Сохранение квантованной модели

Вызовите [save_pretrained()](/docs/transformers/main/ru/main_classes/model#transformers.PreTrainedModel.save_pretrained) или [push_to_hub()](/docs/transformers/main/ru/main_classes/model#transformers.utils.PushToHubMixin.push_to_hub), чтобы сохранить квантованные веса и их `quantization_config`. Не каждый метод позволяет сохранить квантованные веса.

## Выберите метод

[Выбор метода](./selecting) предлагает отправную точку для типичных задач и сравнивает все методы по аппаратному обеспечению, разрядности, экономии памяти, возможности дообучения и поддержке `torch.compile`. Используйте [подборщик квантования](https://huggingface.co/spaces/stevhliu/quantization-picker), чтобы проверить, помещается ли модель в память вашего оборудования при каждой точности.

## Другие инструменты

Эти инструменты выполняют квантование моделей вне Transformers.

- [Optimum](https://huggingface.co/docs/optimum/index) выполняет квантование моделей для конкретного оборудования и сред выполнения, таких как процессоры Intel и ONNX Runtime.
- Hub Spaces квантуют модель и выгружают результат в ваш аккаунт: [bitsandbytes](https://huggingface.co/spaces/bnb-community/bnb-my-repo), [GGUF](https://huggingface.co/spaces/ggml-org/gguf-my-repo) и [MLX](https://huggingface.co/spaces/mlx-community/mlx-my-repo).

## Ресурсы

- Курс [Основы квантования с Hugging Face](https://www.deeplearning.ai/short-courses/quantization-fundamentals-with-hugging-face/)
- курс [Квантование: подробное руководство](https://www.deeplearning.ai/short-courses/quantization-in-depth)

## Дальнейшие шаги

- Ознакомьтесь с разделом [Концепции квантования](./concept_guide), чтобы узнать, как работают схемы квантования, гранулярность и методы.
- Квантуйте KV-кэш с помощью [квантованного кэша](../kv_cache#quantized-cache), чтобы сэкономить память при длительной генерации.
- Квантуйте модель при её экспорте с помощью [Квантование экспорта](../exporters_quantization).
- Добавьте новый метод с помощью [Contribute a quantization method](./contribute).

