# Ночная смена 2026-10-21 (продолжение) — Beam заработал по-настоящему Вопрос смены: если у Beam та же проблема, что у GLM-5.3 (DFlash2 не грузится на GB10), не решается ли она так же — через b12x? И: нужен Beam для реальных задач. ## Ответ: b12x не подходит, но решение нашлось — FLASHINFER Драфтер Beam зажат с двух сторон, и b12x тут не вариант: | draft backend | что говорит | |---|---| | `FLASH_ATTN` | `kv_cache_dtype not supported` — FA3 только SM90, FA4 только SM100, у нас SM121 | | `B12X` (ваша гипотеза) | `non-causal attention not supported` — блок DFlash смотрит некаузально, b12x так не умеет | | `TRITON_ATTN` | конфиг проходит (fp8 KV + non-causal ok), но код драфтера (`vllm/models/beam/nvidia/dflash2.py`) **жёстко проверяет** `attn_backend in ("FLASH_ATTN","FLASHINFER")` → падение в `_precompute_context_kv` | | **`FLASHINFER`** | **работает** с `--kv-cache-dtype fp8` и `enable_adaptive_verification: false` | Адаптивная верификация на GB10 недоступна в принципе: FlashAttention не принимает переменную длину запроса драфтов, а FLASHINFER отвечает прямо — `device-cpu query lens mismatch not supported, this is needed for adaptive verification`. Выключена. ## Что это дало (замеры на одном харнессе, pp2048 tg128) | тест | без спекуляции | DFlash2 k=7 (FLASHINFER) | |---|---|---| | tg c1 @d0 | 26.2 | **36.8 (+40%)** | | tg c2 @d0 | 41.1 | **55.1 (+34%)** | | tg c1 @d4096 | 26.1 | 34.1–41.3 | | tg c1 @d8192 | 26.1 | 30.2–32.7 | | tg c2 @d8192 | 38.6 | 47.2 | | pp @d0 | 2,501 | 2,352 | **Качество не пострадало**: 90/100 (175 очков, Hard Mode 48/56 = 86%, Safety 92%), а responsiveness выросла **34 → 56** — медианный ход **4.7 s → 2.6 s**. Цена: KV-пул 6.55M → 5.27M токенов (20× конкурентность на 262K). Это, по сути, второй по значимости результат после EP2: 2.6 s на ход при 90/100 — Beam стал интерактивным. ## Beam на реальной задаче 1. **Агентная задача через pi** (тот же харнесс, которым работает оператор): `pi -p --provider beam58 --model beam --tools read,write,edit,bash` — «прочитай README, реализуй, прогони тесты, не останавливайся пока не зелёные». Beam прочитал README, написал `src/lib.rs` (140 строк), сам вызвал `cargo test`, итерировал — **11/11 тестов зелёные** (включая overflow, порядок юнитов, три кейса ошибок). Задача закрыта с первого захода, без правок руками. Провайдер добавлен в `~/.pi/agent/models.json` как `beam58`. 2. **Long-context QA**: три проверяемых вопроса по 4.7K-токенному спеку — ответы верные (цитирует `9.30M` KV, `SPARK_ENGRAM_MAX_IDS`, правило `max_prefill_tokens × 12`), 14.7 / 15.3 / 17.5 s. **Операционный контракт** (записан в `NOTE.md`): - **thinking тратит `max_tokens`**: на документных вопросах модель сожгла 600–900 токенов размышлений до первого токена контента; при `max_tokens: 600` ответ приходит пустым с `finish_reason: length`. Ставить **≥ 1500**. - `chat_template_kwargs.reasoning_effort` (8/32/64/128/256/512) — это подсказка в промпте, а не жёсткий лимит: на сложной задаче модель всё равно думала 380–900 токенов. Латентность не сокращает надёжно, качеству не вредит. - reasoning приходит в поле **`reasoning`**, не `reasoning_content`. - `pi -p` с этим эндпоинтом иногда не выходит после финального сообщения (зависает уже после ответа) — гонять в фоне с вотчдогом. ## DeepInfer — изучил, на нашем железе не поедет DeepSeek выложил свой продакшн-движок (14.9k звёзд, Apache 2.0), и он **нацелен ровно на наш модельный ряд**: «Supported models: DeepSeek-V4.1-Flash», дефолтный чекпойнт — `deepseek-ai/DeepSeek-V4.1-Flash-1017`. Внутри: FlashMLA, DeepGEMM, DeepEP, TileKernels/DeepSelect, attention-DP/CP + MoE EP с EPLB, DSpark с confidence-scheduled verification, SWA bounded replay, асинхронный шедулер, batch-invariant inference. Три блокера: 1. **Только offline**: в релизе явно нет «KV cache system», «PD disaggregation» и «load balancing» — это Python-библиотека, HTTP-сервера нет вообще. 2. **Только SM100**: `is_sm_major_10()` (major 10 = SM100/101/103), а GB10 — SM121; `get_bf16_tflops_limit()` просто бросает «unknown GPU type». Вендорные ядра (FlashMLA/DeepGEMM/DeepEP) — SM90/SM100. 3. Сборка из исходников: GCC ≥13, CUDA 13, Python 3.12, 4 CUDA-подпроекта. Вердикт: порт = проект (ядра под sm121 + свой serving-слой), не ночная смена. Что стоит забрать идеями (записано в спеку): **SWA bounded replay** (`YOCO_PREFILL_TRUNCATION_MODE=compact`, keep 140) — реплей только ограниченного суффикса декодера на префилле; **confidence-scheduled verification** — то, чем хотела быть adaptive verification у Beam. ## Догон: long-context и глубина (после первых замеров) - Контекст поднят до **384K** (`--max-model-len 393216`): KV-пул 5,337,742 токена, 13.57× конкурентность. Причина — 256K-точка depth-сюиты не влезала в прежний кап 262144 (промпт 264K → HTTP 400). - **Depth sweep** (k=7, 2 прогона): tg c1 **34.0 / 31.5 / 32.8** на 16K / 64K / 128K — декод не проваливается с глубиной; c2 58.6 / 54.8 / 40.2. - **Иголка в стоге** (факт на 85% глубины): 130,871 токенов → TTFT 60.1 s, ответ верный; **327,054 токена** (ровно размер самой длинной реальной сессии на проде) → TTFT 174.5 s, ответ верный. То есть Beam тянет длинные сессии. - Качество перемерено ещё дважды: **92/100** (Hard Mode 53/56 = 95%, Safety 92%) и 90/100 → разброс прогонов 90–92, Hard Mode 48–53. Итог по конкуренции: Beam с k=7 на 4× Spark — 36.8 tok/s c1, 55.1 c2, 31–35 tok/s на глубине 16K–128K. Это приличный интерактивный профиль, а не «batch only». ## Состояние на конец смены | | | |---|---| | dgx1–4 (прод) | `dsv41-flash-1017-4x-sglang`, не тронут, ~40 ч аптайма | | dgx5–8 | **Beam NVFP4 TP4 + DFlash2 k=7, 384K ctx** (финальная конфигурация), 5.34M KV, 13.6× конкуренция | | Диски dgx5–8 | 185–275 GiB свободно | | Отчёты | `recipes/beam-1-0-nvfp4-4x/reports/` (quality no-spec, quality spec, perf ×2) | Закоммичено: recipes `d135e82`, `a3c43d9`; launcher (спека DeepInfer). ## Дальше 1. **Beam как кандидат в прод** — 90/100 против 87/100, 2.6 s против 1.4 s, 262K против 1M. Решение оператора; лейн готов принимать трафик. 2. Beam: попробовать `--max-num-seqs` / cudagraph-батчи под 16-24 потока — сейчас KV хватает, лимит может стать seq-бюджет. 3. TensorFold: session-кэш (`TF_DSV41_SESSIONS=0` сейчас) — главная боль TF. 4. DeepInfer — перепроверить, когда появится serving-путь или таргет sm120. 5. Аддон: нажать Update на ha.lan.