Transformers documentation

AWQ

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

AWQ

Квантование весов с учётом активаций (AWQ) сохраняет небольшую долю весов, критически важных для производительности LLM, что позволяет сжать модель до 4 бит с минимальной потерей качества.

Существует несколько библиотек для квантования моделей с использованием алгоритма AWQ, например llm-awq, autoawq или optimum-intel. Transformers поддерживает загрузку моделей, квантованных с помощью библиотек llm-awq и autoawq. В этом руководстве показано, как загружать модели, квантованные с помощью autoawq, однако процесс аналогичен для моделей, квантованных с помощью llm-awq.

Выполните команду ниже, чтобы установить autoawq

pip install autoawq

AutoAWQ понижает версию Transformers до 4.47.1. Если вы планируете выполнять инференс с помощью AutoAWQ, возможно, вам потребуется переустановить вашу версию Transformers после установки AutoAWQ.

Чтобы определить модель, квантованную с помощью AWQ, проверьте ключ quant_method в файле config.json модели.

{
  "_name_or_path": "/workspace/process/huggingfaceh4_zephyr-7b-alpha/source",
  "architectures": [
    "MistralForCausalLM"
  ],
  ...
  ...
  ...
  "quantization_config": {
    "quant_method": "awq",
    "zero_point": true,
    "group_size": 128,
    "bits": 4,
    "version": "gemm"
  }
}

Загрузите модель, квантованную с помощью AWQ, с помощью from_pretrained(). По соображениям производительности остальные веса по умолчанию устанавливаются в формат fp16. Используйте параметр dtype, чтобы загрузить эти веса в другом формате.

Если модель загружена на CPU, используйте параметр device_map, чтобы переместить её на ускоритель.

from transformers import AutoModelForCausalLM, AutoTokenizer
from accelerate import Accelerator
import torch

device = Accelerator().device

model = AutoModelForCausalLM.from_pretrained(
  "TheBloke/zephyr-7B-alpha-AWQ",
  dtype=torch.float32,
  device_map=device
)

Используйте attn_implementation, чтобы включить FlashAttention2 и дополнительно ускорить инференс.

from transformers import AutoModelForCausalLM, AutoTokenizer
from accelerate import Accelerator

model = AutoModelForCausalLM.from_pretrained(
  "TheBloke/zephyr-7B-alpha-AWQ",
  attn_implementation="flash_attention_2",
  device_map=Accelerator().device
)

Слитные модули

Сплочённые модули обеспечивают повышенную точность и производительность. Они поддерживаются из коробки для AWQ-модулей архитектур Llama и Mistral, но вы также можете объединять AWQ-модули для неподдерживаемых архитектур.

Слиянные модули не могут использоваться в сочетании с другими методами оптимизации, такими как FlashAttention2.

поддерживаемые архитектуры
неподдерживаемые архитектуры

Создайте AwqConfig и установите параметры fuse_max_seq_len и do_fuse=True, чтобы включить слияние модулей. Параметр fuse_max_seq_len задаёт общую длину последовательности и должен учитывать длину контекста и ожидаемую длину генерации. Для надёжности установите значение с запасом.

Приведённый ниже пример объединяет модули AWQ модели TheBloke/Mistral-7B-OpenOrca-AWQ.

import torch
from transformers import AwqConfig, AutoModelForCausalLM

quantization_config = AwqConfig(
    bits=4,
    fuse_max_seq_len=512,
    do_fuse=True,
)
model = AutoModelForCausalLM.from_pretrained(
  "TheBloke/Mistral-7B-OpenOrca-AWQ",
  quantization_config=quantization_config
).to(0)

Модель TheBloke/Mistral-7B-OpenOrca-AWQ была протестирована с batch_size=1 как с объединёнными модулями, так и без них.

Необъединённый модуль
Размер батчаДлина префиллаДлина декодированияТокены префилла/сТокены/с при декодированииПамять (VRAM)
1323260.098438.45374,50 ГБ (5,68%)
164641333.6731.66044,50 ГБ (5,68%)
11281282434.0631.62724,50 ГБ (5,68%)
12562563072.2638.17314,50 ГБ (5,68%)
15125123184.7431.68194,59 ГБ (5,80%)
1102410243148.1836.80314,81 ГБ (6,07%)
1204820482927.3335.26765,73 ГБ (7,23%)
Слитный модуль
Размер батчаДлина префиллаДлина декодированияТокены префилла/сТокены/с при декодированииПамять (VRAM)
1323281.489980.25694,00 ГБ (5,05%)
164641756.1106.264,00 ГБ (5,05%)
11281282479.32105.6314,00 ГБ (5,06%)
12562561813.685.74854,01 ГБ (5,06%)
15125122848.997.7014,11 ГБ (5,19%)
1102410243044.3587.73234,41 ГБ (5,57%)
1204820482715.1189.47095,57 ГБ (7,04%)

Скорость и пропускная способность слиянных и неслиянных модулей также были протестированы с помощью библиотеки optimum-benchmark.

generate throughput per batch size
память, потребляемая в прямом проходе / размер батча
forward latency per batch size
производительность/размер пакета

ExLlamaV2

Ядра ExLlamaV2 обеспечивают более быстрое префилл и декодирование. Выполните команду ниже, чтобы установить последнюю версию autoawq с поддержкой ExLlamaV2.

pip install git+https://github.com/casper-hansen/AutoAWQ.git

Установите version="exllama" в AwqConfig, чтобы включить ядра ExLlamaV2.

ExLlamaV2 поддерживается на GPU AMD.

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, AwqConfig

quantization_config = AwqConfig(version="exllama")

model = AutoModelForCausalLM.from_pretrained(
    "TheBloke/Mistral-7B-Instruct-v0.1-AWQ",
    quantization_config=quantization_config,
    device_map="auto",
)

Ресурсы

Запустите ноутбук с демо AWQ, чтобы увидеть больше примеров квантования модели, загрузки квантованной модели на Hub и других задач.

Update on GitHub