# HIGGS

[HIGGS](https://huggingface.co/papers/2411.17525) est un algorithme de quantification zero-shot qui combine un prétraitement de Hadamard avec des grilles de quantification optimales par MSE afin d’obtenir une erreur de quantification plus faible et des performances de pointe.

La prise en charge de HIGGS au moment de l’exécution est assurée par la bibliothèque [FLUTE](https://github.com/HanGuo97/flute). Seules les variantes 70B et 405B de Llama 3 et Llama 3.0, ainsi que les variantes 8B et 27B de Gemma 2, sont actuellement prises en charge. HIGGS ne prend pas non plus en charge, pour le moment, l’entraînement quantifié ni les passes arrière (backward passes) en général.

Exécutez la commande ci-dessous pour installer FLUTE.

```bash
pip install flute-kernel
```

```bash
pip install flute-kernel -i https://flute-ai.github.io/whl/cu11.8
```

Créez un [HiggsConfig](/docs/transformers/main/fr/main_classes/quantization#transformers.HiggsConfig) avec le nombre de bits pour quantiser un modèle.

```python
from transformers import AutoModelForCausalLM, AutoTokenizer, HiggsConfig

model = AutoModelForCausalLM.from_pretrained(
    "google/gemma-2-9b-it",
    quantization_config=HiggsConfig(bits=4),
    device_map="auto",
)
```

> [!TIP]
> Retrouvez les modèles pré-quantifiés avec HIGGS dans la [collection](https://huggingface.co/collections/ISTA-DASLab/higgs-675308e432fd56b7f6dab94e) officielle d’ISTA-DASLab.

## torch.compile

HIGGS est entièrement compatible avec [torch.compile](https://pytorch.org/tutorials/intermediate/torch_compile_tutorial.html).

```python
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, HiggsConfig

model = AutoModelForCausalLM.from_pretrained(
    "google/gemma-2-9b-it",
    quantization_config=HiggsConfig(bits=4),
    device_map="auto",
)

model = torch.compile(model)
```

Reportez-vous au tableau ci-dessous pour un benchmark des passes avant/sec pour Llama-3.1-8B-Instruct sur une RTX4090.

| Taille du lot | BF16 (avec `torch.compile`) | HIGGS 4 bits (sans `torch.compile`) | HIGGS 4 bits (avec `torch.compile`) |
|------------|-----------------------------|----------------------------------|-----------------------------------|
| 1          | 59                          | 41                               | 124                               |
| 4          | 57                          | 42                               | 123                               |
| 16         | 56                          | 41                               | 120                               |

