--- license: apache-2.0 library_name: transformers pipeline_tag: image-text-to-text base_model: orcarouter/Qwen3.8-27B-Uncensored base_model_relation: quantized tags: - awq - w4a16 - int4 - llm-compressor - compressed-tensors - vllm - qwen3_5 - multimodal - mtp - uncensored --- # Qwen3.8-27B-Uncensored-AWQ-W4A16-ASYM 4-битный AWQ-квант [orcarouter/Qwen3.8-27B-Uncensored](https://huggingface.co/orcarouter/Qwen3.8-27B-Uncensored), сделанный [llm-compressor](https://github.com/vllm-project/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`, 256 сэмплов × 2048 токенов, через chat template | | Размер | **19 GB** (было 52 GB в BF16) | ### Что квантовано, а что осталось в BF16 Qwen3.8-27B — гибрид: 64 слоя по схеме `16 × (3 × Gated DeltaNet → 1 × Gated Attention)`, плюс vision-башня и MTP-голова. **В INT4:** - Gated Attention (слои 3, 7, …, 63): `q_proj`, `k_proj`, `v_proj`, `o_proj` - FFN всех 64 слоёв: `gate_proj`, `up_proj`, `down_proj` - Gated DeltaNet (остальные 48 слоёв): `in_proj_qkv`, `in_proj_z`, `out_proj` **Остались в BF16:** - `lm_head` и эмбеддинги - вся vision-башня (`model.visual.*`) — квантование визуального энкодера бьёт по качеству распознавания сильнее, чем экономит память - `linear_attn.in_proj_a` / `in_proj_b` — чувствительные гейты SSM-ветки - вся MTP-голова (`mtp.*`) — чтобы не ломать спекулятивный декодинг > **Про MTP.** `transformers` не инстанцирует MTP-голову для `qwen3_5`, поэтому > llm-compressor её не видит и не сохраняет — наивный квант теряет MTP целиком. > Здесь тензоры `mtp.*` скопированы из исходного BF16-чекпоинта в готовый результат, > зарегистрированы в `model.safetensors.index.json` и внесены в > `quantization_config.ignore`. Спекулятивный декодинг сохранён. > **Про AWQ-mappings.** У гибридной архитектуры нет общего для всех слоёв набора проекций, > поэтому дефолтные маппинги AWQ не резолвятся. В `recipe.yaml` лежат кастомные: отдельный > маппинг для `input_layernorm` full-attention слоёв и отдельный — для DeltaNet-слоёв, > где в `balance_layers` обязаны быть **все** потребители выхода нормы, включая > неквантуемые `in_proj_a` / `in_proj_b`, иначе сглаживание ломает математику. ## Использование (vLLM) ```bash vllm serve Ar4ikov/Qwen3.8-27B-Uncensored-AWQ-W4A16-ASYM \ --max-model-len 262144 \ --tensor-parallel-size 2 ``` ## Использование (transformers) ```python from transformers import AutoModelForImageTextToText, AutoProcessor model = AutoModelForImageTextToText.from_pretrained( "Ar4ikov/Qwen3.8-27B-Uncensored-AWQ-W4A16-ASYM", dtype="auto", device_map="auto" ) processor = AutoProcessor.from_pretrained("Ar4ikov/Qwen3.8-27B-Uncensored-AWQ-W4A16-ASYM") ``` > transformers при загрузке **распаковывает** веса обратно в BF16, так что экономии VRAM > здесь не будет. Реальная экономия видна только в рантаймах с нативными INT4-ядрами > (vLLM, SGLang): ожидаемо ≈ размер файла + KV-кэш. ## Параметры сэмплирования Наследуются от базовой модели: - **Thinking mode:** `temperature=1.0`, `top_p=0.95`, `top_k=20`, `min_p=0.0`, `presence_penalty=0.0` - **Non-thinking:** `temperature=0.7`, `top_p=0.80`, `top_k=20`, `min_p=0.0`, `presence_penalty=1.5` Поддерживается `reasoning_effort` (`low` / `medium` / `xhigh`), контекст 262 144 токена нативно. ## Воспроизводимость В репозитории лежит `recipe.yaml`, сгенерированный llm-compressor. Ключевая часть: ```python 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\..*", ], mappings=MAPPINGS, # см. recipe.yaml )] ``` ## Оговорки - Квантовано 400 Linear-слоёв (64×3 MLP + 16×4 full-attention + 48×3 DeltaNet); 400 тензоров `weight_packed` (I32-упаковка INT4) с `weight_scale` и `weight_zero_point`. - Квант не проходил бенчмарк-валидацию — проверена только связность генерации. Для продакшена прогоните свои эвалы. - Vision-часть не квантовалась, поэтому качество на изображениях должно быть близко к исходной модели; деградация ожидается прежде всего в текстовой части. - Базовая модель — uncensored-файнтюн; квантование не добавляет и не снимает никаких ограничений, поведение наследуется от `orcarouter/Qwen3.8-27B-Uncensored`.