Qwen3.8-27B W4A16 на CMP 170HX
Пять профилей одной модели на одной карте, методика HyperQwen (real_rep, LABD) плюс
prefill на глубине. Рассуждения — серверный дефолт профиля: у профилей без суффикса они включены,
у *-no-thinking выключены флагом --default-chat-template-kwargs.
Выводы
- Рассуждения почти не влияют на скорость: разница вкл/выкл в пределах ±10% и на tune, и на default.
- FULL-графы на TRITON дают ~2,4× на шаг: 21,6 мс против 51,4 мс у default (PIECEWISE). На коротком и среднем контексте tune генерирует в 2–2,5 раза быстрее.
- На глубине TRITON проигрывает: prefill в 1,3–4 раза медленнее, ход агента на 121k стоит 21,6 с против 12,1 с, а decode tune падает с глубиной (122 → 52 ток/с) и около 100k уступает default (~60–68 ток/с, держится ровно).
- max-num-batched-tokens 8192 vs 16384 — без разницы: decode, prefill и ход агента совпадают до долей процента (на TRITON prefill упирается в ядро внимания на глубине, а не в размер чанков); у 8192 KV-пул чуть больше (930k против 911k).
- На твоих реальных сессиях (медиана 140–160k, до 221k) default быстрее tune в 2–2,4 раза (раздел «Реальные сессии»): почти всё время там уходит на генерацию, а decode tune на такой глубине медленнее, чем у default. Подтверждено фактом: сессия «Спека» на новом tune заняла 97 мин, модель для default на тех же шагах — ~40 мин.
- Для долгой работы на пределе контекста решает ход агента на глубине (раздел «Ход агента по глубине»): на 121k у default 12 с против 22 с у tune, и decode default там тоже не медленнее (~60–68 ток/с против 40–52).
- Для пошаговой работы агентов решает время шага, а не пиковые ток/с (раздел «Шаг агента»): tune выигрывает только на коротком контексте (~7k), уже с ~30k default быстрее за счёт prefill, хотя генерирует в 2,5 раза медленнее. tune-fa (FLASH_ATTN + bf16) проверяет, можно ли получить FULL-графы без проигрыша на prefill.
Реальные сессии opencode на разных профилях
| Сессия | Реально (по часам) | default | tune | tune-fa |
|---|---|---|---|---|
| Единый URL с ID инстанса24.09 · шла на default71 вызовов · глубина 186k, макс 221k · сгенерировано 62k · с чужими запросами 0% времени · ещё 96 вызовов субагентов на облачной qwen3.8-flash — исключены | 19 минработа модели 19 мин · параллельность ×1.00 · ошибка модели +24% | 23 минработа модели 23 мин = prefill 6 + decode 17 | 61 минработа модели 61 мин = prefill 33 + decode 28 | 22 минработа модели 22 мин = prefill 7 + decode 14 |
| Поддержка ASR в проекте26.09 · 10 сессий · шла на tune, тогда копии default282 вызовов · глубина 142k, макс 221k · сгенерировано 532k · с чужими запросами 22% времени · ещё 5 вызовов субагентов на облачной qwen3.8-flash — исключены | 180 минработа модели 198 мин · параллельность ×1.10 · ошибка модели -11% | 159 минработа модели 175 мин = prefill 30 + decode 146 | 334 минработа модели 368 мин = prefill 151 + decode 217 | 137 минработа модели 151 мин = prefill 35 + decode 115 |
| Спека раздела тестирования моделей27.09 · шла на tune (уже TRITON)54 вызовов · глубина 151k, макс 197k · сгенерировано 133k · с чужими запросами 0% времени | 97 минработа модели 97 мин · параллельность ×1.00 · ошибка модели -32% | 38 минработа модели 38 мин = prefill 2 + decode 37 | 66 минработа модели 66 мин = prefill 10 + decode 56 | 31 минработа модели 31 мин = prefill 2 + decode 29 |
| Реализация add-model-test, блоки 1–3 (бэкенд)27.09 · шла на tune-fa · одно сжатие контекста100 вызовов · глубина 189k, макс 215k · сгенерировано 123k · с чужими запросами 0% времени | 33 минработа модели 33 мин · параллельность ×1.00 · ошибка модели +4% | 40 минработа модели 40 мин = prefill 4 + decode 36 | 81 минработа модели 81 мин = prefill 22 + decode 60 | 35 минработа модели 35 мин = prefill 5 + decode 30 |
| ☁ Qwen Cloud (qwen3.8-flash): реализация add-model-test, блоки 4–627.09 · шла в облаке (qwen3.8-flash), «реально» — облачное время; профили — те же вызовы на нашей GPU113 вызовов · глубина 151k, макс 186k · сгенерировано 139k · с чужими запросами 0% времени | 36 минработа модели 36 мин · параллельность ×1.00 | 40 минработа модели 40 мин = prefill 2 + decode 38 | 70 минработа модели 70 мин = prefill 12 + decode 58 | 33 минработа модели 33 мин = prefill 3 + decode 30 |
| ☁ Anthropic (Claude Sonnet 5): реализация двух блоков openspec, сторонний проект24.09 · Claude Sonnet 5; токены посчитаны токенизатором Claude, у Qwen их число другое91 вызовов · глубина 122k, макс 213k · сгенерировано 56k · с чужими запросами 0% времени | 12 минработа модели 12 мин · параллельность ×1.00 | 17 минпо токенам Claude: работа модели 17 мин = prefill 2 + decode 1533 минс рассуждениями Qwen (×2.0 генерации): prefill 2 + decode 31 | 33 минпо токенам Claude: работа модели 33 мин = prefill 10 + decode 2457 минс рассуждениями Qwen (×2.0 генерации): prefill 10 + decode 47 | 15 минпо токенам Claude: работа модели 15 мин = prefill 2 + decode 1227 минс рассуждениями Qwen (×2.0 генерации): prefill 2 + decode 25 |
Крупно — время по часам: сумма работы модели, делённая на параллельность внутри сессии (субагенты работают одновременно; параллельность = сумма шагов / время, когда шёл хотя бы один шаг). Для профилей параллельность переносится как есть — это верно при линейном масштабировании, которое на этой карте подтверждено для default; для tune (FULL-графы, max-num-seqs 4) не проверено. Каждый вызов модели из реальной сессии (новые токены, глубина, сгенерировано вместе с рассуждениями) пересчитан по измеренным кривым профиля: новые токены × стоимость prefill на этой глубине + сгенерированное / decode на этой глубине. Время инструментов исключено — от профиля оно не зависит. Сессии шли на конфигурации default (FLASHINFER + fp8; tune 26.09 ещё был её копией — на TRITON он переведён 27.09), по ним модель откалибрована (prefill ×0.57, decode ×1.02: реальная работа с сэмплированием temperature 1.0 против greedy-бенча). Выше самой глубокой измеренной точки кривые экстраполированы линейно. Проверка: сессия «Спека» реально шла на новом tune (TRITON) — модель, откалиброванная только на сессиях default, недооценила её время на ~⅓, то есть на глубине 150–200k tune в реальности ещё медленнее, чем в таблице. Вторая проверка — сессия «Реализация» на tune-fa: модель дала 35 мин против реальных 33 (+4%), в том числе с глубиной до 215k и сжатием контекста (52k на входе, 8.5k на выходе за 92 с, ~92 ток/с). Параллельные запросы (субагенты и другие сессии opencode к той же модели) учтены: калибровка сделана только по шагам, шедшим в одиночку; сессия на tune почти вся одиночная (6% времени с соседями), сессия ASR на default частично шла параллельно (~20% времени), так что её фактическое время — скорее верхняя оценка для default. Вызовы субагентов, работавших на облачной qwen3.8-flash (96 в «Едином URL», 5 в ASR), через локальную GPU не шли и из факта и модели исключены.
Локально, Qwen Cloud и Anthropic
| Глубина контекста | Локально: Qwen3.8-27B, tune-faреализация add-model-test, блоки 1–3 | ☁ Qwen Cloud (qwen3.8-flash)реализация add-model-test, блоки 4–6 | ☁ Anthropic (Claude Sonnet 5)два блока openspec, сторонний проект | tune-fa, бенчдля сравнения |
|---|---|---|---|---|
| до 100k | ответ 1.1 сгенерация 20 ток/свызовов 5: коротких 3, длинных 1 · мало данных | ответ 5.1 сгенерация — ток/свызовов 9: коротких 6, длинных 0 · мало данных | ответ 3.7 сгенерация 128 ток/свызовов 23: коротких 10, длинных 5 | ход 2.7 сdecode 101 ток/сглубина 61k, +3k новых |
| 100–150k | ответ 1.8 сгенерация 77 ток/свызовов 17: коротких 8, длинных 4 | ответ 5.1 сгенерация 75 ток/свызовов 44: коротких 5, длинных 27 | ответ 3.7 сгенерация 122 ток/свызовов 38: коротких 15, длинных 9 | ход 3.7 сdecode 89 ток/сглубина 121k, +2k новых |
| 150–200k | ответ 2.9 сгенерация 73 ток/свызовов 44: коротких 14, длинных 22 | ответ 5.3 сгенерация 106 ток/свызовов 60: коротких 20, длинных 24 | ответ 4.0 сгенерация 136 ток/свызовов 23: коротких 7, длинных 11 | ход 5.1 сdecode 65 ток/сглубина 184k, +2k новых |
| 200k+ | ответ 3.7 сгенерация 100 ток/свызовов 33: коротких 19, длинных 5 | — | ответ 3.9 сгенерация 150 ток/свызовов 7: коротких 4, длинных 2 · мало данных | ход 6.5 сdecode 62 ток/сглубина 230k, +3k новых |
| Объём генерации | Локально: Qwen3.8-27B, tune-faреализация add-model-test, блоки 1–3 | ☁ Qwen Cloud (qwen3.8-flash)реализация add-model-test, блоки 4–6 | ☁ Anthropic (Claude Sonnet 5)два блока openspec, сторонний проект |
|---|---|---|---|
| Вызовов модели | 100 | 113 | 91 |
| Сгенерировано (с рассуждениями) | 123k ток | 139k ток | 56k ток |
| На вызов: среднее | 1236 ток | 1233 ток | 621 ток |
| На вызов: медиана / p90 | 254 / 4028 ток | 405 / 4102 ток | 257 / 1574 ток |
По реальным вызовам сессий, сгруппированным по глубине контекста (новые + прочитанные из кэша токены). Ответ — медиана времени коротких вызовов (<200 токенов на выходе): ожидание до генерации вместе с prefill новых токенов и сетью. Генерация — выход длинных вызовов (≥500 токенов), делённый на их время без этого ожидания; у Qwen включает рассуждения, у Claude — thinking. Сжатие контекста исключено. «Мало данных» — меньше трёх коротких или длинных вызовов в диапазоне. Бенч tune-fa — контрольный замер той же карты: ход агента (+~1.9k новых токенов к закэшированному контексту, больше, чем в типичном шаге) и greedy decode. Токены Claude считаются его токенизатором, поэтому ток/с между Claude и Qwen сравнимы приблизительно; секунды — напрямую.
Энергия
| Сессия | Реально | default | tune | tune-fa |
|---|---|---|---|---|
| Единый URLшла на default · 19 мин работы модели · 62k ток | 70 Вт·ч0.57 ₽ · 224 Вт в среднем · 1.12 на 1k ток · сверх простоя 41 | 90 Вт·ч0.74 ₽ · 1.44 на 1k ток | 203 Вт·ч1.66 ₽ · 3.23 на 1k ток | 83 Вт·ч0.68 ₽ · 1.33 на 1k ток |
| Поддержка ASRшла на default · 181 мин работы модели · 532k ток | 703 Вт·ч5.74 ₽ · 234 Вт в среднем · 1.32 на 1k ток · сверх простоя 426 | 680 Вт·ч5.55 ₽ · 1.28 на 1k ток | 1226 Вт·ч10.01 ₽ · 2.31 на 1k ток | 582 Вт·ч4.75 ₽ · 1.09 на 1k ток |
| Спека тестированияшла на tune · 97 мин работы модели · 133k ток | 324 Вт·ч2.64 ₽ · 200 Вт в среднем · 2.42 на 1k ток · сверх простоя 175 | 149 Вт·ч1.22 ₽ · 1.12 на 1k ток | 220 Вт·ч1.80 ₽ · 1.65 на 1k ток | 122 Вт·ч0.99 ₽ · 0.91 на 1k ток |
| Реализация 1–3шла на tune-fa · 33 мин работы модели · 123k ток | 128 Вт·ч1.05 ₽ · 232 Вт в среднем · 1.04 на 1k ток · сверх простоя 77 | 156 Вт·ч1.27 ₽ · 1.26 на 1k ток | 271 Вт·ч2.21 ₽ · 2.19 на 1k ток | 133 Вт·ч1.09 ₽ · 1.08 на 1k ток |
| LABD на глубине | ~100k | ~200k |
|---|---|---|
| tune-fa | 8.7 Дж/ток7.4 Вт·ч · 271 Вт | 12.9 Дж/ток11.0 Вт·ч · 256 Вт |
| default | 12.2 Дж/ток10.4 Вт·ч · 265 Вт | 18.8 Дж/ток16.0 Вт·ч · 270 Вт |
| tune-mnbt16k | 25.8 Дж/ток22.0 Вт·ч · 224 Вт | 57.1 Дж/ток48.7 Вт·ч · 213 Вт |
| tune-nothink | 28.6 Дж/ток22.6 Вт·ч · 220 Вт | — |
Розетка меряет всю машину (CPU, SSD, HDD, GPU), история — Home Assistant, точка каждые ~10–30 с. Простой сервера с загруженной моделью — 92 Вт, это 2.2 кВт·ч в сутки (18.02 ₽ в сутки, 540.52 ₽ в месяц при 8.16 ₽/кВт·ч) независимо от профиля. Работа модели под агентной сессией (~230 Вт) — 1.88 ₽ в час; 1M сгенерированных токенов в агентной сессии на tune-fa ≈ 8.49 ₽. «Реально» — энергия за время, пока локальная модель работала над шагом сессии (время инструментов и облачных субагентов исключено); «сверх простоя» — то, что добавила сама работа. Для профилей — модельное время сессии (раздел выше) × средняя мощность этого профиля под реальной сессией: default 233 Вт, tune 200 Вт, tune-fa 232 Вт. LABD — энергия всей задачи, включая prefill документа, делённая на сгенерированные токены (6 задач × 512).
Локально и облако
| Сессия | Вход новый | Вход из кэша | Выход | qwen3.8-flash по API | Qwen Cloud по подписке | Z.ai GLM-5.3-flash, пик | Локально, электричество |
|---|---|---|---|---|---|---|---|
| Единый URL (локальная часть) | 0.50M | 11.9M | 63k | $0.30≈ 25 ₽ | 338 кр.≈ 13 ₽ · 0.8% месяца | 834 кр.вне пика 417 кр. · ≈ 12 ₽ · 4% недели | 0.57 ₽70 Вт·ч |
| Поддержка ASR | 2.90M | 36.6M | 532k | $1.27≈ 108 ₽ | 1454 кр.≈ 57 ₽ · 3.2% месяца | 3141 кр.вне пика 1571 кр. · ≈ 44 ₽ · 16% недели | 5.74 ₽703 Вт·ч |
| Спека тестирования | 0.16M | 7.8M | 133k | $0.21≈ 18 ₽ | 242 кр.≈ 9 ₽ · 0.5% месяца | 580 кр.вне пика 290 кр. · ≈ 8 ₽ · 3% недели | 2.64 ₽324 Вт·ч |
| Реализация 1–3 | 0.40M | 16.9M | 124k | $0.39≈ 33 ₽ | 445 кр.≈ 17 ₽ · 1.0% месяца | 1139 кр.вне пика 570 кр. · ≈ 16 ₽ · 6% недели | 1.05 ₽128 Вт·ч |
| Реализация 4–6 — шла в облаке | 0.26M | 16.3M | 139k | $0.36≈ 31 ₽ | 417 кр.≈ 16 ₽ · 0.9% месяца | 1081 кр.вне пика 541 кр. · ≈ 15 ₽ · 5% недели | — |
Облако — публичный API-тариф qwen3.8-flash: вход $0.15, чтение из кэша $0.016, выход $0.47 за 1M токенов; курс 85 ₽/$. В агентной сессии основная часть счёта — чтение кэша: на каждом шаге заново читается контекст ~150–200k. Локально — только электричество за время работы модели (8.16 ₽/кВт·ч), без железа и его амортизации; сюда же добавляется простой 18 ₽ в сутки, если модель держать загруженной круглосуточно (≈12 ₽ при выключении на ночь 00–08). Подписка qwencloud: $62.22 за квартал ($20.74 ≈ 1763 ₽ в месяц) за 45,000 кредитов в месяц ($0.46 за 1000 кредитов); по замеру на конце сессии 4–6 списывается ~1144 кредитов на $1 API-тарифа, то есть через подписку токены в ~1.9 раза дешевле API (калибровка по 5 шагам в 16:54–16:56 МСК — грубая; в рабочие часы провайдеры могут применять повышающий коэффициент, поэтому нужен ещё замер вне пиковых часов). У Qwen Cloud ночная скидка 60% для части моделей — 22:00–08:00 UTC+8 (17:00–03:00 МСК); замер пришёлся на дневной тариф. Z.ai — точная формула из документации: кредиты = (вход×2.3 + кэш×0.56 + выход×8) / 10 000 для GLM-5.3-flash, в пик (пн–пт 09:00–13:00 МСК) полный расход, в остальное время и выходные — 50%; проверено на сессии 27.09: расчёт 56.1 кредита, в кабинете 56. Подписка Lite $43.2 за квартал, 10,000 кредитов в неделю (2 000 на 5 часов); рубли — при полном использовании недельного лимита. Токены наших сессий посчитаны токенизатором Qwen, у GLM их число немного другое. По времени облако не быстрее: сессия 4–6 — 113 вызовов, глубина до 186k, работа модели 36 мин (~64 ток/с с учётом prefill); те же вызовы по модели сессий заняли бы на tune-fa ~33 мин, на default ~40, на tune ~62.
Запуск модели
| Профиль | Прогретый кэш | Первый запуск / холодный кэш | Запусков | CUDA-графы |
|---|---|---|---|---|
| tune-fa | 4.3 мин | 7.5 мин | 2 | FULL_AND_PIECEWISE |
| default | 8.0 мин | 11.2 мин | 3 | PIECEWISE |
| default-no-thinking | — | 8.2 мин | 1 | PIECEWISE |
| tune | 4.2 мин | 7.7 мин | 5 | FULL_AND_PIECEWISE |
| tune-no-thinking | 4.2 мин | 7.7 мин | 2 | FULL_AND_PIECEWISE |
Время от команды start до ответа /health (загрузка весов ~17 с, torch.compile, профилирование памяти, захват CUDA-графов). «Прогретый» — самый быстрый из запусков: compile-кэш на хосте уже собран под этот профиль; «холодный» — первый запуск после правки профиля или с очищенным кэшем. Кэш хранится на хосте и переживает перезапуски, поэтому после первого старта профиль стартует прогретым. default дольше всех из-за захвата графов в режиме PIECEWISE (FLASHINFER + DFlash на sm80 не даёт FULL-графов) — 8–11 мин против ~4,5 у tune-fa.
Ход агента по глубине контекста
| Контекст | tune (batch 8192) | tune | tune-no-thinking | default | default-no-thinking | tune-fa |
|---|---|---|---|---|---|---|
| 8k | 3.2 с3.2 + 500/112 ≈ 8 с | 3.2 с3.2 + 500/126 ≈ 7 с | 3.2 с3.2 + 500/124 ≈ 7 с | 4.2 с4.2 + 500/59 ≈ 13 с | 4.2 с4.2 + 500/65 ≈ 12 с | 1.4 с1.4 + 500/128 ≈ 5 с |
| 31k | 8.4 с8.4 + 500/91 ≈ 14 с | 8.4 с8.4 + 500/85 ≈ 14 с | 8.3 с8.3 + 500/101 ≈ 13 с | 3.6 с3.6 + 500/63 ≈ 12 с | 3.6 с3.6 + 500/72 ≈ 11 с | 2.1 с2.1 + 500/122 ≈ 6 с |
| 61k | 14.5 с14.5 + 500/66 ≈ 22 с | 14.5 с14.5 + 500/69 ≈ 22 с | 14.4 с14.4 + 500/71 ≈ 21 с | 7.6 с7.6 + 500/61 ≈ 16 с | 7.6 с7.6 + 500/66 ≈ 15 с | 2.7 с2.7 + 500/101 ≈ 8 с |
| 122k | 21.6 с21.6 + 500/52 ≈ 31 с | 21.3 с21.3 + 500/51 ≈ 31 с | 21.2 с21.2 + 500/41 ≈ 33 с | 12.2 с12.2 + 500/70 ≈ 19 с | 12.0 с12.0 + 500/61 ≈ 20 с | 3.7 с3.7 + 500/89 ≈ 9 с |
| 185k | — | 33.8 с33.8 + 500/31 ≈ 50 с | 33.3 с33.3 + 500/31 ≈ 49 с | 12.7 с12.7 + 500/54 ≈ 22 с | — | 5.1 с5.1 + 500/65 ≈ 13 с |
| 231k | — | 50.4 с50.4 + 500/32 ≈ 66 с | 49.9 с49.9 + 500/28 ≈ 68 с | 15.0 с15.0 + 500/78 ≈ 21 с | — | 6.5 с6.5 + 500/62 ≈ 15 с |
Крупно — ход агента: время до первого токена, когда к уже закэшированному контексту добавилось ~2k токенов (ответ инструмента в opencode). Ниже — полный шаг с ответом на 500 токенов: ход + генерация на этой глубине. Подсвечен самый быстрый ход на каждой глубине. Для долгой работы на пределе контекста главная строка — нижняя: выше 128k (до 262k) не мерили, там разница только растёт.
Сводка
| Профиль | Рассуждения | real decode, ток/с | real e2e, ток/с | ток/шаг | мс/шаг | TTFT | LABD decode, ток/с | LABD без copy | LABD ток/шаг | KV-пул, ток. |
|---|---|---|---|---|---|---|---|---|---|---|
| tune (batch 8192)TRITON · int8 KV · batch 8192 | вкл | 165.1 | 161.2 | 3.57 | 21.6 | 0.14 с | 99.6 | 97.2 | 3.14 | 930 511 |
| tuneTRITON · int8 KV · batch 16384 | вкл | 165.1 | 161.3 | 3.57 | 21.6 | 0.14 с | 104.0 | 101.2 | 3.29 | 910 673 |
| tune-no-thinkingTRITON · int8 KV · batch 16384 | выкл | 172.1 | 168.5 | 3.71 | 21.5 | 0.12 с | 85.4 | 87.2 | 2.69 | 869 693 |
| defaultFLASHINFER · fp8 KV · batch 8192 | вкл | 66.1 | 65.4 | 3.40 | 51.4 | 0.16 с | 63.7 | 62.4 | 3.27 | 796 825 |
| default-no-thinkingFLASHINFER · fp8 KV · batch 8192 | выкл | 77.6 | 76.8 | 3.97 | 50.9 | 0.15 с | 49.4 | 50.3 | 2.54 | 840 708 |
| tune-faFLASH_ATTN · bf16 KV · batch 16384 | вкл | 164.6 | 160.5 | 3.47 | 21.0 | 0.16 с | 133.0 | 129.8 | 3.29 | 482 215 |
real — 8 реальных промптов × до 1024 токенов, медиана 3 повторов. LABD — 6 задач × 512 токенов над документом ~24k токенов, decode без prefill; «без copy» — без задачи copy, на которой наша модель отказывается копировать текст (77 токенов вместо 512). ток/шаг — средняя длина принятого за шаг спекулятивного декодинга (1 + принятые драфты / шаги). Подсвечено лучшее значение в колонке.
*-no-thinking.LABD по задачам
| Профиль | copy | code | edit | quote | summary | qa |
|---|---|---|---|---|---|---|
| tune (batch 8192) | 112.23.53 | 108.53.45 | 104.33.28 | 99.23.16 | 87.02.73 | 90.42.84 |
| tune | 118.43.74 | 109.63.49 | 123.83.92 | 93.82.96 | 97.13.09 | 89.12.81 |
| tune-no-thinking | 49.51.57 | 169.65.39 | 89.22.81 | 99.23.15 | 72.62.29 | 61.41.93 |
| default | 69.83.66 | 61.83.18 | 69.03.55 | 63.03.23 | 58.22.98 | 61.13.13 |
| default-no-thinking | 30.11.57 | 75.83.89 | 51.82.64 | 55.12.84 | 45.62.35 | 37.61.94 |
| tune-fa | 149.63.70 | 131.43.25 | 162.54.02 | 125.83.13 | 110.92.75 | 128.23.17 |
В ячейке decode ток/с, под ним ток/шаг. copy/code/edit/quote копируют контекст — там работает lookup-драфтинг; summary/qa — свободный текст.
Шаг агента
| Профиль | 8k | 32k | 64k | 128k | 192k | 240k |
|---|---|---|---|---|---|---|
| tune (batch 8192) | 6 с · 12 сход 3.2 с · decode 112.1 | 12 с · 19 сход 8.4 с · decode 90.7 | 19 с · 30 сход 14.5 с · decode 66.5 | 27 с · 41 сход 21.6 с · decode 51.8 | — | — |
| tune | 6 с · 11 сход 3.2 с · decode 126.2 | 12 с · 20 сход 8.4 с · decode 84.5 | 19 с · 29 сход 14.5 с · decode 68.7 | 27 с · 41 сход 21.3 с · decode 50.9 | 44 с · 67 сход 33.8 с · decode 30.5 | 60 с · 81 сход 50.4 с · decode 32.2 |
| tune-no-thinking | 6 с · 11 сход 3.2 с · decode 123.7 | 11 с · 18 сход 8.3 с · decode 100.6 | 19 с · 28 сход 14.4 с · decode 71.5 | 29 с · 46 сход 21.2 с · decode 40.8 | 43 с · 66 сход 33.3 с · decode 31.0 | 61 с · 86 сход 49.9 с · decode 27.9 |
| default | 9 с · 21 сход 4.2 с · decode 59.5 | 8 с · 20 сход 3.6 с · decode 62.7 | 12 с · 24 сход 7.6 с · decode 61.3 | 16 с · 26 сход 12.2 с · decode 69.8 | 18 с · 31 сход 12.7 с · decode 54.3 | 19 с · 28 сход 15.0 с · decode 78.1 |
| default-no-thinking | 9 с · 20 сход 4.2 с · decode 65.2 | 8 с · 17 сход 3.6 с · decode 72.3 | 12 с · 23 сход 7.6 с · decode 65.8 | 17 с · 28 сход 12.0 с · decode 61.4 | — | — |
| tune-fa | 4 с · 9 сход 1.4 с · decode 128.5 | 5 с · 10 сход 2.1 с · decode 121.8 | 6 с · 13 сход 2.7 с · decode 101.0 | 7 с · 15 сход 3.7 с · decode 88.7 | 10 с · 20 сход 5.1 с · decode 65.3 | 11 с · 23 сход 6.5 с · decode 61.8 |
Время одного шага opencode без учёта самого инструмента: ход (время до первого токена, когда к закэшированному контексту добавилось ~2k токенов ответа инструмента) плюс генерация ответа на этой глубине. Крупно — шаг с ответом на 300 и на 1000 токенов, ниже — из чего он складывается. Подсвечен самый быстрый профиль на каждой глубине (для ответа на 300 токенов). Главная метрика для пошаговой работы агентов.
Prefill и ход агента на глубине
| Профиль | 8k | 32k | 64k | 128k | 192k | 240k |
|---|---|---|---|---|---|---|
| tune (batch 8192) | 1 811decode 112.1 · ход 3.2 с | 996decode 90.7 · ход 8.4 с | 611decode 66.5 · ход 14.5 с | 347decode 51.8 · ход 21.6 с | — | — |
| tune | 1 792decode 126.2 · ход 3.2 с | 1 001decode 84.5 · ход 8.4 с | 613decode 68.7 · ход 14.5 с | 349decode 50.9 · ход 21.3 с | 240decode 30.5 · ход 33.8 с | 196decode 32.2 · ход 50.4 с |
| tune-no-thinking | 1 791decode 123.7 · ход 3.2 с | 1 001decode 100.6 · ход 8.3 с | 613decode 71.5 · ход 14.4 с | 349decode 40.8 · ход 21.2 с | 240decode 31.0 · ход 33.3 с | 196decode 27.9 · ход 49.9 с |
| default | 2 265decode 59.5 · ход 4.2 с | 2 055decode 62.7 · ход 3.6 с | 1 782decode 61.3 · ход 7.6 с | 1 400decode 69.8 · ход 12.2 с | 1 143decode 54.3 · ход 12.7 с | 1 008decode 78.1 · ход 15.0 с |
| default-no-thinking | 2 298decode 65.2 · ход 4.2 с | 2 056decode 72.3 · ход 3.6 с | 1 782decode 65.8 · ход 7.6 с | 1 400decode 61.4 · ход 12.0 с | — | — |
| tune-fa | 2 336decode 128.5 · ход 1.4 с | 2 132decode 121.8 · ход 2.1 с | 1 875decode 101.0 · ход 2.7 с | 1 517decode 88.7 · ход 3.7 с | 1 263decode 65.3 · ход 5.1 с | 1 125decode 61.8 · ход 6.5 с |
Крупно — холодный prefill, ток/с (уникальный префикс, 0 попаданий в кэш). Ниже — decode на этой глубине и время до первого токена «хода агента»: тот же промпт плюс ~2k токенов нового хвоста, как ответ инструмента в opencode.
Проверка дословного копирования (Bug B)
- tune: 128 длин промпта, все ответы дословные
- tune-fa: 128 длин промпта, все ответы дословные
Свип длины промпта по всем вычетам mod 128 с попаданием в prefix-кэш: под FULL-графами у HyperQwen одна длина из 128 давала пустой ответ или бред без ошибок в логах.
Профили
| Настройка | default | default-no-thinking | tune | tune-no-thinking | tune-fa |
|---|---|---|---|---|---|
| Attention backend | FLASHINFER | FLASHINFER | TRITON_ATTN | TRITON_ATTN | FLASH_ATTN |
| KV-кэш | fp8 | fp8 | int8_per_token_head | int8_per_token_head | bfloat16 |
| CUDA-графы | PIECEWISE (FULL недоступен) | PIECEWISE (FULL недоступен) | FULL_AND_PIECEWISE | FULL_AND_PIECEWISE | FULL_AND_PIECEWISE |
| KV-пул, токенов | 796 825 | 840 708 | 910 673 | 869 693 | 482 215 |
| max-num-batched-tokens | 8192 | 8192 | 16384 | 16384 | 16384 |
| max-num-seqs | 256 (дефолт) | 256 (дефолт) | 4 | 4 | 4 |
| Спекулятивный декодинг | dflash k=7attention_backend=FLASH_ATTN, kv_cache_dtype=auto | dflash k=7attention_backend=FLASH_ATTN, kv_cache_dtype=auto | dflash k=7draft_sample_method=probabilistic | dflash k=7draft_sample_method=probabilistic | dflash k=7draft_sample_method=probabilistic |
| Рассуждения | вкл (дефолт модели) | выкл (серверный дефолт) | вкл (дефолт модели) | выкл (серверный дефолт) | вкл (дефолт модели) |
| VLLM_SPEC_DECODE_ATTN | — | — | 1 | 1 | 1 |
| VLLM_DFLASH2_LOOKUP | — (0) | — (0) | 1 | 1 | 1 |
| VLLM_PREFILL_ATTN | — | — | — | — | int8 |
| prefix-match-unit | 16 | 16 | 16 | 16 | 16 |
| gpu-memory-utilization | 0.90 | 0.90 | 0.90 | 0.90 | 0.90 |
| Инициализация движка | 576 сcompile-кэш тёплый/холодный | 388 сcompile-кэш тёплый/холодный | 161 сcompile-кэш тёплый/холодный | 361 сcompile-кэш тёплый/холодный | 354 сcompile-кэш тёплый/холодный |
Снимок профилей с прода (модель dbirks/Qwen3.8-27B-W4A16-AutoRound, драфтер syvai/Qwen3.8-27B-DFlash2-W4A16, образ llm-manager-vllm-dflash2:0.28.0). Выделены строки, где профили различаются. CUDA-графы, KV-пул и время инициализации — из логов vLLM на прогонах этого отчёта. Строка «tune (batch 8192)» в таблицах выше — tune с max-num-batched-tokens 8192 (временная правка на время прогона).
default · fa55887e-109b-44dc-8422-88cc0c806e3f · llm-manager-vllm-dflash2:0.28.0
Действующий default-профиль (2026-09-21): переименован из dflash2-262k, конфигурация синхронизирована с tune — FLASHINFER, prefix-match-unit=16, kv-cache-dtype fp8, speculative decoding DFlash2 (syvai/Qwen3.8-27B-DFlash2-W4A16, num_speculative_tokens=7) на собственном образе vLLM 0.28.0+patches. Веса — квантованный (lm_head/embed_tokens int8) чекпойнт на storage default/SSD.
- --max-model-len
- "262144"
- --gpu-memory-utilization
- "0.9"
- --max-num-batched-tokens
- "8192"
- --tensor-parallel-size
- "1"
- --model
- dbirks/Qwen3.8-27B-W4A16-AutoRound
- --max-model-len
- "262144"
- --trust-remote-code
- --gpu-memory-utilization
- "0.90"
- --max-num-batched-tokens
- "8192"
- --tensor-parallel-size
- "1"
- --enable-auto-tool-choice
- --tool-call-parser
- qwen3_xml
- --reasoning-parser
- qwen3
- --speculative-config
- "{\"method\":\"dflash\",\"model\":\"syvai/Qwen3.8-27B-DFlash2-W4A16\",\"num_speculative_tokens\":7,\"attention_backend\":\"FLASH_ATTN\",\"kv_cache_dtype\":\"auto\"}"
- --attention-backend
- FLASHINFER
- --prefix-match-unit
- "16"
- --kv-cache-dtype
- fp8
- --enable-prompt-tokens-details
- --enable-per-request-metrics(пусто)
default-no-thinking · da3d50e1-d927-4cca-b160-6aa7eaf1d174 · llm-manager-vllm-dflash2:0.28.0
Копия профиля default с отключёнными рассуждениями на уровне сервера (--default-chat-template-kwargs enable_thinking=false; клиент может переопределить per-request). Для сравнения с условиями HyperQwen (greedy, без thinking). Создан 2026-09-27.
- --max-model-len
- "262144"
- --gpu-memory-utilization
- "0.9"
- --max-num-batched-tokens
- "8192"
- --tensor-parallel-size
- "1"
- --model
- dbirks/Qwen3.8-27B-W4A16-AutoRound
- --max-model-len
- "262144"
- --trust-remote-code
- --gpu-memory-utilization
- "0.90"
- --max-num-batched-tokens
- "8192"
- --tensor-parallel-size
- "1"
- --enable-auto-tool-choice
- --tool-call-parser
- qwen3_xml
- --reasoning-parser
- qwen3
- --speculative-config
- "{\"method\":\"dflash\",\"model\":\"syvai/Qwen3.8-27B-DFlash2-W4A16\",\"num_speculative_tokens\":7,\"attention_backend\":\"FLASH_ATTN\",\"kv_cache_dtype\":\"auto\"}"
- --attention-backend
- FLASHINFER
- --prefix-match-unit
- "16"
- --kv-cache-dtype
- fp8
- --enable-prompt-tokens-details
- --enable-per-request-metrics
- --default-chat-template-kwargs
- '{"enable_thinking": false}'
(пусто)
tune · 3fb7bb87-3e4b-4c60-8cb8-80e81bd8ca9d · llm-manager-vllm-dflash2:0.28.0
2026-09-27: путь автора HyperQwen для sm80 long-ctx — TRITON_ATTN + int8_per_token_head KV + VLLM_SPEC_DECODE_ATTN=1 (split-KV verify), цель — FULL_AND_PIECEWISE вместо принудительного PIECEWISE у FLASHINFER; lookup-драфтинг, draft_sample_method=probabilistic, max-num-seqs 4. VLLM_FP8_SPEC_FULL_CG/VLLM_ALIGN_HETEROGENEOUS_ATTN_PAGES — из чужого образа, в нашем не читаются. Проверить: режим графов в логе, Bug B (verbatim-свип около кратных 128), холодный prefill. Прежняя версия (FLASHINFER+fp8) = профиль default. 2026-09-27 (2): max-num-batched-tokens 8192→16384 — ускорить prefill на глубине (int8 TRITON prefill ~2x медленнее FA).
- --model
- dbirks/Qwen3.8-27B-W4A16-AutoRound
- --max-model-len
- "262144"
- --trust-remote-code
- --gpu-memory-utilization
- "0.90"
- --max-num-batched-tokens
- "16384"
- --max-num-seqs
- "4"
- --tensor-parallel-size
- "1"
- --enable-auto-tool-choice
- --tool-call-parser
- qwen3_xml
- --reasoning-parser
- qwen3
- --speculative-config
- "{\"method\":\"dflash\",\"model\":\"syvai/Qwen3.8-27B-DFlash2-W4A16\",\"num_speculative_tokens\":7,\"draft_sample_method\":\"probabilistic\"}"
- --attention-backend
- TRITON_ATTN
- --kv-cache-dtype
- int8_per_token_head
- --prefix-match-unit
- "16"
- --enable-prompt-tokens-details
- --enable-per-request-metrics
FLASHINFER_DISABLE_VERSION_CHECK=1 PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True VLLM_ALIGN_HETEROGENEOUS_ATTN_PAGES=1 VLLM_DFLASH2_DRAFT_TOPK_TOPP=1 VLLM_DFLASH2_LOOKUP=1 VLLM_FP8_SPEC_FULL_CG=1 VLLM_SPEC_DECODE_ATTN=1 VLLM_SPEC_DECODE_ATTN_QMAX=8 VLLM_USE_FLASHINFER_SAMPLER=0
tune-no-thinking · 6e4b88b4-0bbf-4e40-9036-4b22b4a590c8 · llm-manager-vllm-dflash2:0.28.0
Копия профиля tune с отключёнными рассуждениями на уровне сервера (--default-chat-template-kwargs enable_thinking=false; клиент может переопределить per-request). Для сравнения с условиями HyperQwen (greedy, без thinking). Создан 2026-09-27.
- --model
- dbirks/Qwen3.8-27B-W4A16-AutoRound
- --max-model-len
- "262144"
- --trust-remote-code
- --gpu-memory-utilization
- "0.90"
- --max-num-batched-tokens
- "16384"
- --max-num-seqs
- "4"
- --tensor-parallel-size
- "1"
- --enable-auto-tool-choice
- --tool-call-parser
- qwen3_xml
- --reasoning-parser
- qwen3
- --speculative-config
- "{\"method\":\"dflash\",\"model\":\"syvai/Qwen3.8-27B-DFlash2-W4A16\",\"num_speculative_tokens\":7,\"draft_sample_method\":\"probabilistic\"}"
- --attention-backend
- TRITON_ATTN
- --kv-cache-dtype
- int8_per_token_head
- --prefix-match-unit
- "16"
- --enable-prompt-tokens-details
- --enable-per-request-metrics
- --default-chat-template-kwargs
- '{"enable_thinking": false}'
FLASHINFER_DISABLE_VERSION_CHECK=1 PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True VLLM_ALIGN_HETEROGENEOUS_ATTN_PAGES=1 VLLM_DFLASH2_DRAFT_TOPK_TOPP=1 VLLM_DFLASH2_LOOKUP=1 VLLM_FP8_SPEC_FULL_CG=1 VLLM_SPEC_DECODE_ATTN=1 VLLM_SPEC_DECODE_ATTN_QMAX=8 VLLM_USE_FLASHINFER_SAMPLER=0
tune-fa · 9064ea22-340c-42a9-ab77-396705d49711 · llm-manager-vllm-dflash2:0.28.0
2026-09-27: кандидат «лучшее от обоих» — FLASH_ATTN + bf16 KV (быстрый режим HyperQwen CTX=fast): FULL-графы, FA2-prefill (+VLLM_PREFILL_ATTN=int8, SageAttention-style int8-QK prefill для hd256), split-KV verify-ядро VLLM_SPEC_DECODE_ATTN (bf16-путь). Остальное как tune (lookup, draft_sample_method=probabilistic, max-num-seqs 4, batch 16384). Цена — KV-пул ~вдвое меньше int8.
- --model
- dbirks/Qwen3.8-27B-W4A16-AutoRound
- --max-model-len
- "262144"
- --trust-remote-code
- --gpu-memory-utilization
- "0.90"
- --max-num-batched-tokens
- "16384"
- --max-num-seqs
- "4"
- --tensor-parallel-size
- "1"
- --enable-auto-tool-choice
- --tool-call-parser
- qwen3_xml
- --reasoning-parser
- qwen3
- --speculative-config
- "{\"method\":\"dflash\",\"model\":\"syvai/Qwen3.8-27B-DFlash2-W4A16\",\"num_speculative_tokens\":7,\"draft_sample_method\":\"probabilistic\"}"
- --attention-backend
- FLASH_ATTN
- --kv-cache-dtype
- bfloat16
- --prefix-match-unit
- "16"
- --enable-prompt-tokens-details
- --enable-per-request-metrics
FLASHINFER_DISABLE_VERSION_CHECK=1 PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True VLLM_ALIGN_HETEROGENEOUS_ATTN_PAGES=1 VLLM_DFLASH2_DRAFT_TOPK_TOPP=1 VLLM_DFLASH2_LOOKUP=1 VLLM_FP8_SPEC_FULL_CG=1 VLLM_PREFILL_ATTN=int8 VLLM_SPEC_DECODE_ATTN=1 VLLM_SPEC_DECODE_ATTN_QMAX=8 VLLM_USE_FLASHINFER_SAMPLER=0