# Choisir une méthode

Si votre point de contrôle est déjà quantifié, c'est le point de contrôle qui détermine la méthode. Chargez-le comme indiqué dans [Charger un point de contrôle pré-quantifié](./overview#load-a-pre-quantized-checkpoint). Sinon, choisissez une méthode en fonction de votre matériel et de ce que vous devez faire avec le modèle après son chargement.

## Partez de votre objectif

Chaque ligne recommande une première méthode à essayer. Consultez le tableau de comparaison complet avant de vous engager sur une option.

| Objectif | Commencez par | Pourquoi |
|---|---|---|
| Entraînez un modèle avec moins de mémoire et un minimum de configuration | [bitsandbytes](./bitsandbytes) | Quantifie en 4 ou 8 bits lors du chargement, sans calibration, fonctionne sur CUDA, XPU, HPU et CPU, et prend en charge la sauvegarde et l'ajustement fin. |
| Ajustement fin avec QLoRA | [bitsandbytes](./bitsandbytes#qlora) | Prend en charge le NF4 4 bits avec PEFT. [HQQ](./hqq), [EETQ](./eetq), [GPTQ](./gptq), [SINQ](./sinq) et [Quanto](./quanto) prennent également en charge le fine-tuning. |
| Accélérer l'inférence avec `torch.compile` | [torchao](./torchao) | `generate` compile automatiquement les modèles torchao avec un cache statique, et torchao propose des schémas int4, int8 et FP8 pour CUDA, XPU et CPU. |
| Obtenir la meilleure précision en 4 bits | [GPTQ](./gptq) | Effectue l'étalonnage sur un jeu de données lors du chargement. Pour utiliser [AWQ](./awq) ou [AutoRound](./auto_round) à la place, quantifiez avec leurs bibliothèques respectives puis chargez le point de contrôle. |
| Exécuter FP8 sur Ada, Hopper ou Intel XPU | [FP8 à granularité fine](./finegrained_fp8) | Nécessite une capacité de calcul CUDA 8.9 ou supérieure, ou un XPU. [FBGEMM FP8](./fbgemm_fp8) nécessite une capacité de calcul 9.0 ou supérieure, ou un XPU. |
| Exécuter FP4 sur Blackwell | [NVFP4](./nvfp4) | Quantifie au format flottant 4 bits de NVIDIA lors du chargement. [MXFP4](./mxfp4) fonctionne sur une capacité de calcul 7.5 ou supérieure, XPU et CPU. |
| Exécuter sur Apple silicon | [Metal](./metal) | Quantifie en 2, 4 ou 8 bits sur MPS lors du chargement. Les fichiers [GGUF](./gguf) sont également chargés sur MPS. |
| Charger les points de contrôle créés avec llm-compressor | [compressed-tensors](./compressed_tensors) | Charge les points de contrôle FP8, int4 et int8 au format compressed-tensors. |
| Compression en moins de 4 bits | [HQQ](./hqq) ou [SINQ](./sinq) | Quantifier en 2 ou 3 bits lors du chargement, sans calibration. Les points de contrôle [AQLM](./aqlm), [VPTQ](./vptq) et [SpQR](./spqr) descendent plus bas, mais doivent être quantifiés avec leurs propres bibliothèques. |

Afficher le tableau de comparaison complet

| Méthode | `quant_method` | Flux de travail | Bits | Matériel | Enregistrer | Ajustement fin | Auto-compilation |
|---|---|---|---|---|---|---|---|
| [AQLM](./aqlm) | `aqlm` | Pré-quantifiés uniquement | 1–2 | CUDA, CPU | ✅ | ✅ avec `aqlm>=1.0.2` | ❌ |
| [AutoRound](./auto_round) | `auto-round` | Pré-quantifiés uniquement | 2–8 | CUDA, XPU, CPU | ✅ | ❌ | ❌ |
| [AWQ](./awq) | `awq` | Pré-quantifiés uniquement | 4 | CUDA, ROCm, XPU, CPU | ✅ sauf les backends ExLlama | ✅ avec `gptqmodel>=5.0.0` | ❌ |
| [BitNet](./bitnet) | `bitnet` | Pré-quantifiés uniquement | 1.58 | CUDA | ✅ | Uniquement `autobitlinear` en mode `online` | ❌ |
| [bitsandbytes](./bitsandbytes) | `bitsandbytes` | Pendant le chargement | 4, 8 | CUDA, XPU, HPU, CPU | ✅ | ✅ | ❌ |
| [compressed-tensors](./compressed_tensors) | `compressed-tensors` | Pré-quantifiés uniquement | Défini par point de contrôle | CUDA, XPU, MPS, CPU | ✅ | ✅ sauf avec les noyaux FP8 | ✅ |
| [EETQ](./eetq) | `eetq` | Pendant le chargement | 8 | CUDA | ✅ | ✅ | ❌ |
| [FBGEMM FP8](./fbgemm_fp8) | `fbgemm_fp8` | Pendant le chargement | 8 | CUDA (capacité de calcul 9.0+), XPU | ✅ | ❌ | ❌ |
| [FP8 à granularité fine](./finegrained_fp8) | `fp8`, `mxfp8` | Pendant le chargement | 8 | CUDA (capacité de calcul 8.9+), XPU | ✅ | ❌ | ✅ |
| [Four Over Six](./fouroversix) | `fouroversix` | Pendant le chargement | 4 | CUDA (le plus rapide sur Blackwell), CPU | ✅ | Uniquement avec `keep_master_weights=True` | ❌ |
| [FP-Quant](./fp_quant) | `fp_quant` | Pendant le chargement | 4 | CUDA, XPU | ✅ | Uniquement avec `store_master_weights=True` | ❌ |
| [GGUF](./gguf) | `gguf` | Pré-quantifiés uniquement | 1–8 | CUDA, MPS, XPU, CPU | ❌ | ❌ | ✅ |
| [GPTQ](./gptq) | `gptq` | Pendant le chargement, avec calibration | 2, 3, 4, 8 | CUDA, ROCm, XPU, CPU | ✅ | ✅ | ❌ |
| [HIGGS](./higgs) | `higgs` | Pendant le chargement | 2, 3, 4 | CUDA | ✅ | ❌ | ❌ |
| [HQQ](./hqq) | `hqq` | Pendant le chargement | 1, 2, 3, 4, 8 | CUDA, XPU | ✅ | ✅ | ❌ |
| [Metal](./metal) | `metal` | Pendant le chargement | 2, 4, 8 | MPS | ✅ | ❌ | ❌ |
| [MXFP4](./mxfp4) | `mxfp4` | Pendant le chargement | 4 | CUDA (capacité de calcul 7.5+), XPU, CPU | ✅ | ❌ | ❌ |
| [NVFP4](./nvfp4) | `nvfp4` | Pendant le chargement | 4 | Un GPU Blackwell | ❌ | ❌ | ✅ |
| [Quanto](./quanto) | `quanto` | Pendant le chargement | 2, 4, 8 | CUDA, MPS, XPU, CPU | ❌ | ✅ | ❌ |
| [Quark](./quark) | `quark` | Pré-quantifiés uniquement | Défini par point de contrôle | CUDA, ROCm, CPU | ❌ | ❌ | ❌ |
| [SINQ](./sinq) | `sinq` | Pendant le chargement | 2, 3, 4, 6, 8 | Un GPU CUDA, CPU | ✅ | ✅ | ❌ |
| [SpQR](./spqr) | `spqr` | Pré-quantifiés uniquement | 3 | CUDA | ✅ | ❌ | ❌ |
| [torchao](./torchao) | `torchao` | Pendant le chargement | 4, 8 | CUDA, XPU, CPU | ✅ | Schémas 8 bits uniquement | ✅ |
| [VPTQ](./vptq) | `vptq` | Pré-quantifiés uniquement | 1–8 | CUDA | ✅ | ❌ | ❌ |

## Vérifier la mémoire avec le sélecteur de quantification

Le [sélecteur de quantification](https://huggingface.co/spaces/stevhliu/quantization-picker) estime si un modèle tient sur votre matériel à chaque précision, y compris le cache KV. Choisissez un modèle, votre matériel et ce que la méthode doit accomplir, et la vue **Compare** répertorie les méthodes correspondantes.

<iframe src="https://stevhliu-quantization-picker.hf.space" frameborder="0" width="100%" height="420"
>

## Benchmarks

Les benchmarks ci-dessous comparent plusieurs méthodes sur Llama 3.1 8B et 70B. Ils rapportent la précision, le débit en jetons par seconde, la mémoire de pointe en Go et le temps de quantification.

Llama 3.1 70B en bf16 a été exécuté sur 2 GPU NVIDIA A100 80GB. Les méthodes FP8 ont été exécutées sur 1 GPU NVIDIA H100 80GB, et toutes les autres méthodes sur 1 GPU NVIDIA A100 80GB. Le débit a été mesuré avec une taille de lot de 1, en générant 64 jetons. Les résultats incluent `torch.compile` et les noyaux Marlin lorsque la méthode les prend en charge.

<iframe src="https://huggingface.co/datasets/derekl35/quantization-benchmarks/embed/viewer/default/train" frameborder="0" width="100%" height="560px" title="jeu de données des résultats de benchmarking"
>

Les résultats se regroupent en trois plages de bits.

| Bits | Méthodes évaluées | Mémoire vs. bf16 | Précision |
|---|---|---|---|
| 8 | bitsandbytes int8, HQQ, Quanto, torchao, FP8 | Environ 2 fois plus petit | Très proche de bf16 |
| 4 | AWQ, GPTQ, HQQ, bitsandbytes NF4, SINQ | Environ 4 fois plus petit | Élevé. AWQ et GPTQ sont souvent en tête, mais nécessitent une calibration. |
| Inférieur à 4 | VPTQ, AQLM, GPTQ 2 bits | Plus de 4 fois plus petit | Baisse notable, en particulier à 2 bits. AQLM et VPTQ nécessitent un long temps de quantification. |

> [!TIP]
> Évaluez la précision et la vitesse sur votre propre tâche et votre propre matériel avant de choisir une méthode pour la production.

