4-битный AWQ-квант Qwen/Qwen3.8-27B, сделанный
llm-compressor в формате
compressed-tensors (pack-quantized). Грузится в vLLM нативно.
Квантование выполнено с BF16-весов базовой модели, а не с официального FP8-чекпоинта — чтобы не накладывать INT4 поверх уже потерянной точности.
| Схема | W4A16_ASYM (asymmetric, zero-point) |
| Group size | 128 |
| Стратегия | group, type: int, num_bits: 4 |
| Формат | compressed-tensors / pack-quantized |
| Активации | BF16 (weight-only) |
| Калибровка | HuggingFaceH4/ultrachat_200k, 512 сэмплов × 2048 токенов, через chat template |
Qwen3.8-27B — гибрид: 64 слоя по схеме 16 × (3 × Gated DeltaNet → 1 × Gated Attention),
плюс vision-башня и MTP-голова.
В INT4:
q_proj, k_proj, v_proj, o_projgate_proj, up_proj, down_projin_proj_qkv, in_proj_z, out_projОстались в BF16:
lm_head и эмбеддингиmodel.visual.*) — квантование визуального энкодера бьёт по качеству
распознавания сильнее, чем экономит памятьlinear_attn.in_proj_a / in_proj_b — чувствительные гейты SSM-веткиmtp.*) — чтобы не ломать спекулятивный декодингПро MTP.
transformersне инстанцирует MTP-голову дляqwen3_5(_keys_to_ignore_on_load_unexpected = [r"^mtp.*", ...]), поэтому llm-compressor её не видит и не сохраняет — наивный квант теряет MTP целиком. Здесь тензорыmtp.*скопированы из базового BF16-чекпоинта в готовый результат, зарегистрированы вmodel.safetensors.index.jsonи внесены вquantization_config.ignore. Спекулятивный декодинг сохранён.
Тот же набор ignore использован в других AWQ-квантах этой модели и в моих предыдущих
квантах Qwen3.5-гибридов.
vllm serve Ar4ikov/Qwen3.8-27B-AWQ-W4A16-ASYM \
--max-model-len 262144 \
--tensor-parallel-size 2
from transformers import AutoModelForImageTextToText, AutoProcessor
model = AutoModelForImageTextToText.from_pretrained(
"Ar4ikov/Qwen3.8-27B-AWQ-W4A16-ASYM", dtype="auto", device_map="auto"
)
processor = AutoProcessor.from_pretrained("Ar4ikov/Qwen3.8-27B-AWQ-W4A16-ASYM")
transformers при загрузке распаковывает веса обратно в BF16, так что экономии VRAM здесь не будет. Реальная экономия видна только в рантаймах с нативными INT4-ядрами (vLLM, SGLang).
Наследуются от базовой модели:
temperature=1.0, top_p=0.95, top_k=20, min_p=0.0, presence_penalty=0.0temperature=0.7, top_p=0.80, top_k=20, min_p=0.0, presence_penalty=1.5Поддерживается reasoning_effort (low / medium / xhigh), контекст 262 144 токена
нативно (до 1M через YaRN — см. карточку базовой модели).
В репозитории лежит recipe.yaml, сгенерированный llm-compressor. Ключевая часть рецепта:
from llmcompressor.modifiers.awq import AWQModifier
recipe = [AWQModifier(
targets=["Linear"],
scheme="W4A16_ASYM",
ignore=[
"re:.*lm_head",
r"re:model\.visual\..*",
r"re:.*\.linear_attn\.in_proj_a",
r"re:.*\.linear_attn\.in_proj_b",
r"re:mtp\..*",
],
)]
model.safetensors 19 GBmodel-mtp.safetensors 849 MB