Transformers documentation
Quark
Quark
Quark est un kit d’outils de quantification pour l’apprentissage profond, conçu pour être indépendant des types de données, des algorithmes et du matériel spécifiques. Différentes stratégies de prétraitement, algorithmes et types de données peuvent être combinés dans Quark.
La prise en charge de PyTorch intégrée via 🤗 Transformers cible principalement les CPU et GPU AMD, et est destinée avant tout à des fins d'évaluation. Par exemple, il est possible d'utiliser lm-evaluation-harness avec le backend 🤗 Transformers pour évaluer de manière transparente une large gamme de modèles quantifiés via Quark.
Les utilisateurs intéressés par Quark peuvent consulter sa documentation pour commencer à quantifier des modèles et les utiliser dans les bibliothèques open source prises en charge !
Bien que Quark possède son propre format de point de contrôle / de configuration, la bibliothèque prend également en charge la production de modèles avec une disposition de sérialisation compatible avec d'autres implémentations de quantification/temps d'exécution (AutoAWQ, fp8 natif dans 🤗 Transformers).
Pour pouvoir charger des modèles quantifiés Quark dans Transformers, il faut d’abord installer la bibliothèque :
pip install amd-quark
Matrice de prise en charge
Les modèles quantifiés via Quark prennent en charge un large éventail de fonctionnalités, qui peuvent être combinées entre elles. Tous les modèles quantifiés, quelle que soit leur configuration, peuvent être rechargés sans accroc via PretrainedModel.from_pretrained.
Le tableau ci-dessous présente quelques fonctionnalités prises en charge par Quark :
| Fonctionnalité | Sous-ensemble pris en charge dans Quark | |
|---|---|---|
| Types de données | int8, int4, int2, bfloat16, float16, fp8_e5m2, fp8_e4m3, fp6_e3m2, fp6_e2m3, fp4, OCP MX, MX6, MX9, bfp16 | |
| Transformation de pré-quantification | SmoothQuant, QuaRot, SpinQuant, AWQ | |
| Algorithme de quantification | GPTQ | |
| Opérateurs pris en charge | nn.Linear, nn.Conv2d, nn.ConvTranspose2d, nn.Embedding, nn.EmbeddingBag | |
| Granularité | par tenseur, par canal, par bloc, par couche, type par couche | |
| Cache KV | fp8 | |
| Calibration des activations | MinMax / Percentile / MSE | |
| Stratégie de quantification | weight-only, statique, dynamique, avec ou sans quantification de la sortie |
Modèles sur Hugging Face Hub
Les modèles publics utilisant la sérialisation native de Quark sont disponibles à l’adresse https://huggingface.co/models?other=quark.
Bien que Quark prenne également en charge les modèles utilisant quant_method="fp8" et les modèles utilisant quant_method="awq", Transformers charge ces modèles plutôt via AutoAWQ ou en utilisant le support natif de fp8 dans 🤗 Transformers.
Utilisation des modèles Quark dans Transformers
Voici un exemple de la manière de charger un modèle Quark dans Transformers :
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "EmbeddedLLM/Llama-3.1-8B-Instruct-w_fp8_per_channel_sym"
model = AutoModelForCausalLM.from_pretrained(model_id, device_map="auto")
print(model.model.layers[0].self_attn.q_proj)
# QParamsLinear(
# (weight_quantizer): ScaledRealQuantizer()
# (input_quantizer): ScaledRealQuantizer()
# (output_quantizer): ScaledRealQuantizer()
# )
tokenizer = AutoTokenizer.from_pretrained(model_id)
inp = tokenizer("Where is a good place to cycle around Tokyo?", return_tensors="pt")
inp = inp.to(model.device)
res = model.generate(**inp, min_new_tokens=50, max_new_tokens=100)
print(tokenizer.batch_decode(res)[0])
# <|begin_of_text|>Where is a good place to cycle around Tokyo? There are several places in Tokyo that are suitable for cycling, depending on your skill level and interests. Here are a few suggestions:
# 1. Yoyogi Park: This park is a popular spot for cycling and has a wide, flat path that's perfect for beginners. You can also visit the Meiji Shrine, a famous Shinto shrine located in the park.
# 2. Imperial Palace East Garden: This beautiful garden has a large, flat path that's perfect for cycling. You can also visit the