Transformers documentation

Quark

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

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ísticaSubconjunto compatible en Quark
Tipos de datosint8, int4, int2, bfloat16, float16, fp8_e5m2, fp8_e4m3, fp6_e3m2, fp6_e2m3, fp4, OCP MX, MX6, MX9, bfp16
Transformación previa a la cuantizaciónSmoothQuant, QuaRot, SpinQuant, AWQ
Algoritmo de cuantizaciónGPTQ
Operadores admitidosnn.Linear, nn.Conv2d, nn.ConvTranspose2d, nn.Embedding, nn.EmbeddingBag
Granularidadpor tensor, por canal, por bloque, por capa, tipo por capa
Caché KVfp8
Calibración de activacionesMinMax / Percentil / MSE
Estrategia de cuantizaciónsolo 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
Update on GitHub