Transformers documentation
Quark
Quark
Quark es un kit de herramientas de cuantización para deep learning diseñado para ser agnóstico respecto a tipos de datos, algoritmos y hardware específicos. En Quark se pueden combinar diferentes estrategias de preprocesamiento, algoritmos y tipos de datos.
El soporte de PyTorch integrado a través de 🤗 Transformers está dirigido principalmente a CPUs y GPUs de AMD, y se destina principalmente a fines de evaluación. Por ejemplo, es posible utilizar lm-evaluation-harness con el backend de 🤗 Transformers y evaluar sin problemas una amplia gama de modelos cuantizados a través de Quark.
Los usuarios interesados en Quark pueden consultar su documentación para comenzar a cuantizar modelos y utilizarlos en las bibliotecas de código abierto compatibles.
Aunque Quark tiene su propio formato de punto de control / configuración, la biblioteca también permite generar modelos con un esquema de serialización compatible con otras implementaciones de cuantización/runtime (AutoAWQ, fp8 nativo en 🤗 Transformers).
Para poder cargar modelos cuantizados con Quark en Transformers, primero es necesario instalar la biblioteca:
pip install amd-quark
Matriz de compatibilidad
Los modelos cuantizados mediante Quark admiten una amplia gama de funciones que pueden combinarse entre sí. Todos los modelos cuantizados, independientemente de su configuración, pueden recargarse de forma transparente mediante PretrainedModel.from_pretrained.
La tabla siguiente muestra algunas de las características admitidas por Quark:
| Característica | Subconjunto compatible en Quark | |
|---|---|---|
| Tipos de datos | int8, int4, int2, bfloat16, float16, fp8_e5m2, fp8_e4m3, fp6_e3m2, fp6_e2m3, fp4, OCP MX, MX6, MX9, bfp16 | |
| Transformación previa a la cuantización | SmoothQuant, QuaRot, SpinQuant, AWQ | |
| Algoritmo de cuantización | GPTQ | |
| Operadores admitidos | nn.Linear, nn.Conv2d, nn.ConvTranspose2d, nn.Embedding, nn.EmbeddingBag | |
| Granularidad | por tensor, por canal, por bloque, por capa, tipo por capa | |
| Caché KV | fp8 | |
| Calibración de activaciones | MinMax / Percentil / MSE | |
| Estrategia de cuantización | solo pesos, estática, dinámica, con o sin cuantización de salida |
Modelos en Hugging Face Hub
Los modelos públicos que utilizan la serialización nativa de Quark se pueden encontrar en https://huggingface.co/models?other=quark.
Aunque Quark también admite modelos que usan quant_method="fp8" y modelos que usan quant_method="awq", Transformers carga estos modelos más bien a través de AutoAWQ o utiliza el soporte nativo de fp8 en 🤗 Transformers.
Uso de modelos Quark en Transformers
A continuación se muestra un ejemplo de cómo cargar un modelo de Quark en 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