# Optimum Quanto

[Quanto](https://github.com/huggingface/optimum-quanto) 是 [Optimum](https://huggingface.co/docs/optimum/index) 的 PyTorch 量化后端。它支持权重的线性量化（float8、int8、int4、int2），精度与全精度模型非常接近。Quanto 兼容任意模型模态和设备，因此无论使用何种硬件，使用起来都非常简单。

Quanto 还兼容 [torch.compile](https://pytorch.org/tutorials/intermediate/torch_compile_tutorial.html)，以实现更快的生成速度。

使用以下命令安装 Quanto。

```bash
pip install optimum-quanto accelerate transformers
```

通过创建 [QuantoConfig](/docs/transformers/main/zh/main_classes/quantization#transformers.QuantoConfig) 并指定 `weights` 参数来量化模型。只要模型包含 [torch.nn.Linear](https://pytorch.org/docs/stable/generated/torch.nn.Linear.html) 层，此方法适用于任何模态下的任何模型。

> [!TIP]
> Transformers 集成仅支持权重量化。如果需要激活量化、校准或 QAT，请直接使用 Quanto 库。

```py
from transformers import AutoModelForCausalLM, AutoTokenizer, QuantoConfig

quant_config = QuantoConfig(weights="int8")
model = transformers.AutoModelForCausalLM.from_pretrained(
    "meta-llama/Llama-3.1-8B", 
    dtype="auto", 
    device_map="auto", 
    quantization_config=quant_config
)
```

## torch.compile

使用 [torch.compile](https://pytorch.org/tutorials/intermediate/torch_compile_tutorial.html) 包装 Quanto 模型以加快生成速度。

```py
import torch
from transformers import AutoModelForSpeechSeq2Seq, QuantoConfig

quant_config = QuantoConfig(weights="int8")
model = AutoModelForSpeechSeq2Seq.from_pretrained(
  "openai/whisper-large-v2",
  dtype="auto",
  device_map="auto",
  quantization_config=quant_config
)

model = torch.compile(model)
```

## 资源

阅读 [Quanto：Optimum 的 PyTorch 量化后端](https://huggingface.co/blog/quanto-introduction) 博客文章，以了解该库的设计和基准测试。

如需更多实践示例，请查看 Quanto [notebook](https://colab.research.google.com/drive/16CXfVmtdQvciSh9BopZUDYcmXCDpvgrT?usp=sharing)。

