Kaynağa Gözat

night report 2026-10-21/22: dashboard fixes 1.3.0-1.3.3, recipe-relative hooks, TF 1.0.12 blocked (MissingEntry) with full diagnosis, GLM-5.3 full MXFP4xFP8 blocked at 4-node worker init, GLM-5.3-Flash 2x repro 95/100

Alexander Korolev 1 gün önce
ebeveyn
işleme
87e885d967
1 değiştirilmiş dosya ile 90 ekleme ve 56 silme
  1. 90 56
      history/night-shifts/2026-10-22.md

+ 90 - 56
history/night-shifts/2026-10-22.md

@@ -1,84 +1,118 @@
 # Night shift 2026-10-21 → 22 — отчёт
 
-Стенд dgx5–8 (по указанию оператора), прод dgx1–4 не трогали.
+Стенд dgx5–8 (по указанию оператора), прод dgx1–4 не трогали ни разу.
 
-## 1. Баги из дашборда — исправлены и выпущены
+## 1. Дашборд и лаунчер: три бага, четыре релиза
 
-**Панель рецептов держала лейны «активными» после остановки.** Причина: строки
-пересобирались только по событиям файлов в `reports/` и `recipe.toml`, а
-`serve`/`stop` пишут `.lock` (леджер) — он не считался релевантным. Плюс флаги
-`stale`/`fleet_up` выставлялись навсегда.
+**Панель рецептов держала лейны «активными» после остановки** (то, что поймал
+оператор). Причина: строки пересобирались только по событиям файлов в
+`reports/` и `recipe.toml`, а `serve`/`stop` пишут `.lock` — он не считался
+релевантным; плюс флаги `stale`/`fleet_up` выставлялись навсегда.
 
-- `.lock` теперь триггерит пересборку; 30-секундный тик сверяет «up»-множество
-  строк с леджером и пересобирает при расхождении;
-- флаги пересчитываются каждый проход (в т.ч. `fleet_up` на аддоне, где леджера
-  нет вообще — раньше он замирал после первого прохода).
-- Проверено вживую: подсунутый открытый run → оранжевый `stale`; `runlock
-  close` → строка исчезает на следующем тике. Релиз **1.3.3**.
+- `.lock` теперь триггерит пересборку, а 30-секундный тик сверяет «up»-множество
+  строк с леджером и пересобирает при расхождении (догоняет и пропущенные
+  watcher-события);
+- флаги пересчитываются каждый проход — в т.ч. `fleet_up` на аддоне, где леджера
+  нет вообще и он раньше замирал после первого прохода.
+- Проверено вживую: подсунутый открытый run → оранжевый `stale`; `runlock close`
+  → строка исчезает на следующем тике. **1.3.3**.
 
-**Ресайз окна лога.** Жест умирал при пересечении iframe-панели рецептов (iframe
-становится целью pointer-событий). `drag()` теперь берёт pointer capture —
-работает и рост, и перенос. Релиз **1.3.1**.
+**Ресайз окна лога** (второй баг оператора): жест умирал, как только указатель
+пересекал iframe-панель рецептов — события уходили внутрь iframe. `drag()` берёт
+pointer capture. **1.3.1**.
 
 **Host-скрипты переехали в репозиторий рецептов.** `before_serve`/`after_stop`
 принимают `{ script = "scripts/prepare.sh" }` — путь относительно каталога
-рецепта (абсолютные и `..` запрещены). `tensorfold_1017_prepare` стал
+рецепта (абсолютные и `..` запрещены). Скрипт стейджинга TensorFold стал
 `recipes/dsv41-flash-1017-2x-tensorfold/scripts/prepare.sh`. Попутно: хуки
-получают **serve-local** `NODE_RANK` (на subset-запуске отдавали конфиг-ранг —
+получают **serve-local** `NODE_RANK` (на subset-запуске отдавали конфиг-ранг →
 паки строились для ранга 2/3 в 2-ранговом движке), `bench` понимает
 TensorFold-овский `--name`.
 
 **Чейнджлог аддона** — `sm121/CHANGELOG.md` (HA показывает секцию установленной
-версии); правило «каждый бамп = своя секция» в AGENTS.md. Релизы 1.3.0 → 1.3.3.
+версии), правило «каждый бамп = своя секция» в AGENTS.md. Релизы **1.3.0 →
+1.3.3**, все зелёные (amd64/arm64).
 
-**Дисциплина мониторинга** (по замечанию оператора) — раздел в AGENTS.md: не
-`sleep 600; check`, а фоновый запуск + короткий поллинг в том же вызове с
-выходом на первом `Error:`/`FATAL`.
+**Дисциплина мониторинга** — раздел в AGENTS.md: не `sleep 600; check`, а
+фоновый запуск + короткий поллинг в том же вызове с выходом на первом `Error:`.
 
