gpu-cmp170 · NDIV 68 · vLLM 0.28.0 + DFlash2 k=7 · greedy

Qwen3.8-27B W4A16 на CMP 170HX

Пять профилей одной модели на одной карте, методика HyperQwen (real_rep, LABD) плюс prefill на глубине. Рассуждения — серверный дефолт профиля: у профилей без суффикса они включены, у *-no-thinking выключены флагом --default-chat-template-kwargs.

Выводы

Реальные сессии opencode на разных профилях

СессияРеально (по часам)defaulttunetune-fa
Единый URL с ID инстанса24.09 · шла на default71 вызовов · глубина 186k, макс 221k · сгенерировано 62k · с чужими запросами 0% времени · ещё 96 вызовов субагентов на облачной qwen3.8-flash — исключены19 минработа модели 19 мин · параллельность ×1.00 · ошибка модели +24%23 минработа модели 23 мин = prefill 6 + decode 1761 минработа модели 61 мин = prefill 33 + decode 2822 минработа модели 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 146334 минработа модели 368 мин = prefill 151 + decode 217137 минработа модели 151 мин = prefill 35 + decode 115
Спека раздела тестирования моделей27.09 · шла на tune (уже TRITON)54 вызовов · глубина 151k, макс 197k · сгенерировано 133k · с чужими запросами 0% времени97 минработа модели 97 мин · параллельность ×1.00 · ошибка модели -32%38 минработа модели 38 мин = prefill 2 + decode 3766 минработа модели 66 мин = prefill 10 + decode 5631 минработа модели 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 3681 минработа модели 81 мин = prefill 22 + decode 6035 минработа модели 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.0040 минработа модели 40 мин = prefill 2 + decode 3870 минработа модели 70 мин = prefill 12 + decode 5833 минработа модели 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.0017 минпо токенам Claude: работа модели 17 мин = prefill 2 + decode 1533 минс рассуждениями Qwen (×2.0 генерации): prefill 2 + decode 3133 минпо токенам Claude: работа модели 33 мин = prefill 10 + decode 2457 минс рассуждениями Qwen (×2.0 генерации): prefill 10 + decode 4715 минпо токенам 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, сторонний проект
Вызовов модели10011391
Сгенерировано (с рассуждениями)123k ток139k ток56k ток
На вызов: среднее1236 ток1233 ток621 ток
На вызов: медиана / p90254 / 4028 ток405 / 4102 ток257 / 1574 ток

По реальным вызовам сессий, сгруппированным по глубине контекста (новые + прочитанные из кэша токены). Ответ — медиана времени коротких вызовов (<200 токенов на выходе): ожидание до генерации вместе с prefill новых токенов и сетью. Генерация — выход длинных вызовов (≥500 токенов), делённый на их время без этого ожидания; у Qwen включает рассуждения, у Claude — thinking. Сжатие контекста исключено. «Мало данных» — меньше трёх коротких или длинных вызовов в диапазоне. Бенч tune-fa — контрольный замер той же карты: ход агента (+~1.9k новых токенов к закэшированному контексту, больше, чем в типичном шаге) и greedy decode. Токены Claude считаются его токенизатором, поэтому ток/с между Claude и Qwen сравнимы приблизительно; секунды — напрямую.

Энергия

