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 é um toolkit de quantização para deep learning projetado para ser agnóstico em relação a tipos de dados, algoritmos e hardware específicos. Diferentes estratégias de pré-processamento, algoritmos e tipos de dados podem ser combinados no Quark.

O suporte ao PyTorch integrado por meio do 🤗 Transformers tem como principal alvo CPUs e GPUs da AMD e destina-se principalmente a fins de avaliação. Por exemplo, é possível usar o lm-evaluation-harness com o backend do 🤗 Transformers e avaliar uma ampla variedade de modelos quantizados por meio do Quark de forma transparente.

Usuários interessados no Quark podem consultar sua documentação para começar a quantizar modelos e usá-los em bibliotecas open-source compatíveis!

Embora o Quark tenha seu próprio formato de checkpoint / configuração, a biblioteca também suporta a geração de modelos com um layout de serialização compatível com outras implementações de quantização/runtime (AutoAWQ, fp8 nativo no 🤗 Transformers).

Para carregar modelos quantizados com Quark no Transformers, é necessário primeiro instalar a biblioteca:

pip install amd-quark

Matriz de suporte

Modelos quantizados por meio do Quark suportam uma ampla gama de recursos, que podem ser combinados. Todos os modelos quantizados, independentemente da sua configuração, podem ser recarregados de forma transparente por meio de PretrainedModel.from_pretrained.

A tabela abaixo mostra alguns recursos suportados pelo Quark:

RecursoSubconjunto suportado no Quark
Tipos de dadosint8, int4, int2, bfloat16, float16, fp8_e5m2, fp8_e4m3, fp6_e3m2, fp6_e2m3, fp4, OCP MX, MX6, MX9, bfp16
Transformação pré-quantizaçãoSmoothQuant, QuaRot, SpinQuant, AWQ
Algoritmo de quantizaçãoGPTQ
Operadores suportadosnn.Linear, nn.Conv2d, nn.ConvTranspose2d, nn.Embedding, nn.EmbeddingBag
Granularidadepor tensor, por canal, por bloco, por camada, tipo por camada
Cache de KVfp8
Calibração de ativaçãoMinMax / Percentil / MSE
Estratégia de quantizaçãosomente pesos, estática, dinâmica, com ou sem quantização de saída

Modelos no Hugging Face Hub

Modelos públicos que usam a serialização nativa do Quark podem ser encontrados em https://huggingface.co/models?other=quark.

Embora o Quark também suporte modelos que usam quant_method="fp8" e modelos que usam quant_method="awq", o Transformers carrega esses modelos mais comumente por meio do AutoAWQ ou utiliza o suporte nativo a fp8 no 🤗 Transformers.

Usando modelos Quark no Transformers

Aqui está um exemplo de como carregar um modelo Quark no 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