Transformers documentation
AutoRound
AutoRound
AutoRound est un algorithme de quantification avancé qui offre une précision élevée, même à une précision de 2 bits. Il exploite la descente de gradient de signe pour affiner à la fois les valeurs d'arrondi et les seuils de rognage min-max en seulement 200 étapes. Conçu pour une compatibilité étendue, il prend en charge sans accroc une large gamme de LLM et s'étend activement pour couvrir davantage de VLM. Il prend également en charge la quantification et l'inférence sur plusieurs plateformes matérielles, notamment CPU, XPU et CUDA.
AutoRound propose également une variété de fonctionnalités utiles, notamment l'ajustement et l'inférence automatiques en bits mixtes, la prise en charge des types de données MXFP4 et NVFP4, la quantification sans modèle, l'exportation vers des formats tels que GPTQ, AWQ, GGUF et LLM-Compressor, ainsi que des recettes d'ajustement flexibles. Pour un aperçu complet et les dernières mises à jour, consultez le README d'AutoRound.
AutoRound a été initialement développé dans le cadre de Intel Neural Compressor, servant de bibliothèque de compression de modèles à usage général pour l'apprentissage profond. Il a depuis évolué en bibliothèque autonome, axée spécifiquement sur l'optimisation basse précision pour les grands modèles de langage (LLM). AutoRound reste entièrement intégré à Intel Neural Compressor, et vous pouvez consulter le dépôt pour plus de détails.
Installation
pip install auto-round
Configurations de quantification prises en charge
AutoRound prend en charge les configurations de quantification suivantes :
- Poids uniquement INT2–INT8
- Poids uniquement en bits mixtes
- GGUF Q*_K
- MXFP (prise en charge limitée)
- NVFP4 (prise en charge limitée)
Compatibilité matérielle
CPU, XPU et CUDA pour la quantification et l'inférence.
Quantification et sérialisation (hors ligne)
Actuellement, seul le mode hors ligne est pris en charge pour générer des modèles quantifiés.
Utilisation en ligne de commande
auto-round \
--model Qwen/Qwen3-0.6B \
--scheme "W4A16" \
--group_size 128 \
--output_dir ./tmp_autoroundAutoRound propose également quatre autres recettes, auto-round-best, auto-round-light,auto-round-opt-rtn,auto-round-rtn, conçues respectivement pour une précision optimale et une vitesse améliorée.
Pour 2 bits, nous recommandons d'utiliser auto-round-best avec --enable_alg_ext.
Utilisation d'AutoScheme
AutoScheme est une fonctionnalité qui sélectionne automatiquement le meilleur schéma de quantification parmi les options disponibles pour chaque couche à quantifier, en quelques minutes, en respectant une largeur de bits moyenne cible.
auto-round \
--model Qwen/Qwen3-0.6B \
--options "W4A16,W2A16G64" \
--target_bits 3.5 \
--output_dir ./tmp_autoroundCombinaisons d'algorithmes
AutoRound prend en charge la combinaison de plusieurs algorithmes, tels que AutoRound, AutoRound + AWQ et AutoRound + AWQ + Hadamard (prise en charge très limitée). Nous élargissons actuellement la prise en charge de davantage d'algorithmes. Cela permet d'optimiser davantage les résultats de quantification, en particulier pour les scénarios impliquant des activations quantifiées.
auto-round \
--model Qwen/Qwen3-0.6B \
--algs "autoround,awq" \
--output_dir ./tmp_autoroundUtilisation de l'API AutoRound
Ce paramètre offre un meilleur compromis entre précision et coût d’ajustement, et est recommandé dans tous les scénarios.
from auto_round import AutoRound
model_name = "Qwen/Qwen3-0.6B"
# mixed bits config
# layer_config = {"model.decoder.layers.6.self_attn.out_proj": {"bits": 2, "group_size": 32}}
ar = AutoRound(
model_name,
scheme="W4A16",
# enable_torch_compile=True,
# layer_config=layer_config,
)
output_dir = "./tmp_autoround"
# format= 'auto_round'(default), 'llm_compressor', "gguf:q4_k_m", 'auto_gptq', 'auto_awq'
ar.quantize_and_save(output_dir, format='auto_round') AutoRoundMeilleure recette
Ce paramètre offre la meilleure précision dans la plupart des scénarios, mais est 4 à 5 fois plus lent que la recette AutoRound standard. Il est particulièrement recommandé pour la quantification sur 2 bits et constitue un bon choix si des ressources suffisantes sont disponibles.
from auto_round import AutoRound
model_name = "Qwen/Qwen3-0.6B"
ar = AutoRound(
model_name,
scheme="W4A16",
nsamples=512,
iters=1000,
)
output_dir = "./tmp_autoround"
ar.quantize_and_save(output_dir, format='auto_round') Recette AutoRoundLight
Ce paramètre offre la meilleure vitesse (2 à 3 fois plus rapide qu'AutoRound), mais il peut entraîner une baisse significative de la précision pour les petits modèles et la quantification sur 2 bits. Il est recommandé pour les configurations sur 4 bits et les modèles de plus de 3B.
from transformers import AutoModelForCausalLM, AutoTokenizer
from auto_round import AutoRound
model_name = "Qwen/Qwen3-0.6B"
ar = AutoRound(
model_name,
iters=50,
lr=5e-3,
)
output_dir = "./tmp_autoround"
ar.quantize_and_save(output_dir, format='auto_round') Précision moyenne de 13 tâches (mmlu-pro, if_eval, gsm8k, etc.) et résultats de coût temporel pour W4G128 (les tests ont été effectués sur une Nvidia A100 80G en utilisant la version 2.6.0 de PyTorch avec enable_torch_compile) :
| Modèle | Qwen2.5-0.5B-Instruct | Falcon3-3B | Qwen2.5-7B-Instruct | Meta-Llama-3.1-8B-Instruct | Falcon3-10B | Qwen2.5-72B-Instruct |
|---|---|---|---|---|---|---|
| 16 bits | 0.4192 | 0.5203 | 0.6470 | 0.6212 | 0.6151 | 0.7229 |
| Meilleur | 0.4137(7m) | 0.5142(23m) | 0.6426(58m) | 0.6116(65m) | 0.6092(81m) | 0.7242(575m) |
| Par défaut | 0.4129(2m) | 0.5133(6m) | 0.6441(13m) | 0.6106(13m) | 0.6080(18m) | 0.7252(118m) |
| Clair | 0.4052(2m) | 0.5108(3m) | 0.6453(5m) | 0.6104(6m) | 0.6063(6m) | 0.7243(37m) |
Inférence
AutoRound sélectionne automatiquement le meilleur backend disponible en fonction des bibliothèques installées et invite l'utilisateur à installer des bibliothèques supplémentaires lorsqu'un backend plus performant est détecté.
CPU
Prend en charge 2, 4 et 8 bits. Nous recommandons d'utiliser le backend AutoRound Kernel (ARK) pour l'inférence. PyTorch 2.8.0 ou une version ultérieure est requis avec ARK.
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "OPEA/Qwen2.5-1.5B-Instruct-int4-sym-inc"
model = AutoModelForCausalLM.from_pretrained(model_name, device_map="cpu", dtype="auto")
tokenizer = AutoTokenizer.from_pretrained(model_name)
text = "There is a girl who likes adventure,"
inputs = tokenizer(text, return_tensors="pt").to(model.device)
print(tokenizer.decode(model.generate(**inputs, max_new_tokens=50, do_sample=False)[0]))XPU
Prend en charge 2, 4 et 8 bits. Nous recommandons d'utiliser le backend AutoRound Kernel (ARK) pour l'inférence. PyTorch 2.8.0 ou une version ultérieure est requis avec ARK.
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "OPEA/Qwen2.5-1.5B-Instruct-int4-sym-inc"
model = AutoModelForCausalLM.from_pretrained(model_name, device_map="xpu", dtype="auto")
tokenizer = AutoTokenizer.from_pretrained(model_name)
text = "There is a girl who likes adventure,"
inputs = tokenizer(text, return_tensors="pt").to(model.device)
print(tokenizer.decode(model.generate(**inputs, max_new_tokens=50, do_sample=False)[0]))CUDA
Prend en charge 2 à 8 bits. Nous recommandons d’utiliser GPTQModel pour l’inférence en 4 et 8 bits.
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "OPEA/Qwen2.5-1.5B-Instruct-int4-sym-inc"
model = AutoModelForCausalLM.from_pretrained(model_name, device_map="cuda", dtype="auto")
tokenizer = AutoTokenizer.from_pretrained(model_name)
text = "There is a girl who likes adventure,"
inputs = tokenizer(text, return_tensors="pt").to(model.device)
print(tokenizer.decode(model.generate(**inputs, max_new_tokens=50, do_sample=False)[0]))Spécifier l'arrière-plan d'inférence
AutoRound sélectionne automatiquement le backend de chaque couche en fonction de la compatibilité. En général, l’ordre de priorité est Marlin > ExLLaMAV2 > Triton, mais le choix final dépend de facteurs tels que la taille du groupe, la largeur en bits, le format d’empaquetage, le matériel et d’autres détails d’implémentation. Pour plus de détails, veuillez consulter backends,
Le backend n’est pas toujours le plus adapté à certains appareils. Vous pouvez spécifier le backend de votre choix, par exemple « ark » pour CPU et XPU, ou « marlin/exllamav2/triton » pour CUDA, selon vos besoins ou la compatibilité de votre matériel. Veuillez noter que des bibliothèques supplémentaires correspondantes peuvent être requises.
from transformers import AutoModelForCausalLM, AutoTokenizer, AutoRoundConfig
model_name = "OPEA/Qwen2.5-1.5B-Instruct-int4-sym-inc"
quantization_config = AutoRoundConfig(backend="ark")
model = AutoModelForCausalLM.from_pretrained(model_name, device_map="cpu", quantization_config=quantization_config, dtype="auto")
tokenizer = AutoTokenizer.from_pretrained(model_name)
text = "There is a girl who likes adventure,"
inputs = tokenizer(text, return_tensors="pt").to(model.device)
print(tokenizer.decode(model.generate(**inputs, max_new_tokens=50, do_sample=False)[0]))Convertir GPTQ/AWQ en AutoRound
La plupart des modèles GPTQ/AWQ peuvent être convertis au format AutoRound pour une meilleure compatibilité et un meilleur support sur les appareils Intel. Veuillez noter que la configuration de quantification sera modifiée si le modèle est sérialisé.
from transformers import AutoModelForCausalLM, AutoTokenizer, AutoRoundConfig
model_name = "ybelkada/opt-125m-gptq-4bit"
quantization_config = AutoRoundConfig()
model = AutoModelForCausalLM.from_pretrained(model_name, device_map="cpu", quantization_config=quantization_config, dtype="auto")
tokenizer = AutoTokenizer.from_pretrained(model_name)
text = "There is a girl who likes adventure,"
inputs = tokenizer(text, return_tensors="pt").to(model.device)
print(tokenizer.decode(model.generate(**inputs, max_new_tokens=50, do_sample=False)[0]))Problèmes
Si vous rencontrez des problèmes avec l'intégration transformers, veuillez ouvrir un ticket sur le dépôt transformers.
Si vous rencontrez des problèmes avec auto-round, veuillez ouvrir un ticket sur le dépôt AutoRound.
Remerciements
Un remerciement spécial aux bibliothèques open source de basse précision telles qu'AutoGPTQ, AutoAWQ, GPTQModel, Triton, Marlin et ExLLaMAV2, qui fournissent des noyaux CUDA à basse précision utilisés dans AutoRound.
Contribution
Les contributions à AutoRound sont les bienvenues et très appréciées ! Que ce soit pour corriger des bugs, améliorer la documentation, ajouter de nouvelles fonctionnalités ou suggérer des améliorations, votre aide est toujours valorisée.
Update on GitHub