СессияРеальноdefaulttunetune-fa
Единый URLшла на default · 19 мин работы модели · 62k ток70 Вт·ч0.57 ₽ · 224 Вт в среднем · 1.12 на 1k ток · сверх простоя 4190 Вт·ч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 ток · сверх простоя 426680 Вт·ч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 ток · сверх простоя 175149 Вт·ч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 ток · сверх простоя 77156 Вт·ч1.27 ₽ · 1.26 на 1k ток271 Вт·ч2.21 ₽ · 2.19 на 1k ток133 Вт·ч1.09 ₽ · 1.08 на 1k ток
LABD на глубине~100k~200k
tune-fa8.7 Дж/ток7.4 Вт·ч · 271 Вт12.9 Дж/ток11.0 Вт·ч · 256 Вт
default12.2 Дж/ток10.4 Вт·ч · 265 Вт18.8 Дж/ток16.0 Вт·ч · 270 Вт
tune-mnbt16k25.8 Дж/ток22.0 Вт·ч · 224 Вт57.1 Дж/ток48.7 Вт·ч · 213 Вт
tune-nothink28.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 по APIQwen Cloud по подпискеZ.ai GLM-5.3-flash, пикЛокально, электричество
Единый URL (локальная часть)0.50M11.9M63k$0.30≈ 25 ₽338 кр.≈ 13 ₽ · 0.8% месяца834 кр.вне пика 417 кр. · ≈ 12 ₽ · 4% недели0.57 ₽70 Вт·ч
Поддержка ASR2.90M36.6M532k$1.27≈ 108 ₽1454 кр.≈ 57 ₽ · 3.2% месяца3141 кр.вне пика 1571 кр. · ≈ 44 ₽ · 16% недели5.74 ₽703 Вт·ч
Спека тестирования0.16M7.8M133k$0.21≈ 18 ₽242 кр.≈ 9 ₽ · 0.5% месяца580 кр.вне пика 290 кр. · ≈ 8 ₽ · 3% недели2.64 ₽324 Вт·ч
Реализация 1–30.40M16.9M124k$0.39≈ 33 ₽445 кр.≈ 17 ₽ · 1.0% месяца1139 кр.вне пика 570 кр. · ≈ 16 ₽ · 6% недели1.05 ₽128 Вт·ч
Реализация 4–6 — шла в облаке0.26M16.3M139k$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-fa4.3 мин7.5 мин2FULL_AND_PIECEWISE
default8.0 мин11.2 мин3PIECEWISE
default-no-thinking—8.2 мин1PIECEWISE
tune4.2 мин7.7 мин5FULL_AND_PIECEWISE
tune-no-thinking4.2 мин7.7 мин2FULL_AND_PIECEWISE

Время от команды start до ответа /health (загрузка весов ~17 с, torch.compile, профилирование памяти, захват CUDA-графов). «Прогретый» — самый быстрый из запусков: compile-кэш на хосте уже собран под этот профиль; «холодный» — первый запуск после правки профиля или с очищенным кэшем. Кэш хранится на хосте и переживает перезапуски, поэтому после первого старта профиль стартует прогретым. default дольше всех из-за захвата графов в режиме PIECEWISE (FLASHINFER + DFlash на sm80 не даёт FULL-графов) — 8–11 мин против ~4,5 у tune-fa.

Ход агента по глубине контекста

Контекстtune (batch 8192)tunetune-no-thinkingdefaultdefault-no-thinkingtune-fa
8k3.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 с
31k8.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 с
61k14.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 с
122k21.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 без copyLABD ток/шагKV-пул, ток.
tune (batch 8192)TRITON · int8 KV · batch 8192вкл165.1161.23.5721.60.14 с99.697.23.14930 511
tuneTRITON · int8 KV · batch 16384вкл165.1161.33.5721.60.14 с104.0101.23.29910 673
tune-no-thinkingTRITON · int8 KV · batch 16384выкл172.1168.53.7121.50.12 с85.487.22.69869 693
defaultFLASHINFER · fp8 KV · batch 8192вкл66.165.43.4051.40.16 с63.762.43.27796 825
default-no-thinkingFLASHINFER · fp8 KV · batch 8192выкл77.676.83.9750.90.15 с49.450.32.54840 708
tune-faFLASH_ATTN · bf16 KV · batch 16384вкл164.6160.53.4721.00.16 с133.0129.83.29482 215

real — 8 реальных промптов × до 1024 токенов, медиана 3 повторов. LABD — 6 задач × 512 токенов над документом ~24k токенов, decode без prefill; «без copy» — без задачи copy, на которой наша модель отказывается копировать текст (77 токенов вместо 512). ток/шаг — средняя длина принятого за шаг спекулятивного декодинга (1 + принятые драфты / шаги). Подсвечено лучшее значение в колонке.

Ориентир из чужого отчёта (другая CMP 170HX, стек автора TRITON + int8, FULL-графы, MAX_SEQS=1, рассуждения выключены): real 129.2 ток/с, LABD 103.9 ток/с при NDIV 68. Сравнивать с ним строки *-no-thinking.

LABD по задачам

Профильcopycodeeditquotesummaryqa
tune (batch 8192)112.23.53108.53.45104.33.2899.23.1687.02.7390.42.84
tune118.43.74109.63.49123.83.9293.82.9697.13.0989.12.81
tune-no-thinking49.51.57169.65.3989.22.8199.23.1572.62.2961.41.93
default69.83.6661.83.1869.03.5563.03.2358.22.9861.13.13
default-no-thinking30.11.5775.83.8951.82.6455.12.8445.62.3537.61.94
tune-fa149.63.70131.43.25162.54.02125.83.13110.92.75128.23.17

В ячейке decode ток/с, под ним ток/шаг. copy/code/edit/quote копируют контекст — там работает lookup-драфтинг; summary/qa — свободный текст.

