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.