-## 2. Дневной ресерч — главное
+## 2. Ресерч дня
 
-**TensorFold ушёл далеко вперёд.** Наш рецепт пинит TF **0.6.0**; публичная
-семья — **1.0.12 / 1.2.4** (нативный Zig-движок) с 2- и 4-нодовыми рецептами,
-kept-prompt reuse, wide copy windows, точным DSpark.
+**TensorFold ушёл вперёд.** Наш рецепт пинит TF **0.6.0**; публичная семья —
+**1.0.12 / 1.2.4** (нативный Zig-движок): 2- и 4-нодовые рецепты
+(`MiaAI-Lab`, `bertholomus/…-tp4-4xgb10`), kept-prompt reuse, **wide copy
+windows** (`sehoon123`: копирование из промпта 123.6 → 204.1 tok/s), точный
+DSpark, vision, grammar/tool calls.
 
-**RedHatAI/GLM-5.3-MXFP4xFP8** (21-е): полный GLM-5.3 (не Flash), 78 слоёв,
-`GlmMoeDsaForCausalLM`, ~4.5 бита/пар, **415.4 GB**, 1M окно. В карточке —
-TP8; у нас TP4 = ~97 GiB весов на ранк.
+**RedHatAI/GLM-5.3-MXFP4xFP8** (2026-10-21): полный GLM-5.3 (не Flash),
+78 слоёв, `GlmMoeDsaForCausalLM`, ~4.5 бита/пар, **415.4 GB**, 1M окно.
 
-**local-inference-lab открыл GitHub**: `blackwell-llm-docker` (образы
-`voipmonitor/sglang:cu130|cu132`, `voipmonitor/vllm:vllm-b12x-cu132`,
-`voipmonitor/vllm:lucifer` — b12x + FlashInfer из исходников, CUDA 13.2),
-форк `flashinfer`, `llm-inference-bench`.
+**local-inference-lab открыл GitHub**: `blackwell-llm-docker` с образами
+`voipmonitor/sglang:cu130|cu132`, `voipmonitor/vllm:vllm-b12x-cu132` (b12x +
+FlashInfer из исходников, CUDA 13.2), `voipmonitor/vllm:lucifer`; плюс форк
+`flashinfer`, `llm-inference-bench`, `rtx6kpro`. Сам рантайм FLARE не открыт.
 