Шаг агента

Профиль8k32k64k128k192k240k
tune (batch 8192)6 с · 12 сход 3.2 с · decode 112.112 с · 19 сход 8.4 с · decode 90.719 с · 30 сход 14.5 с · decode 66.527 с · 41 сход 21.6 с · decode 51.8——
tune6 с · 11 сход 3.2 с · decode 126.212 с · 20 сход 8.4 с · decode 84.519 с · 29 сход 14.5 с · decode 68.727 с · 41 сход 21.3 с · decode 50.944 с · 67 сход 33.8 с · decode 30.560 с · 81 сход 50.4 с · decode 32.2
tune-no-thinking6 с · 11 сход 3.2 с · decode 123.711 с · 18 сход 8.3 с · decode 100.619 с · 28 сход 14.4 с · decode 71.529 с · 46 сход 21.2 с · decode 40.843 с · 66 сход 33.3 с · decode 31.061 с · 86 сход 49.9 с · decode 27.9
default9 с · 21 сход 4.2 с · decode 59.58 с · 20 сход 3.6 с · decode 62.712 с · 24 сход 7.6 с · decode 61.316 с · 26 сход 12.2 с · decode 69.818 с · 31 сход 12.7 с · decode 54.319 с · 28 сход 15.0 с · decode 78.1
default-no-thinking9 с · 20 сход 4.2 с · decode 65.28 с · 17 сход 3.6 с · decode 72.312 с · 23 сход 7.6 с · decode 65.817 с · 28 сход 12.0 с · decode 61.4——
tune-fa4 с · 9 сход 1.4 с · decode 128.55 с · 10 сход 2.1 с · decode 121.86 с · 13 сход 2.7 с · decode 101.07 с · 15 сход 3.7 с · decode 88.710 с · 20 сход 5.1 с · decode 65.311 с · 23 сход 6.5 с · decode 61.8

Время одного шага opencode без учёта самого инструмента: ход (время до первого токена, когда к закэшированному контексту добавилось ~2k токенов ответа инструмента) плюс генерация ответа на этой глубине. Крупно — шаг с ответом на 300 и на 1000 токенов, ниже — из чего он складывается. Подсвечен самый быстрый профиль на каждой глубине (для ответа на 300 токенов). Главная метрика для пошаговой работы агентов.

Prefill и ход агента на глубине

Профиль8k32k64k128k192k240k
tune (batch 8192)1 811decode 112.1 · ход 3.2 с996decode 90.7 · ход 8.4 с611decode 66.5 · ход 14.5 с347decode 51.8 · ход 21.6 с——
tune1 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-thinking1 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 с
default2 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-thinking2 298decode 65.2 · ход 4.2 с2 056decode 72.3 · ход 3.6 с1 782decode 65.8 · ход 7.6 с1 400decode 61.4 · ход 12.0 с——
tune-fa2 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)

Свип длины промпта по всем вычетам mod 128 с попаданием в prefix-кэш: под FULL-графами у HyperQwen одна длина из 128 давала пустой ответ или бред без ошибок в логах.

Профили

Настройкаdefaultdefault-no-thinkingtunetune-no-thinkingtune-fa
Attention backendFLASHINFERFLASHINFERTRITON_ATTNTRITON_ATTNFLASH_ATTN
KV-кэшfp8fp8int8_per_token_headint8_per_token_headbfloat16
CUDA-графыPIECEWISE (FULL недоступен)PIECEWISE (FULL недоступен)FULL_AND_PIECEWISEFULL_AND_PIECEWISEFULL_AND_PIECEWISE
KV-пул, токенов796 825840 708910 673869 693482 215
max-num-batched-tokens81928192163841638416384
max-num-seqs256 (дефолт)256 (дефолт)444
Спекулятивный декодингdflash k=7attention_backend=FLASH_ATTN, kv_cache_dtype=autodflash k=7attention_backend=FLASH_ATTN, kv_cache_dtype=autodflash k=7draft_sample_method=probabilisticdflash k=7draft_sample_method=probabilisticdflash k=7draft_sample_method=probabilistic
Рассуждениявкл (дефолт модели)выкл (серверный дефолт)вкл (дефолт модели)выкл (серверный дефолт)вкл (дефолт модели)
VLLM_SPEC_DECODE_ATTN——111
VLLM_DFLASH2_LOOKUP— (0)— (0)111
VLLM_PREFILL_ATTN————int8
prefix-match-unit1616161616
gpu-memory-utilization0.900.900.900.900.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