Jelajahi Sumber

night shift 2026-10-20: FLARE 1017 tested and rejected (2x slower decode, crashes on agent prompts); Beam-1.0 NVFP4 lane added at 90/100 (fleet best); four-lane comparison recorded

Alexander Korolev 2 hari lalu
induk
melakukan
7a8c147767

+ 49 - 0
history/night-shifts/2026-10-20-night-plan.md

@@ -0,0 +1,49 @@
+# Ночная смена 2026-10-20 → 21 — план (полная автономия)
+
+**Режим:** оператор ушёл, супервизора нет. Решения принимаю сам, всё
+документирую здесь и в `specs/`/`recipes`. Язык — ru/en.
+
+## Снимок на начало смены (2026-10-20T21:10Z)
+
+| Что | Состояние |
+|---|---|
+| **ПРОД** `4nodes-switch` (dgx1–4) | `dsv41-flash-1017-4x-sglang`, EP2/1M, **Up ~24h**, обслуживает оператора → **НЕ ТРОГАТЬ всю смену** (никаких restart/stop/power) |
+| `dgx58-switch` (dgx5–8) | свободен, эксперименты; на dgx5 стоит `flare 0.1.0` + Qwen3.8 FLARE пакет (сервер погашен) |
+| FLARE орбита `sparks` | 4 ноды (gx10-dgx5..8) спарены, агенты на systemd --user (нужен linger + XDG_RUNTIME_DIR) |
+| Диски | dgx5 257 / dgx6 340 / dgx7 373 / dgx8 430 GiB свободно; NAS 20T |
+| Качается | FLARE 1017 `gb10` пакет (511 GB) → `/mnt/nas/ai/flare` |
+
+## Guardrails
+
+- **dgx1–4 (прод) — не трогать.** Любой stop/power только на dgx5–8.
+- Перед power off в конце — `health`, убедиться что прод жив и не наш.
+- GB10: unified memory не ограничена cgroup → тяжёлые загрузки не рядом с live serve.
+- Первый запуск лейна — detached (`--no-wait`/`--detach`), проверять readiness опросом.
+- Харнесс `tool-eval-bench` v2.8.0 с pluto.lan (off-Mac путь).
+
+## Порядок работ
+
+1. **FLARE 1017 TP4** (главное) — дождаться пакета, `orbit run`, probe, полный
+   quality+perf бенч. Сравнение с эталоном SGLang 4x: **87/100**, tg **42.8**
+   (probe c1) / 45.6 (llama-benchy), TTFT **0.75 s**, 9.3M KV.
+2. Если FLARE выигрывает — зафиксировать цифры, описать интеграцию (нужен
+   `flare` deploy-путь в launcher: per-rank `--rank/--rendezvous` или orbit).
+3. **TensorFold prefill** — разобраться, почему у нас ~380 tok/s против их
+   1.7–2.2k. Нужен отдельный кластер в конфиге (на 8nodes автоподбор берёт прод!).
+4. **Beam-1.0 NVFP4** — в vLLM main есть `BeamForCausalLM` (+ DFlash2-драфтер);
+   найти arm64-образ с ним, собрать рецепт, поднять на 4 нодах.
+5. **glm5.3-flash** — проверить новые образы/ревизии (jovian r40+, sparkglm53 v11+).
+6. **sparkring** — новый тег `dev-20261016-sparkcache-4a17f1f5198e`.
+7. Отчёт в `history/night-shifts/2026-10-20.md`.
+
+## Находки до начала работ
+
+- **FLARE работает на GB10**: Qwen3.8-Flash-Next `gb10` на одной Spark —
+  decode **43.3 tok/s**, TTFT 1.30 s, загрузка ~1 s (графы в пакете), 74.7 GiB.
+- **FLARE API**: tool calls и json_schema — ок; `tool_choice: "required"` → **HTTP 500**.
+- **У local-inference-lab есть официальный gb10-пакет 1017 на 4 Spark** (TP4, 16
+  concurrency, DSpark 5 адаптивных драфтов, 1M ctx, Engram на диске, `--roce-ring`).
+- **DeepInfer** — DeepSeek выпустил свой движок (vLLM-база + disaggregated prefill, sm100).
+- **Aiden**: encoder 25/30 pass/fail против референса; 4 группы расхождений
+  (effort-имена — уже запатчили; порядок картинок в tool-результатах; `a::b`
+  namespace; reasoning теряется на tool-результатах без списка тулов).

