Qwen 177B дома: как запустить Flash-Next через Strata
2026-10-10#ai#flashnext#qwen#guide
Qwen3.8-Flash-Next — это 177 миллиардов параметров, которые ещё год назад требовали серверной стойки. Сегодня они запускаются на обычном домашнем ПК с игровой видеокартой: помогает [Strata](https://github.com/Niko1221/Strata/) — открытый инференс-движок, который держит модель не в VRAM целиком, а размазывает её по всей машине. Ниже — наш реальный опыт: что нужно из железа, сколько чего ест модель и, главное, почему параметры важнее, чем кажется. > Кто хочет понять принцип работы Strata «на пальцах» — очень рекомендую разбор: https://www.youtube.com/watch?v=6WLBmP-tZ0Q. Там наглядно показано, как движок жонглирует экспертами между GPU, RAM и диском. ## Что нужно из софта и железа **Софт:** Python 3.10+, CUDA-рантайм под вашу видеокарту, сам Strata (клонируется с GitHub, ставится одним скриптом), ~80 ГБ места на SSD под веса и ~8 ГБ под MTP-пак (маленькая модель-помощник, о ней ниже). **Железо, на котором это реально работает у нас:** | Компонент | Наш сетап | Комментарий | |---|---|---| | GPU | RTX 3060 12 ГБ | Держит горячий кэш экспертов + KV. 12 ГБ — практический минимум | | RAM | 62 ГБ | Решает, какой квант влезет (см. ниже) | | CPU | Xeon E5-2686 v4 (только AVX2) | Хватает; AVX-512 не обязателен | | Диск | SSD, ~80 ГБ под модель | Первый старт заметно быстрее с SSD | **Сколько ест модель (замеры, контекст 256k):** | Квант | Веса на диске | RAM под экспертов | VRAM (эксперты + KV) | Скорость | |---|---|---|---|---| | IQ2_XS | ~68 ГБ | ~33 ГБ | ~6.5 ГБ из 12 | ~40 ток/с | | IQ3_XXS | ~76 ГБ | ~39–47 ГБ | ~11.3 ГБ из 12 | ~37 ток/с | Правило простое: IQ2_XS живёт на машине с 48+ ГБ RAM, IQ3_XXS хочет 64 ГБ. VRAM при этом почти всегда впритык — и это нормально, так задумано: Strata держит в видеокарте только самое горячее. ## Как это работает в двух словах Модель — это Mixture-of-Experts: 24 576 маленьких «специалистов», из которых на каждый токен нужны лишь ~10. Strata раскладывает их по трём полкам: самые ходовые эксперты — в VRAM (считает GPU), все — в RAM (считает CPU параллельно), плюс таблица поиска на SSD. Рядом бежит MTP-драфтер — крошечная модель, которая угадывает следующие токены, а большая их только проверяет пачкой. Отсюда скорость 35–40 ток/с на железе, которое «не должно» тянуть 177B. И вот тут начинаются параметры. Потому что «угадывает и проверяет» — это уже не детерминированная математика, а конвейер с допусками. Каждый допуск — это ручка, которую можно крутить. Мы крутили. Рассказываем. ## Параметры: почему это самое важное ### 1. KV-кэш: точность памяти (`--kv`) KV-кэш — это «память» модели о текущем диалоге. Его тоже можно сжимать: - `q4_0` — 4 бита, дёшево по памяти, но перплексия выше: модель хуже держит ранние инструкции в длинном контексте; - `k8v4` — ключи 8 бит, значения 4 бита: наш выбор. Заметно цепче recall на 100k+ токенов, стоит +1–1.5 ГБ VRAM; - `q8_0` — хотели, посчитали: +~1.8 ГБ к KV при свободных ~0.9 ГБ VRAM. Не влезет. Оставили `k8v4`. Урок: KV-биты — это не «качество ответов вообще», это конкретно **память на длинных контекстах**. Если модель «забывает начало задачи» — смотрите сюда первым делом. ### 2. Спекуляция MTP: скорость vs честность (`--spec`, `--spec-min-p`) MTP-драфтер угадывает токены, большая модель проверяет. Параметр `--spec` — сколько токенов угадывать за раз, `--spec-min-p` — порог доверия к угаданному. Наша история — лучший аргумент за важность этой ручки: - `--spec 4 --spec-min-p 0.5`: генерация кода разваливалась — дубли функций, мусорные конструкции вида `... if False else (...)`, `try` без `except`. 1 прогон из 3 — брак. «Глупость модели» заключалась в lossy-декодере: неверные угадайки частично принимались. - `--spec 2 --spec-min-p 0.9`: **10 из 10 прогонов той же задачи — чисто**, ноль дублей, весь код компилируется. А теперь сюрприз: скорость при этом **выросла** с ~30–33 до ~37–40 ток/с. Короткие драфты принимаются в 88–93% случаев, а длинные часто отбрасывались целиком — движок переделывал работу. Меньше амбиций у угадайки = меньше выброшенных токенов. Урок: агрессивная спекуляция — это не «бесплатная скорость», это **приблизительное декодирование**. Для чата сойдёт, для кода — проверяйте acceptance rate в логах (`drafts accepted`), и если ниже ~85%, душите спекуляцию. ### 3. Сэмплирование: характер модели (`temperature`, `top_p`, `top_k`, `min_p`, штрафы) Это самая контринтуитивная часть. Наш путь: - Старт: `presence_penalty 0.8 / frequency_penalty 0.5` (казалось разумным — «пусть не повторяется»). Итог: модель **переименовывала идентификаторы**, писала «дубли другими словами», оставляла мусорные остатки. Высокий frequency penalty в коде — это прямой запрет повторять токены, а код без повторов не бывает. - Финал (рецепт из документации Qwen для кодинга): `temperature 1.0, top_p 0.95, top_k 20, min_p 0, presence 0.0, frequency 0.1`. Для кода presence должен быть **в нуле** — модели надо разрешить повторяться. Отдельно про temperature: для thinking-режима кодинга Qwen рекомендует именно 1.0 (без thinking — 0.7). Мы проверили: на длинных файлах с thinking temperature 0.3 и 1.0 дают одинаково чистый результат — решает thinking, а не температура. Но дефолт держим по рецепту. Урок: штрафы за повтор — враг номер один для генерации кода. Если модель «выдумывает новые имена на ровном месте» — смотрите на presence/frequency первым делом, а не на размер модели. ### 4. Thinking-бюджет: страховка от ухода в астрал (`reasoning_budget_tokens`) Рассуждающие модели на простом вопросе могут думать 8 000 токенов (у нас — 4 минуты на вопрос из одного предложения). Бюджет в 3000 токенов принудительно заворачивает размышление в ответ. Без него модель однажды жевала бы 32k контекст thinking до 16 минут. Это не «ухудшение качества», это отсечение хвоста, который почти никогда не окупается. ### 5. Резиденты: что держать горячим (`--resident-experts`, `--kv-resident`) `--resident-experts` держит часть экспертов прибитыми к GPU, `--kv-resident 32768` — 32k слотов KV в видеопамяти. У нас при 89k контекста 99%+ KV-чтений бьёт в VRAM — то есть память «горячая», без просадок на шину. Крутить эти ручки имеет смысл только при свободной VRAM, которой у нас нет (свободно ~0.9 ГБ). Оставили как есть. ## Итоговые параметры запуска Ниже — конфиг, к которому мы пришли после всех итераций (квант IQ3_XXS, контекст 256k, GPU 12 ГБ). Пути даны условно — подставьте свои. **Параметры движка:** ``` --pack <путь-к-паку-iq3_xxs> # предупакованные эксперты --native <файл-весов-1-из-2.gguf> # первая половина весов --ple-gguf <файл-весов-2-из-2.gguf> # вторая половина весов --expert-profile <expert-profile.bin> # профиль горячих экспертов --expert-cache auto # размер GPU-кэша — на усмотрение движка --prefill auto # чанки чтения промпта — авто --max-context 262144 # 256k контекст --mtp <путь-к-mtp-паку> # драфтер для спекуляции --spec 2 # драфт по 2 токена (было 4 — давало брак) --spec-min-p 0.9 # порог доверия драфту (был 0.5) --kv k8v4 # KV: ключи 8 бит, значения 4 бита --resident-experts # часть экспертов прибита к GPU --kv-resident 32768 # 32k слотов KV в видеопамяти ``` **Сэмплирование и reasoning (блок `sampling` + бюджет):** ``` temperature: 1.0 # по рецепту Qwen для thinking-кодинга top_p: 0.95 top_k: 20 min_p: 0 presence_penalty: 0.0 # под код ``` ## Вывод 177B-модель дома — это не «поставил и работает», это стенд с пятью ручками, каждая из которых меняет поведение сильнее, чем смена кванта. Во многом это было бы невозможно без качественной оптимизации использования ресурсов системы в Strata.