|
|
@@ -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 — когда освободятся ноды.
|