+ 112 - 0
history/night-shifts/2026-10-20.md

@@ -0,0 +1,112 @@
+# Ночная смена 2026-10-20 → 21 — отчёт
+
+Автономный режим. Прод `4nodes-switch` (dgx1–4, 1017 SGLang EP2/1M) не трогал
+всю смену — работа только на `dgx58-switch` (dgx5–8).
+
+## Итоговая таблица 4x/2x лейнов 1017-семейства и Beam
+
+| лейн | качество (v2.8.0, seed 42) | resp / ход | pp c1 | tg c1 / c2 / c4 | KV-пул |
+|---|---|---|---|---|---|
+| **1017 SGLang 4x** (прод, EP2/1M) | 87/100 | **75 / 1.4 s** | 3,019 | **45.6 / 67.8** / — | 9.30M |
+| 1017 TensorFold 2x (EXL3) | 89/100 | 23 / 6.7 s | ~380 (2K) | 50.4 / — | 26.6M (FLARE) |
+| 1017 FLARE 4x (native Rust) | **не измерим** — падает | — | ~2.4k | 22–27 | 26.6M |
+| **Beam NVFP4 4x** (новый) | **90/100** | 34 / 4.7 s | 2,501 | 26.2 / 41.1 / 62.3 | 6.81M |
+
+Вывод: **прод-конфиг остаётся лучшим по задержке**, Beam — лучший по качеству,
+TensorFold — лучший однопоточный декод среди 1017-вариантов, FLARE — не готов.
+
+## 1. FLARE (local-inference-lab) — проверен, не подходит
+
+Находка: у них есть **официальный `gb10`-пакет «DeepSeek V4.1 Flash 1017 on four
+DGX Sparks»** (`local-inference-lab/DeepSeek-V4.1-Flash-1017-FLARE@gb10`,
+511 GB = 12 весовых + 5 графовых шардов), рантайм — нативный Rust, образ
+multi-arch (**arm64 есть**), APT-репозиторий доступен.
+
+Что сделано: поставил `flare 0.1.0` на все 4 ноды, поднял орбиту
+(`flare orbit pair`, агенты на systemd --user — **требуется `loginctl
+enable-linger` + `XDG_RUNTIME_DIR`, иначе systemd --user не стартует по SSH**),
+скачал пакет на NAS, прошёл `orbit run` TP4 по dgx5–8.
+
+Результаты:
+- пакет валиден: `architecture sm_121`, 1,048,576 ctx, 16 конкурентных, MTP 1–6,
+  по 74.7 GiB/ранг, 130 графов, KV-пул **26.6M токенов** (22.3 GiB/ранг);
+- коллективы **по RoCE, 2 рельса на пира** (`roceP2p1s0f0,rocep1s0f0`) — то
+  есть сеть не при чём;
+- **декод 22–27 tok/s** (probe: 26.8 с драфтами, 22.8 без, 23.8 с кэшем 4 GiB) —
+  в 1.8 раза медленнее нашего SGLang;
+- **падает под агентской нагрузкой**: `tensor-parallel peer failed: RoCE proxy
+  failed: two-shot op N abandoned: kernel timed out at seq N` — воспроизводимо на
+  первом же запросе с 52 тулами (короткие чат-запросы работают). Полный
+  tool-eval-bench дал 0/100 (все сценарии — 500/connection closed);
+- TTFT при этом хороший (0.95–1.07 s), prefill ~2.4k tok/s.
+
+Итого: FLARE 1017 на нашем железе — медленнее и нестабильнее; для нас закрыт.
+Отдельно проверил FLARE на **Qwen3.8-Flash-Next `gb10` (tp1, одна Spark,
+107 GB)**: работает, загрузка ~1 с (графы в пакете), decode 43.3 tok/s,
+TTFT 1.30 s, tool calls и json_schema — ок, а **`tool_choice: "required"`
+отдаёт HTTP 500** («required tool choice was not satisfied»). Это стоит
+сообщить вендору.
+
+## 2. Beam-1.0-501B-A23B NVFP4 — новый лучший по качеству лейн
+
+Вендорский стек: `vllm/vllm-openai:reflection-beam` (Beam пока только в этом
+образе, min vLLM 0.33.0; arm64 есть), TP4, fp8 KV, парсеры `beam`.
+
+**90/100 (174/194), Hard Mode 47/56 = 84%** — лучший результат флота.
+Декод 26.2 / 41.1 / 62.3 (c1/c2/c4), pp 2,501, KV 6.81M, boot ~17 мин (первый
+старт автоподбирает FlashInfer MoE-кернелы — вендор сам просит поднять
+`VLLM_ENGINE_READY_TIMEOUT_S`).
+
+Грабли (все в `recipes/beam-1-0-nvfp4-4x/NOTE.md`):
+- пустой `entrypoint` → launcher делает `--entrypoint <model>` (известная
+  ловушка) → `entrypoint = ["vllm", "serve"]`;
+- `--gpu-memory-utilization 0.90` не проходит boot-gate → 0.85;
+- этот билд отдаёт reasoning в поле **`reasoning`**, а `content` под thinking
+  пустой — probes, которые смотрят только `content`, видят ноль токенов;
+- **DFlash2-спекудяция на GB10 не работает**: fp8 KV отвергается
+  FlashAttention (нужен FA3/SM90 или FA4/SM100 — тот же барьер, что у GLM-5.3),
+  а с BF16 KV ломается adaptive verification (конфликт с cudagraph replay);
+  с выключенной адаптивкой — 23.6–27.1 tok/s, то есть ноль выигрыша за
+  половинный KV-пул. Оставлено выключенным.
+
+Отчёт: `recipes/beam-1-0-nvfp4-4x/reports/*` (quality + perf) и `NOTE.md`.
+
+## 3. Прочее
+
+- **Аддон 1.2.0 собран** (CI зелёный, `ghcr.io/kilork/sm121-addon:1.2.0` +
+  `:latest`), на ha.lan остаётся нажать Update.
+- **Конкуренция**: рецепт прода переведён на `--max-running-requests 24` +
+  `--cuda-graph-max-bs-decode 24` (закоммичено; применится при следующем
+  рестарте прода). Замеры: пул 9.3M, при 24 потоках — ~380K контекста на поток.
+- **DeepInfer** — DeepSeek выпустил свой движок (vLLM-база + disaggregated
+  prefill, писался под sm100). Кандидат на следующую смену.
+- **sparkring**: новый тег `dev-20261016-sparkcache-4a17f1f5198e` (мы на
+  `dev-20261013-dcp2prefill-status038-sircl-tp6`).
+- **glm5.3-flash**: у Aiden новых образов нет (vllm 1.2 от 09-04, sglang-dsv41
+  1.7.1 от 09-29); новых рецептов под GLM-5.3 в тредах не появилось.
+- **Aiden 1017-страница**: их прогон 55 референсных encoder-тестов через
+  SGLang 1.7.1 — 25 pass / 30 fail; 4 группы: имена reasoning effort
+  (**мы уже запатчили**), порядок картинок в tool-результатах при параллельных
+  вызовах, `namespace::name` у тулов, потеря reasoning на tool-результатах без
+  списка тулов. Совет: слать **число** 1–100 вместо имени.
+
+## Состояние на конец смены
+
+| | |
+|---|---|
+| dgx1–4 (прод) | 1017 SGLang EP2/1M, не тронут, ~30 ч аптайма |
+| dgx5–8 | **Beam NVFP4 TP4 поднят** (финальный конфиг, fp8 KV, без спекуляции), API :30000, 6.55M KV |
+| FLARE | орбита остановлена, пакеты закешированы (dgx5–8 по ~120 GB), `flare 0.1.0` установлен |
+| Диски dgx5–8 | ~120–430 GiB свободно (FLARE-пакеты занимают ~120 GB на ноду) |
+
+## Что осталось на следующую смену
+
+1. **Beam: reasoning budget** — thinking включён по умолчанию, ход 4.7 s. Снизить
+   бюджет и перемерить responsiveness (декод при этом не меняется) — самый
+   вероятный способ сделать Beam пригодным для интерактива.
+2. **TensorFold**: включить session/continuation-кэш (`TF_DSV41_SESSIONS=0`
+   сейчас) — у Elevatormusic-форка с кэшем второй вопрос по 24K-документу
+   стартует за 1.1 s вместо 12.8 s; у нас это и есть главная боль TF.
+3. **DeepInfer** — попробовать на 4x.
+4. **sparkring** `sparkcache` — посмотреть, что даёт (возможно, кэш префиксов).
+5. Обновить аддон на ha.lan (кнопка Update).

