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.2).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Quark

Quark — это инструментарий для квантования глубокого обучения, спроектированный так, чтобы не зависеть от конкретных типов данных, алгоритмов и аппаратного обеспечения. В Quark можно комбинировать различные стратегии предобработки, алгоритмы и типы данных.

Поддержка PyTorch, интегрированная через 🤗 Transformers, в первую очередь ориентирована на CPU и GPU от AMD и предназначена преимущественно для целей оценки. Например, с помощью lm-evaluation-harness с бэкендом 🤗 Transformers можно бесшовно оценивать широкий спектр моделей, квантованных с помощью Quark.

Пользователям, заинтересованным в Quark, рекомендуется обратиться к его документации, чтобы начать квантовать модели и использовать их в поддерживаемых open-source библиотеках!

Хотя у Quark есть собственный формат контрольных точек / конфигурации, библиотека также поддерживает создание моделей с форматом сериализации, совместимым с другими реализациями квантования/рантайма (AutoAWQ, нативный fp8 в 🤗 Transformers).

Чтобы загрузить квантованные модели Quark в Transformers, сначала необходимо установить библиотеку:

pip install amd-quark

Матрица поддержки

Модели, квантованные с помощью Quark, поддерживают широкий набор функций, которые можно комбинировать. Все квантованные модели, независимо от их конфигурации, могут быть бесшовно загружены с помощью PretrainedModel.from_pretrained.

В таблице ниже приведены некоторые функции, поддерживаемые в Quark:

ВозможностьПоддерживаемый подмножество в Quark
Типы данныхint8, int4, int2, bfloat16, float16, fp8_e5m2, fp8_e4m3, fp6_e3m2, fp6_e2m3, fp4, OCP MX, MX6, MX9, bfp16
Преобразование перед квантованиемSmoothQuant, QuaRot, SpinQuant, AWQ
Алгоритм квантованияGPTQ
Поддерживаемые операторыnn.Linear, nn.Conv2d, nn.ConvTranspose2d, nn.Embedding, nn.EmbeddingBag
Гранулярностьна тензор, на канал, на блок, на слой, тип на слой
Кэш KVfp8
Калибровка активацийMinMax / Percentile / MSE
Стратегия квантованияweight-only, статическая, динамическая, с квантованием выходных данных или без

Модели на Hugging Face Hub

Публичные модели, использующие нативную сериализацию Quark, можно найти по адресу https://huggingface.co/models?other=quark.

Хотя Quark также поддерживает модели с quant_method="fp8" и модели с quant_method="awq", Transformers загружает такие модели скорее через AutoAWQ или использует встроенную поддержку fp8 в 🤗 Transformers.

Использование моделей Quark в Transformers

Вот пример того, как можно загрузить модель Quark в 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