-**Форум, новое**: 386130 «RAIDFLASH: 2.5× decode on 2×GB10 GLM-5.3-Flash
-(TensorFold)» — слой параллельных страйпов поверх TF 0.6.0 (разбивает длинный
-ответ на k полос, собирает): 49 → 110–200 tok/s на одном пользователе,
-но это про длинную генерацию, не про агентский ход (целостность между полосами
-под вопросом — см. #4 в треде). 386108 (GLM-5.3-Flash-FP4-Local + 2M FP8 KV),
-386098 (1017), 386285 (4×China OEM без свитча, 90 tok/s).
+**Форум**: 386130 «RAIDFLASH: 2.5× decode на 2×GB10 GLM-5.3-Flash (TF)» — слой
+параллельных полос поверх TF 0.6.0: длинный ответ режется на k стримов, 49 →
+110–200 tok/s на одного пользователя (это про длинную генерацию, не про
+агентский ход); 386108 (GLM-5.3-Flash-FP4-Local + 2M FP8 KV), 386098 (1017),
+386285 (4× China OEM без свитча, 90 tok/s).
 
-Полный план: `2026-10-21-night-plan.md`.
+## 3. TensorFold 1.0.12 (Zig) TP4 — собрано, но не поднялось
 
-## 3. TensorFold 1.0.12 (Zig) TP4 — собран, но не поднялся
+Детали и точные входы: `specs/tech-architecture/tensorfold-1.0.12-bringup.md`.
 
-Подробно: `specs/tech-architecture/tensorfold-1.0.12-bringup.md`.
-
-Сделано: движок собран (Zig 0.17.0 + CUDA 13, `-Dsm=121`), kit проверен
-(362/362 файлов MANIFEST; RoPE-таблицы и vision-биas добраны из HF), веса
-EXL3 4.0bpw (288 GB) на NAS, rank-cache 75.6 GiB/нода (`tf-dsv41-check`:
-189 610 записей, 0 расхождений), token map.
+Сделано: движок собран (Zig 0.17.0 + CUDA 13 в нашем TF-образе, `-Dsm=121`);
+kit проверен (**362/362** файлов MANIFEST; RoPE-таблицы и vision-биас в git
+отсутствуют — добраны из HF, HF-копия побайтово совпала с git); веса EXL3 4.0bpw
+(288 GB) на NAS; rank-cache **75.6 GiB/нода** (`tf-dsv41-check`: 189 610
+записей, 0 расхождений); token map.
 
 Блокер: `the native CUDA engine cannot load /model … glue kernels
-(FileNotFound)`, а `tf-dsv41-load` → `MissingEntry` — движок и 4.0bpw-чекпойнт
-на этом коммите расходятся по какой-то записи (не шард, не kit-файл).
-Попутно выяснено и записано: HF-симлинки рвут bind-mount (лечится каталогом
-жёстких ссылок), entrypoint образа надо гасить (`--entrypoint ""`), token map
-на хосте падает (нет `tokenizers`).
+(FileNotFound)`, а `tf-dsv41-load` → `MissingEntry` — движок на коммите
+`51726210` и чекпойнт 4.0bpw расходятся по какой-то записи (не шард, не
+kit-файл). Попутно найдено и записано: HF-симлинки рвут bind-mount (лечится
+каталогом жёстких ссылок), entrypoint образа надо гасить (`--entrypoint ""`),
+token map на хосте падает без `tokenizers`.
 
-## 4. GLM-5.3 (full) MXFP4×FP8 на 4 нодах — в работе
+## 4. GLM-5.3 (full) MXFP4×FP8 на 4 нодах — загрузили, но не подняли
 
 Рецепт `glm53-mxfp4-fp8-4x` (TP4, 32K окно, MTP k=5, glm47-парсеры, образ
-`spark-glm53:v10`, у которого в реестре уже есть `GlmMoeDsaForCausalLM`).
-Веса (415 GB) качаются на NAS (~123 MB/s). Образ разложен на все 4 ноды заранее.
-
-Дальше: boot (чтение 415 GB с NAS на каждый ранк), probe, tool-eval-bench.
+`spark-glm53:v10` — в его реестре уже есть `GlmMoeDsaForCausalLM`). Веса 415 GB
+скачаны на NAS, образ разложен на все 4 ноды заранее.
+
+Две попытки по ~45 мин каждая (два полных прохода загрузки 141 шарда) упираются
+в инициализацию воркеров:
+
+```
+Worker_TP0 … is_in_the_same_node: gloo/tcp/pair.cc:553 Conn…
+WorkerProc failed to start → Engine core initialization failed
+```
+
+Это multi-node инициализация (gloo message-queue) в **kindling-форке**, который
+тюнили под TP2 на двух нодах; память тоже впритык (при GMU 0.90 веса занимают
+~97 GiB из ~119 GiB). Что пробовать дальше: `--distributed-executor-backend ray`
+(если Ray есть в образе), либо upstream-vLLM ≥0.32 (карточка RedHat ссылается
+именно на него) вместо форка, либо `voipmonitor/vllm:vllm-b12x-cu132` из
+local-inference-lab, где CUDA 13.2 + b12x + FlashInfer собраны свежими.
+
+## 5. Состояние флота утром
+
+| где | что |
+|---|---|
+| dgx1–4 | прод `dsv41-flash-1017-4x-sglang` (EP2/1M) — **не тронут** |
+| dgx5–6 | **GLM-5.3-Flash 2x** (kindling, DFlash2 + adaptive-k) — поднят; контрольный прогон утром: **95/100 (185/194), Hard Mode 52/56 (93%), safety-critical 0**, ход 3.6 s |
+| dgx7–8 | свободны (там остались rank-cache TF 1.0.12 ~76 GB/нода и kit/engine) |
+
+Аддон: **1.3.3** (обновить в HA). Все правки в launcher и recipes запушены.
+
+## 6. Что дальше (по приоритету)
+
+1. GLM-5.3-Flash 2x — оставить как эталон качества (94/100) и кандидата в прод;
+   на нём же проверить реальную агентскую сессию.
+2. GLM-5.3 (full) — повторить на upstream vLLM / образе `voipmonitor`, где
+   multi-node mp надёжен; память мерить при GMU 0.85–0.88.
+3. TensorFold: либо спросить upstream про `MissingEntry`, либо взять 2x-семью
+   `MiaAI-Lab` (196 GB, много пользователей) с патчами `sehoon123`.
+4. sparkring `dev-20261016-sparkcache`, RedHat-драфтеры (dspark/dflash для
+   gemma-4), DSPARK sweep 3/5/7 — когда освободятся ноды.