+ 22 - 0
specs/tech-architecture/dsv41-1017-tuning.md

@@ -182,3 +182,25 @@ weights is blocked** in our environment — the exact failure and the fix option
 are in the last section of that lane's `NOTE.md` (the NFS Engram volume carries
 only NAS symlinks that dangle inside the worker's vLLM container; rsync mode
 wants 196 GiB free on the worker).
+
+## Four-lane comparison (2026-10-20/21 night shift)
+
+| lane | quality (v2.8.0, seed 42, hardmode) | responsiveness / median turn | pp c1 | tg c1 / c2 / c4 | KV pool |
+|---|---|---|---|---|---|
+| **1017 SGLang 4x** (this lane, EP2/1M) | 87/100 | **75 / 1.4 s** | 3,019 | **45.6 / 67.8 / —** | 9.30M |
+| 1017 TensorFold 2x (EXL3 2.9bpw) | 89/100 | 23 / 6.7 s | ~380 (2K prompt) | 50.4 / — / — | 26.6M |
+| 1017 FLARE 4x (`local-inference-lab` gb10 pkg) | **unmeasurable — crashes** | — | ~2.4k | 22–27 / — / — | 26.6M |
+| Beam-1.0 NVFP4 4x (different model) | **90/100** | 34 / 4.7 s | 2,501 | 26.2 / 41.1 / 62.3 | 6.81M |
+
+FLARE detail: the official 4-Spark gb10 package validates (`sm_121`, 1M ctx,
+16 concurrency, MTP 1-6, 74.7 GiB/rank, 130 graphs) and runs over RoCE with two
+rails per peer, but decodes at 22-27 tok/s and **dies on the first agent-sized
+prompt** — `tensor-parallel peer failed: RoCE proxy failed: two-shot op N
+abandoned: kernel timed out at seq N` (short chat prompts are fine). Full bench:
+0/100, every scenario 500/connection-refused. The FLARE *runtime* itself is fine
+on GB10 (Qwen3.8-Flash-Next tp1: 43.3 tok/s, 1.3 s TTFT, ~1 s load) with one API
+gap: `tool_choice: "required"` returns HTTP 500.
+
+Verdict: the EP2/1M SGLang lane stays the interactive default; Beam is the
+quality leader for hard batch work; TensorFold remains the 2-node batch shape;
+FLARE is not viable for us at this package revision.