Transformers documentation
AutoRound
AutoRound
AutoRound — это продвинутый алгоритм квантования, обеспечивающий высокую точность даже при 2-битном разрешении. Он использует градиентный спуск по знакам для тонкой настройки значений округления и порогов обрезки min-max всего за 200 шагов. Алгоритм разработан для широкой совместимости: он бесшовно поддерживает широкий спектр LLM и активно расширяется, чтобы охватывать всё больше VLM. Также поддерживаются квантование и инференс на различных аппаратных платформах, включая CPU, XPU и CUDA.
AutoRound также предлагает ряд полезных функций, включая автоматическую настройку и инференс с использованием смешанной разрядности, поддержку типов данных MXFP4 и NVFP4, квантование без модели, экспорт в форматы, такие как GPTQ, AWQ, GGUF и LLM-Compressor, а также гибкие рецепты настройки. Для получения подробного обзора и последних обновлений ознакомьтесь с README AutoRound.
AutoRound изначально разрабатывался как часть Intel Neural Compressor и служил универсальной библиотекой сжатия моделей для глубокого обучения. Со временем он превратился в автономную библиотеку, сфокусированную на оптимизации с низкой точностью для больших языковых моделей (LLM). AutoRound по-прежнему полностью интегрирован с Intel Neural Compressor, и вы можете ознакомиться с репозиторием, чтобы узнать больше.
Установка
pip install auto-round
Поддерживаемые конфигурации квантования
AutoRound поддерживает следующие конфигурации квантования:
- INT2–INT8 Weight-Only
- Смешанная разрядность только для весов
- GGUF Q*_K
- MXFP (ограниченная поддержка)
- NVFP4 (ограниченная поддержка)
Совместимость с оборудованием
CPU, XPU и CUDA как для квантования, так и для инференса.
Квантование и сериализация (офлайн)
В настоящее время для генерации квантованных моделей поддерживается только офлайн-режим.
Использование командной строки
auto-round \
--model Qwen/Qwen3-0.6B \
--scheme "W4A16" \
--group_size 128 \
--output_dir ./tmp_autoroundAutoRound также предлагает ещё четыре рецепта: auto-round-best, auto-round-light, auto-round-opt-rtn, auto-round-rtn, предназначенные для оптимальной точности и повышенной скорости соответственно.
Для 2 бит мы рекомендуем использовать auto-round-best с --enable_alg_ext.
Использование AutoScheme
AutoScheme — это функция, которая за несколько минут автоматически выбирает оптимальную схему квантования из доступных вариантов для каждого слоя, подлежащего квантованию, при заданной целевой средней разрядности.
auto-round \
--model Qwen/Qwen3-0.6B \
--options "W4A16,W2A16G64" \
--target_bits 3.5 \
--output_dir ./tmp_autoroundКомбинации алгоритмов
AutoRound поддерживает комбинацию нескольких алгоритмов, например, AutoRound, AutoRound + AWQ и AutoRound + AWQ + Hadamard (поддержка очень ограничена). В настоящее время мы расширяем поддержку дополнительных алгоритмов. Это позволяет дополнительно оптимизировать результаты квантования, особенно в сценариях, связанных с квантованными активациями.
auto-round \
--model Qwen/Qwen3-0.6B \
--algs "autoround,awq" \
--output_dir ./tmp_autoroundИспользование API AutoRound
Этот параметр обеспечивает более оптимальный баланс между точностью и стоимостью настройки, поэтому он рекомендуется во всех сценариях.
from auto_round import AutoRound
model_name = "Qwen/Qwen3-0.6B"
# mixed bits config
# layer_config = {"model.decoder.layers.6.self_attn.out_proj": {"bits": 2, "group_size": 32}}
ar = AutoRound(
model_name,
scheme="W4A16",
# enable_torch_compile=True,
# layer_config=layer_config,
)
output_dir = "./tmp_autoround"
# format= 'auto_round'(default), 'llm_compressor', "gguf:q4_k_m", 'auto_gptq', 'auto_awq'
ar.quantize_and_save(output_dir, format='auto_round') AutoRoundЛучший рецепт
Этот параметр обеспечивает наилучшую точность в большинстве сценариев, но работает в 4–5 раз медленнее, чем стандартный рецепт AutoRound. Он особенно рекомендуется для 2-битного квантования и является хорошим выбором, если доступны достаточные ресурсы.
from auto_round import AutoRound
model_name = "Qwen/Qwen3-0.6B"
ar = AutoRound(
model_name,
scheme="W4A16",
nsamples=512,
iters=1000,
)
output_dir = "./tmp_autoround"
ar.quantize_and_save(output_dir, format='auto_round') Рецепт AutoRoundLight
Этот параметр обеспечивает наилучшую скорость (в 2–3 раза быстрее, чем AutoRound), однако для небольших моделей и 2-битного квантования он может привести к значительному снижению точности. Рекомендуется использовать его для 4-битных настроек и моделей размером более 3B.
from transformers import AutoModelForCausalLM, AutoTokenizer
from auto_round import AutoRound
model_name = "Qwen/Qwen3-0.6B"
ar = AutoRound(
model_name,
iters=50,
lr=5e-3,
)
output_dir = "./tmp_autoround"
ar.quantize_and_save(output_dir, format='auto_round') Средняя точность W4G128 по 13 задачам (mmlu-pro, if_eval, gsm8k и др.) и результаты по времени (тестирование проводилось на Nvidia A100 80G с использованием версии PyTorch 2.6.0 с включенным enable_torch_compile):
| Модель | Qwen2.5-0.5B-Instruct | Falcon3-3B | Qwen2.5-7B-Instruct | Meta-Llama-3.1-8B-Instruct | Falcon3-10B | Qwen2.5-72B-Instruct |
|---|---|---|---|---|---|---|
| 16bits | 0.4192 | 0.5203 | 0.6470 | 0.6212 | 0.6151 | 0.7229 |
| Лучший | 0.4137(7m) | 0.5142(23m) | 0.6426(58m) | 0.6116(65m) | 0.6092(81m) | 0.7242(575m) |
| По умолчанию | 0.4129(2m) | 0.5133(6m) | 0.6441(13m) | 0.6106(13m) | 0.6080(18m) | 0.7252(118m) |
| Светлый | 0.4052(2m) | 0.5108(3m) | 0.6453(5m) | 0.6104(6m) | 0.6063(6m) | 0.7243(37m) |
Вывод
AutoRound автоматически выбирает лучший доступный бэкенд на основе установленных библиотек и предлагает пользователю установить дополнительные библиотеки, если обнаружен более подходящий бэкенд.
CPU
Поддерживаются 2, 4 и 8 бит. Для инференса рекомендуем использовать бэкенд AutoRound Kernel (ARK). Для работы с ARK требуется PyTorch 2.8.0 или более поздняя версия.
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "OPEA/Qwen2.5-1.5B-Instruct-int4-sym-inc"
model = AutoModelForCausalLM.from_pretrained(model_name, device_map="cpu", dtype="auto")
tokenizer = AutoTokenizer.from_pretrained(model_name)
text = "There is a girl who likes adventure,"
inputs = tokenizer(text, return_tensors="pt").to(model.device)
print(tokenizer.decode(model.generate(**inputs, max_new_tokens=50, do_sample=False)[0]))XPU
Поддерживаются 2, 4 и 8 бит. Для инференса рекомендуем использовать бэкенд AutoRound Kernel (ARK). Для работы с ARK требуется PyTorch 2.8.0 или более поздняя версия.
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "OPEA/Qwen2.5-1.5B-Instruct-int4-sym-inc"
model = AutoModelForCausalLM.from_pretrained(model_name, device_map="xpu", dtype="auto")
tokenizer = AutoTokenizer.from_pretrained(model_name)
text = "There is a girl who likes adventure,"
inputs = tokenizer(text, return_tensors="pt").to(model.device)
print(tokenizer.decode(model.generate(**inputs, max_new_tokens=50, do_sample=False)[0]))CUDA
Поддерживает 2–8 бит. Для вывода с точностью 4 и 8 бит мы рекомендуем использовать GPTQModel.
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name = "OPEA/Qwen2.5-1.5B-Instruct-int4-sym-inc"
model = AutoModelForCausalLM.from_pretrained(model_name, device_map="cuda", dtype="auto")
tokenizer = AutoTokenizer.from_pretrained(model_name)
text = "There is a girl who likes adventure,"
inputs = tokenizer(text, return_tensors="pt").to(model.device)
print(tokenizer.decode(model.generate(**inputs, max_new_tokens=50, do_sample=False)[0]))Укажите бэкенд для инференса
AutoRound автоматически выбирает бэкенд для каждого слоя на основе совместимости. Как правило, приоритет следующий: Marlin > ExLLaMAV2 > Triton, однако окончательный выбор зависит от таких факторов, как размер группы, разрядность, формат упаковки, аппаратное устройство и другие детали реализации. Дополнительные сведения см. в разделе backends,
Бэкенд не всегда является оптимальным для определённых устройств. Вы можете указать предпочитаемый бэкенд, например, “ark” для CPU и XPU или “marlin/exllamav2/triton” для CUDA, в зависимости от ваших потребностей или совместимости с оборудованием. Обратите внимание, что могут потребоваться дополнительные соответствующие библиотеки.
from transformers import AutoModelForCausalLM, AutoTokenizer, AutoRoundConfig
model_name = "OPEA/Qwen2.5-1.5B-Instruct-int4-sym-inc"
quantization_config = AutoRoundConfig(backend="ark")
model = AutoModelForCausalLM.from_pretrained(model_name, device_map="cpu", quantization_config=quantization_config, dtype="auto")
tokenizer = AutoTokenizer.from_pretrained(model_name)
text = "There is a girl who likes adventure,"
inputs = tokenizer(text, return_tensors="pt").to(model.device)
print(tokenizer.decode(model.generate(**inputs, max_new_tokens=50, do_sample=False)[0]))Конвертация GPTQ/AWQ в AutoRound
Большинство моделей GPTQ/AWQ можно конвертировать в формат AutoRound для лучшей совместимости и поддержки на устройствах Intel. Обратите внимание, что конфигурация квантования изменится, если модель будет сериализована.
from transformers import AutoModelForCausalLM, AutoTokenizer, AutoRoundConfig
model_name = "ybelkada/opt-125m-gptq-4bit"
quantization_config = AutoRoundConfig()
model = AutoModelForCausalLM.from_pretrained(model_name, device_map="cpu", quantization_config=quantization_config, dtype="auto")
tokenizer = AutoTokenizer.from_pretrained(model_name)
text = "There is a girl who likes adventure,"
inputs = tokenizer(text, return_tensors="pt").to(model.device)
print(tokenizer.decode(model.generate(**inputs, max_new_tokens=50, do_sample=False)[0]))Проблемы
Если вы столкнётесь с какими-либо проблемами в интеграции с transformers, пожалуйста, создайте issue в репозитории transformers.
Если вы столкнётесь с какими-либо проблемами в auto-round, пожалуйста, создайте issue в репозитории AutoRound.
Благодарности
Особая благодарность открытым библиотекам с поддержкой низкого уровня точности, таким как AutoGPTQ, AutoAWQ, GPTQModel, Triton, Marlin и ExLLaMAV2, за предоставление CUDA-ядер с низкой точностью, которые используются в AutoRound.
Вклад
Вклад в AutoRound приветствуется и высоко ценится! Будь то исправление ошибок, улучшение документации, добавление новых функций или предложение улучшений, ваша помощь всегда востребована.
Update on GitHub