Блог AST-SoftPro
Обзор квантов ISTA-DASLab GSQ-RCO для Qwen3.8-27B и Flash-Next: что это за метод и чем отличается от Unsloth
Введение
В 2026 году вокруг GGUF-квантов открылась новая ветка, которая раньше была уделом академических работ. Лаборатория DASLab при IST Austria — та же группа, что стояла за GPTQ, AQLM и SqueezeLLM, — выпустила серию квантов GSQ-RCO для двух актуальных моделей Qwen: Qwen3.8-27B (dense VLM) и Qwen3.8-Flash-Next (MoE на 176–177B параметров). Главная заявка — «task-lossless» кванты, которые при размере в 4–5 раз меньше базового BF16 сохраняют почти все результаты по рассуждению и коду.
Что вы получите из этой статьи:
-
как устроены методы GSQ и RCO и чем они принципиально отличаются от эвристического Unsloth Dynamic;
-
полные таблицы размеров и бенчмарков для Qwen3.8-27B (IQ2_XS–IQ3_S) и Flash-Next (Q2_0, IQ2_XS, IQ3_XXS);
-
сравнение с квантами Unsloth Dynamic на сопоставимых размерах;
-
практические рекомендации: что скачать под ваш VRAM, как запускать в llama.cpp/Ollama/LM Studio и почему для Flash-Next критичен флаг
-lm mmap --lazy-mode on.
💡 Если вы выбираете квант «на глаз» по размеру файла — GSQ-RCO даёт редкую вещь: опубликованные бенчи каждого конкретного размера против BF16. Это снимает главный вопрос локального LLM — «сколько качества я теряю, сжав модель в N раз».
Кто такие ISTA-DASLab и что такое GSQ/RCO
ISTA-DASLab (Distributed Algorithms and Systems Lab, IST Austria) — академическая группа, известная по GPTQ (один из самых распространённых PTQ-методов в индустрии), AQLM и SqueezeLLM. Их подход к квантованию — не эвристики «какой слой важнее», а оптимизация под целевую функцию (task loss) с жёстким бюджетом размера.
Метод состоит из двух независимых этапов:
-
GSQ (Gumbel-Softmax Quantization) — arXiv 2604.18556, код
github.com/IST-DASLab/GSQ. Посттренировочное скалярное квантование, которое совместно обучает назначение координат на неравномерную сетку и масштабы групп через Gumbel-Softmax-релаксацию. Закрывает большую часть разрыва между скалярным и векторным квантованием на 2–3 бита, оставаясь в стандартных GGUF-форматах (IQ2_XS, IQ3_S и т.д.) — то есть работает без патчей в llama.cpp/Ollama/LM Studio. -
RCO (Riemannian Constrained Optimization) — arXiv 2605.00649, код
github.com/IST-DASLab/RCO. Назначает один из K типов кванта каждому из N тензоров под общий бюджет размера. Бюджет переформулируется как гладкое риманово многообразие в логит-пространстве, что позволяет оптимизировать градиентом напрямую по task loss с точным соблюдением бюджета — без «магических» гиперпараметров на саму constraint.
Порядок сборки: (1) для каждого тензора квантуются все кандидатские GGUF-типы через GSQ → база вариантов; (2) RCO-поиск выбирает один тип на тензор под целевой средний bpw; (3) выбранные варианты склеиваются в единый стандартный GGUF.
Ключевое отличие от Unsloth Dynamic:
| Аспект | ISTA-DASLab GSQ-RCO | Unsloth Dynamic (UD) |
|---|---|---|
| Что оптимизирует | Task loss (AIME25, GPQA-D, LCB v6 и др.) через градиент на римановом многообразии | KL-divergence между логитами полной и квантованной модели + эвристики по слоям |
| Тип данных на тензор | Изучается GSQ под конкретный тип (неравномерная сетка) | Стандартные GGUF-типы, выбор «важности» слоя по KLD |
| Бюджет размера | Точное соблюдение через constraint в логит-пространстве | Приблизительный, за счёт выбора типов по эвристике |
| Публикация бенчей per-quant | Да — полная таблица против BF16 и UD для каждого файла | Нет — официальных per-quant бенчей не публикуют; сообщество оценивает «≈ base» |
| MTP drafter | Да, опциональные -mtp сборки (+0.35 GB) |
Да, но только рядом с BF16/Q4_K_M/Q8 (shared-Q4_K_M ~1.9 GB) |
⚠️ Важно: GSQ-RCO — это не «магия, которая лучше всех». Это другой компромисс: качество под конкретные бенчмарки рассуждения/кода в обмен на то, что метод оптимизирован именно под них. Для задач, не входящих в тренировочный набор (например, чистая генерация прозы), разрыв с UD может быть меньше или уходить в другую сторону — см. таблицу ниже: UD-IQ3_S по GPQA-Diamond на 0.51 пункта выше GSQ-RCO IQ3_S при том же размере.
Qwen3.8-27B: размеры и бенчмарки
Базовая модель: Qwen/Qwen3.8-27B, dense VLM, 27B параметров, BF16 = 53.8 GB. Архитектура в GGUF — qwen35. Лицензия apache-2.0 (наследуется от базовой).
Файлы квантов (имя: <model>-GSQ-RCO-<type>.gguf, bpw = фактический средний битрейт всего файла):
| Файл | bpw | Размер | MTP-сборка |
|---|---|---|---|
| IQ2_XS | 2.50 | 8.4 GB | 8.77 GB |
| IQ2_S | 2.75 | 9.3 GB | 9.61 GB |
| IQ3_XXS | 3.00 | 10.1 GB | 10.4 GB |
| IQ3_S (рекомендуемый) | 3.50 | 11.8 GB | 12.1 GB |
| mmproj-Qwen3.8-27B-BF16.gguf | 16 (BF16) | 0.9 GB | общий для всех квантов |
Каждый квант — один файл, без шардов, без n-gram таблицы. Для VLM-режима берётся один mmproj на все сборки.
Бенчмарки (против BF16 и Unsloth Dynamic):
| Вариант | bpw | GB | wiki2↓ | c4↓ | FineWeb-Edu↓ | ZS avg↑ | Recovery | AIME25↑ | GPQA-D↑ | LCB v6↑ |
|---|---|---|---|---|---|---|---|---|---|---|
| BF16 (base) | 16.00 | 53.8 | 7.05 | 11.45 | 8.14 | 74.34 | 100.0% | 100.00 | 89.90 | 85.71 |
| GSQ-RCO IQ2_XS | 2.50 | 8.4 | 7.69 | 12.98 | 9.19 | 74.54 | 100.3% | 96.67 | 84.85 | 76.57 |
| GSQ-RCO IQ2_S | 2.75 | 9.3 | 7.39 | 12.40 | 8.80 | 75.70 | 101.8% | 100.00 | 86.36 | 82.29 |
| GSQ-RCO IQ3_XXS | 3.00 | 10.1 | 7.20 | 12.13 | 8.59 | 74.81 | 100.6% | 100.00 | 88.89 | 84.57 |
| GSQ-RCO IQ3_S | 3.50 | 11.8 | 7.07 | 11.76 | 8.34 | 74.47 | 100.2% | 100.00 | 89.39 | 85.71 |
| UD-IQ2_S | 2.49 | 8.4 | 8.02 | 12.78 | 9.08 | 73.80 | 99.3% | 86.67 | 76.26 | 72.00 |
| UD-Q2_K_XL | 2.88 | 9.8 | 7.54 | 12.25 | 8.69 | 74.37 | 100.0% | 100.00 | 86.87 | 82.28 |
| UD-IQ3_S | 3.52 | 12.0 | 7.16 | 11.75 | 8.34 | 75.49 | 101.5% | 96.67 | 89.90 | 84.00 |
Ключевые наблюдения:
-
IQ3_S (11.8 GB) — task-lossless. Совпадает с BF16 по AIME25 (100.00) и LCB v6 (85.71), в пределах 0.51 по GPQA-Diamond. Task average = 91.70 против 91.87 у base — 99.8% при сжатии в 4.6 раза.
-
IQ2_S (9.3 GB) — единственный вариант с recovery выше BF16 (101.8%). Это не ошибка: zero-shot на малых датасетах имеет большой стандартный разброс, и «выше base» здесь означает паритет в пределах шума.
-
Против UD-IQ2_S при 8.4 GB: GSQ-RCO IQ2_XS выигрывает +10.00 AIME25, +8.59 GPQA-D, +4.57 LCB v6. Это самый большой разрыв в таблице — на нижнем конце битрейта метод оптимизации под task loss даёт ощутимый выигрыш над KLD-эвристикой.
-
Против UD-IQ3_S при ~12 GB: GSQ-RCO IQ3_S выигрывает +3.33 AIME25, +1.71 LCB v6 и на 0.2 GB меньше по размеру; UD держит GPQA-Diamond на 0.51 пункта выше (89.90 против 89.39) и имеет чуть более высокий zero-shot average (75.49 против 74.47).
💡 Практический вывод: если у вас ≤16 GB VRAM и нужен VLM-квант Qwen3.8-27B — берите IQ3_S MTP (12.1 GB). Это «task-lossless» с запасом на KV-кэш и MTP-голову для спекулятивного декодирования. Если VRAM 12–14 GB — IQ3_XXS MTP (10.4 GB) уже совпадает с base по AIME25.
Qwen3.8-Flash-Next: MoE на 176B, два шарда и n-gram таблица
Базовая модель: Qwen/Qwen3.8-Flash-Next, MoE, 177B параметров, BF16 = 354 GB. Это уже не «домашний» размер — без квантования модель не помещается ни в один потребительский VRAM.
Файлы квантов (в отличие от 27B — два шарда):
| Квант | bpw | Шард 1 (веса) | Шард 2 (n-gram) | Итого |
|---|---|---|---|---|
| Q2_0 | 2.40 | 37.6 GB | 28.8 GB | 66.4 GB |
| IQ2_XS | 2.50 | 39.2 GB | 28.8 GB | 68.0 GB |
| IQ3_XXS (рекомендуемый) | 3.00 | 47.0 GB | 28.8 GB | 75.8 GB |
| mmproj-Qwen3.8-Flash-Next-BF16.gguf | 16 (BF16) | 0.91 GB | — | общий для всех квантов |
Шард 2 — это per_layer_token_embd, таблица n-gram на 51.2B параметров, зафиксированная в IQ4_NL (4.5 bpw). Она одинакова во всех трёх квантах и не участвует в GSQ-RCO поиске — это lookup-таблица, а не matmul-веса. Именно поэтому её можно держать на диске через mmap.
Бенчмарки (против BF16 base 354 GB):
| Модель | bpw | Размер | ZS avg↑ | Recovery | AIME25↑ | GPQA-D↑ | LCB v6↑ | Task avg↑ |
|---|---|---|---|---|---|---|---|---|
| BF16 (base) | 16.0 | 354.0 GB | 76.94 | 100.0% | 100.00 | 91.92 | 87.43 | 93.12 |
| GSQ-RCO Q2_0 | 2.40 | 66.4 GB | 78.00 | 101.4% | 96.67 | 89.39 | 81.14 | 89.07 |
| GSQ-RCO IQ2_XS | 2.50 | 68.0 GB | 77.16 | 100.3% | 96.67 | 87.37 | 83.43 | 89.16 |
| GSQ-RCO IQ3_XXS | 3.00 | 75.8 GB | 77.23 | 100.4% | 100.00 | 91.41 | 86.29 | 92.57 |
Наблюдения:
-
IQ3_XXS (75.8 GB) — совпадает с BF16 по AIME25 (100.00) и держит 99.4% task average (92.57 против 93.12). Сжатие в 4.7 раза.
-
Q2_0 жертвует ~3.5 пункта task average ради скорости: по данным лаба, prompt throughput на Q2_0 в 3.4 раза выше, а латентность на 1.9 раза ниже, чем у IQ2_XS — потому что lookup-форматы (IQ*) медленнее на GPU при генерации, а «плоские» Q2_0 идут через обычные matmul.
-
Zero-shot recovery выше 100% во всех трёх квантах — это паритет в пределах стандартной ошибки малых датасетов, не «лучше base».
Критичный момент для запуска: без -lm mmap --lazy-mode on llama.cpp загрузит все 75.8 GB в VRAM — и модель просто не запустится на 2×RTX 5060 Ti (65 GB суммарно). С флагом резидентен только шард 1 (47 GB для IQ3_XXS), а n-gram таблица остаётся на NVMe.
⚠️ Для Flash-Next обязательно
-lm mmap --lazy-mode onи быстрый NVMe SSD. Без этого флаг не даст нужного headroom — случайные обращения к 28.8 GB таблице по SATA/USB-диск превратят генерацию в ползучий процесс.
Сравнение с Unsloth Dynamic: что выбрать
Unsloth Dynamic (UD) — де-факто стандарт community-квантов: эвристика по KL-divergence логитов + «важности» слоёв, выбор типа GGUF на слой. GSQ-RCO — другой подход: градиентная оптимизация под task loss с точным бюджетом размера.
Что мы видим в данных лаба (27B):
| Размер | GSQ-RCO | UD | Разрыв |
|---|---|---|---|
| 8.4 GB | IQ2_XS: AIME25 96.67, GPQA-D 84.85, LCB v6 76.57 | IQ2_S: AIME25 86.67, GPQA-D 76.26, LCB v6 72.00 | GSQ-RCO +10 / +8.6 / +4.6 |
| ~9.3–9.8 GB | IQ2_S: AIME25 100.00, GPQA-D 86.36, LCB v6 82.29 | Q2_K_XL: AIME25 100.00, GPQA-D 86.87, LCB v6 82.28 | Паритет по AIME/LCB, UD +0.51 GPQA-D |
| ~11.8–12 GB | IQ3_S: AIME25 100.00, GPQA-D 89.39, LCB v6 85.71 | IQ3_S: AIME25 96.67, GPQA-D 89.90, LCB v6 84.00 | GSQ-RCO +3.33 / −0.51 / +1.71 |
Практические отличия:
-
MTP drafter. GSQ-RCO кладёт MTP-голову прямо в файл (
-mtpсборка, +0.35 GB) — работает с любым квантом 27B. Unsloth кладёт shared-Q4_K_M drafter (~1.9 GB) только рядом с BF16/Q4_K_M/Q8. Для спекулятивного декодирования на нижних квантах GSQ-RCO выигрывает. -
Один файл против одного файла. 27B: оба подхода — один GGUF, разница только в MTP. Flash-Next: у ISTA два шарда (веса + n-gram), у unsloth UD-Q2_K_XL — один большой файл ~79 GB (по данным сообщества) без отдельной lookup-таблицы.
-
Публикация бенчей. GSQ-RCO публикует полную таблицу per-quant против BF16 и UD. Unsloth не публикует per-quant бенчей вообще — качество оценивается сообществом по «≈ base» на конкретных задачах. Для выбора под конкретный сценарий это асимметрия в пользу ISTA.
-
Скорость генерации. Lookup-форматы (IQ*) медленнее на TG, чем «плоские» Q2_0/Q3_K. Если у вас MoE и важна скорость промпта — Q2_0 GSQ-RCO для Flash-Next даёт 3.4× PP против IQ2_XS при потерях ~3.5 пункта task average.
💡 Правило выбора: для dense моделей ≤30B (Qwen3.8-27B, Llama 3.x) — GSQ-RCO IQ3_S MTP, если VRAM позволяет; UD-Q4_K_M, если нужен максимальный TG и не важна экономия на AIME/LCB. для MoE ≥100B (Flash-Next) — GSQ-RCO IQ3_XXS + mmap, потому что unsloth UD-Q2_K_XL одним файлом 79 GB не оставляет headroom под KV-кэш на 65 GB VRAM.
Как запускать: llama.cpp, Ollama, LM Studio
Qwen3.8-27B (один файл)
# Скачивание (нужен huggingface_hub CLI)
hf download ISTA-DASLab/Qwen3.8-27B-GSQ-RCO-GGUF \
Qwen3.8-27B-GSQ-RCO-IQ3_S-mtp.gguf --local-dir .
# Текстовый режим
llama-cli -m Qwen3.8-27B-GSQ-RCO-IQ3_S-mtp.gguf \
-p "Объясни mixed-precision квантование." -ngl 99
# VLM-режим (берётся общий mmproj)
llama-mtmd-cli -m Qwen3.8-27B-GSQ-RCO-IQ3_S-mtp.gguf \
--mmproj mmproj-Qwen3.8-27B-BF16.gguf \
--image photo.jpg -p "Опиши изображение."
Qwen3.8-Flash-Next (два шарда + mmap)
# Скачивание шарда 1 + mmproj (шард 2 подхватится через split)
hf download ISTA-DASLab/Qwen3.8-Flash-Next-GSQ-RCO-GGUF \
--include "IQ3_XXS/*" mmproj-Qwen3.8-Flash-Next-BF16.gguf --local-dir .
# КРИТИЧНО: -lm mmap --lazy-mode on держит n-gram шард на диске
llama-cli -m IQ3_XXS/Qwen3.8-Flash-Next-GSQ-RCO-IQ3_XXS-00001-of-00002.gguf \
-lm mmap --lazy-mode on \
-p "Объясни mixed-precision квантование." -ngl 99
Ollama и LM Studio
-
Ollama:
ollama run hf.co/ISTA-DASLab/Qwen3.8-27B-GSQ-RCO-GGUF— выберите файл под ваш VRAM. Для Flash-Next:ollama run hf.co/ISTA-DASLab/Qwen3.8-Flash-Next-GSQ-RCO-GGUF:IQ3_XXS(mmap/lazy-mode настраиваются внутри). -
LM Studio: найдите репо по имени, выберите
GSQ-RCO-*сборку; mmap для GGUF включён по умолчанию.
Поддерживаемые раннеры (из панели «Как использовать эту модель» на HuggingFace): vLLM (vllm serve "ISTA-DASLab/Qwen3.8-27B-GSQ-RCO-GGUF", OpenAI-compatible API), Docker Model Runner, Lemonade, Hermes Agent, Pi, OpenClaw, Unsloth Desktop, Jan, Atomic Chat, Google Colab, Kaggle.
⚠️ Для vLLM и других серверных раннеров mmap/lazy-mode настраиваются по-своему — проверьте документацию конкретного раннера перед запуском Flash-Next. Без корректной настройки n-gram шарда модель не запустится на потребительском VRAM.
Рекомендации: что скачать под ваш сценарий
| Сценарий | VRAM | Что брать | Почему |
|---|---|---|---|
| Домашний VLM, Qwen3.8-27B | 16 GB | IQ3_S MTP (12.1 GB) + mmproj 0.9 GB | Task-lossless, запас на KV, MTP для спекулятивного декодирования |
| Компактный VLM, Qwen3.8-27B | 12–14 GB | IQ3_XXS MTP (10.4 GB) + mmproj 0.9 GB | Совпадает с base по AIME25, экономит ~1.7 GB |
| Максимальная скорость на 27B | 16 GB | IQ2_S (9.3 GB) | Recovery 101.8%, быстрый TG, но −4 пункта LCB v6 против IQ3_S |
| MoE Flash-Next, 2×5060 Ti (65 GB) | 65 GB | IQ3_XXS (75.8 GB) + mmap/lazy-mode | Резидентен шард 1 = 47 GB, n-gram на NVMe; AIME25 = base |
| MoE Flash-Next, скорость промпта | 65 GB | Q2_0 (66.4 GB) + mmap/lazy-mode | PP в 3.4 раза выше IQ2_XS, −3.5 пункта task avg |
Общие правила:
-
Всегда берите
-mtpсборку для 27B, если используете llama.cpp с спекулятивным декодированием — это +0.35 GB за заметный прирост TG на длинных ответах. -
Для Flash-Next без mmap/lazy-mode не запускайте — модель не влезет в VRAM и упадёт на этапе загрузки.
-
NVMe SSD обязателен для Flash-Next. SATA/USB-диск убьёт скорость из-за случайных обращений к 28.8 GB n-gram таблице.
-
mmproj — один на все кванты модели. Не скачивайте его отдельно под каждый файл.
💡 Если вы разворачиваете локальный LLM для продакшн-сценария (агентные задачи, RAG, кодинг) — выбор кванта это только половина. Вторая половина: корректная настройка контекста, KV-кэша, спекулятивного декодирования и мониторинга деградации качества на ваших данных. Команды, которые доверяют критичные LLM-инфраструктурные решения опытным специалистам, экономят время на отладке «модель отвечает хуже, чем в бенче» — типичная проблема при неверном выборе кванта под конкретный workload.
Заключение
ISTA-DASLab GSQ-RCO — это академический подход к PTQ, который впервые приносит публикуемые per-quant бенчмарки против BF16 и Unsloth Dynamic в mainstream GGUF-экосистему. Для Qwen3.8-27B это «task-lossless» IQ3_S на 11.8 GB (99.8% task average base, сжатие в 4.6 раза) с MTP-сборками для спекулятивного декодирования. Для Flash-Next — IQ3_XXS на 75.8 GB с AIME25 = base и обязательным mmap/lazy-mode для работы на потребительском VRAM.
По сравнению с Unsloth Dynamic GSQ-RCO выигрывает на нижнем конце битрейта (IQ2_XS против UD-IQ2_S: +10 пунктов AIME25) и по MTP-доступности, но проигрывает UD-IQ3_S на 0.51 пункта GPQA-Diamond при сопоставимом размере. Выбор между ними — вопрос того, что важнее: качество под конкретные бенчмарки рассуждения/кода (GSQ-RCO) или максимальный TG и простота «один файл» (UD).
Что важно помнить:
-
GSQ = Gumbel-Softmax PTQ на 2–3 бита, закрывает разрыв scalar↔vector.
-
RCO = градиентное назначение типа кванта на тензор под точный бюджет размера.
-
Для 27B берите IQ3_S MTP; для Flash-Next — IQ3_XXS + mmap/lazy-mode + NVMe.
-
Публикуемые бенчи per-quant — главное конкурентное преимущество ISTA-DASLab над Unsloth, который не публикует таких данных.