2026-10-22.md 8.3 KB

Night shift 2026-10-21 → 22 — отчёт

Стенд dgx5–8 (по указанию оператора), прод dgx1–4 не трогали ни разу.

1. Дашборд и лаунчер: три бага, четыре релиза

Панель рецептов держала лейны «активными» после остановки (то, что поймал оператор). Причина: строки пересобирались только по событиям файлов в reports/ и recipe.toml, а serve/stop пишут .lock — он не считался релевантным; плюс флаги stale/fleet_up выставлялись навсегда.

  • .lock теперь триггерит пересборку, а 30-секундный тик сверяет «up»-множество строк с леджером и пересобирает при расхождении (догоняет и пропущенные watcher-события);
  • флаги пересчитываются каждый проход — в т.ч. fleet_up на аддоне, где леджера нет вообще и он раньше замирал после первого прохода.
  • Проверено вживую: подсунутый открытый run → оранжевый stale; runlock close → строка исчезает на следующем тике. 1.3.3.

Ресайз окна лога (второй баг оператора): жест умирал, как только указатель пересекал iframe-панель рецептов — события уходили внутрь iframe. drag() берёт pointer capture. 1.3.1.

Host-скрипты переехали в репозиторий рецептов. before_serve/after_stop принимают { script = "scripts/prepare.sh" } — путь относительно каталога рецепта (абсолютные и .. запрещены). Скрипт стейджинга TensorFold стал recipes/dsv41-flash-1017-2x-tensorfold/scripts/prepare.sh. Попутно: хуки получают serve-local NODE_RANK (на subset-запуске отдавали конфиг-ранг → паки строились для ранга 2/3 в 2-ранговом движке), bench понимает TensorFold-овский --name.

Чейнджлог аддона — sm121/CHANGELOG.md (HA показывает секцию установленной версии), правило «каждый бамп = своя секция» в AGENTS.md. Релизы 1.3.0 → 1.3.3, все зелёные (amd64/arm64).

Дисциплина мониторинга — раздел в AGENTS.md: не sleep 600; check, а фоновый запуск + короткий поллинг в том же вызове с выходом на первом Error:.

2. Ресерч дня

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 (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 (b12x + FlashInfer из исходников, CUDA 13.2), voipmonitor/vllm:lucifer; плюс форк flashinfer, llm-inference-bench, rtx6kpro. Сам рантайм FLARE не открыт.

Форум: 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).

3. TensorFold 1.0.12 (Zig) TP4 — собрано, но не поднялось

Детали и точные входы: specs/tech-architecture/tensorfold-1.0.12-bringup.md.

Сделано: движок собран (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 — движок на коммите 51726210 и чекпойнт 4.0bpw расходятся по какой-то записи (не шард, не kit-файл). Попутно найдено и записано: HF-симлинки рвут bind-mount (лечится каталогом жёстких ссылок), entrypoint образа надо гасить (--entrypoint ""), token map на хосте падает без tokenizers.

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, образ разложен на все 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 — когда освободятся ноды.