2026-10-16-night-plan.md 11 KB

Ночная смена 2026-10-15 → 16 — план (автономный режим)

Режим: полная автономия, супервизор спит. Оператор авторизовал power off в конце смены. Язык отчётов — русский/английский. Все действия через sm121 (никакого ручного docker/scp — см. AGENTS «All builds must go through sm121»).

Текущее состояние (снимок на начало смены)

Кластер Состояние
dgx58-switch (dgx5–8) ✅ online, MiMo 4x serves (sm121_mimo26-flash-mopd-4x-sparkring_0..3, sparkring, Up 2h). API http://192.168.88.43:30000
2nodes-dac (dgx1,2) ✅ online, свободен — идёт provisioning DGPP w2 (см. Task 1)
8nodes-switch (dgx1–8) 7 online (dgx4 off), cluster «offline» (блокирующий entity off)
dgx3 online, простой (с Nemotron-прогона, ничего не крутится)
dgx4 выключен

On-узлы сейчас: dgx1, dgx2, dgx3, dgx5, dgx6, dgx7, dgx8 (dgx4 off).

Guardrails (без супервизора)

  • Перед любым stop/power off — сначала health, убедиться, что не роняем живой трафик. В конце смены обесточивание авторизовано — но сначала чисто остановить сервы.
  • Никогда не трогать чужие контейнеры; только sm121-меченые.
  • Первый/необкатанный запуск — detached --keep --no-wait (serve-boot-triage), чтобы логи упавшего ранга выжили.
  • Тяжёлые HF-перемещения — node-to-node по 200G fabric, не через Mac.
  • Harness tool-eval-bench v2.8.0 (97 сценариев), bench с pluto.lan (--ssh-host pluto.lan), из scratch-cwd, --json-file рядом с лейном.
  • Ночью не резать базовые образы kindling (v0.31.0) — это отдельная задача с bench-гейтом, не ночная.

Task 1 — Довести DGPP w2 (в процессе, end-to-end тест provisioning)

Билд DGPP (git clone 3ad63d6b… → scripts/release.sh → dgpp-cluster install) идёт в tmux на dgx1/dgx2 (CMake ~78%, ~4 мин на момент снимка; CUDA-часть долгая, cap 90 мин). serve pid в /tmp/dgpp-w2-serve.log.

Дальше:

  1. Дождаться конца билда на обеих нодах → serve сам зальёт cluster-JSON+.env и запустит dgpp-cluster up на rank 0 (dgx2).
  2. Readiness: curl http://192.168.88.14:30000? — НЕТ, DGPP API на :18080: curl http://192.168.88.14:18080/v1/models (head = dgx2, mgmt .14).
  3. Если dgpp-cluster install требует --config или путь dist/*.tar.zst не совпал — чинить src/native/provision.rs::build_script по живому логу (pane: tmux capture-pane -p -t sm121-dgpp-glm53-flash-nvfp4-fp8-dgpp-2x).
  4. Известный баг (Task 1b): tmux ... '<script> 2>&1 | tee log' — пайп 2>&1 | tee привязывается только к последнему &&-команду (финальный echo DONE), поэтому tee-лог пуст во время билда (успех всё равно детектируется по DONE-маркеру). Fix: писать build-скрипт в файл на ноде (heredoc через write_remote) и гонять bash <file> 2>&1 | tee <log>. Обновить тесты provision.rs, make check, коммит.
  5. Если w2 взлетел — прогнать quality-bench (sm121 bench --recipe glm53-flash-nvfp4-fp8-dgpp-2x --cluster 2nodes-dac --label dgpp-w2 --ssh-host pluto.lan), отчёт в recipes/glm53-flash-nvfp4-fp8-dgpp-2x/reports/. Это первый DGPP-lane datapoint (сверить с glm53-flash 2x vLLM 93–95/100).

Стоп w2: sm121 stop --recipe glm53-flash-nvfp4-fp8-dgpp-2x --cluster 2nodes-dac (→ dgpp-cluster down на rank 0).


Task 2 — Ling-3.1-flash (inclusionAI)

Две дороги, обе через sm121-рецепт:

2a. NVFP4-lossless8 (предпочтительно, дёшево): cbfight/Ling-3.1-flash-NVFP4-lossless8 (day-0 cut) — класс размера GLM-5.3-Flash (~200 GB) → 4x-лейн (dgx58-switch после остановки MiMo, либо dgx1/2/3 + ещё одна). Не требует 8 Sparks.

  • Движок: vLLM. Проверить поддержку архитектуры Ling (Mixtral-подобный MoE?) в v0.31.0; если нет — нужен более свежий base (v0.32.0rc? nightly) → тогда это упирается в Task «bleeding-edge base», см. риск.
  • Рецепт: скопировать скелет с glm53-flash-* (docker_image kindling или свежий base), model = cbfight-репо, required_nodes=4, TP=4, порт 30000.
  • validate + dry-run, потом detached serve, bench.

2b. Block-FP8 оригинал (572B, ~689 GB): TP8+EP8 = все 8 Sparks. Нужен весь 8x включённым + nightly vLLM (block-FP8 MoE + Mamba-2?). Тяжело и рискованно ночью; делать только если 2a прошла и есть время/ёмкость.

Риск: Ling может требовать vLLM свежее v0.31.0 (архитектура/эксперты). Если dry-run/serve падает на загрузке весов/архитектуре — это сигнал, что нужен отдельный base-образ (не трогаем kindling). Зафиксировать в findings, не резать базу ночью.


Task 3 — Step-5-Preview-NVFP4 (stepfun-ai)

  • Модель: stepfun-ai/Step-5-Preview-NVFP4, 604B, NVFP4, ~473 GB.
  • Dedicated-образ: vllm/vllm-openai:step-5-preview (не наш base). Рецепт с docker_image = "vllm/vllm-openai:step-5-preview", без docker_image_dir (prebuilt external, как sparkring/gr8).
  • Размер ~473 GB → 8 Sparks (TP8) или 6x. Нужен включённый 8x.
  • ⚠️ Не верифицировано на DGX Spark/GB10 (sm_121a). Ожидать проблем: kernels/arch, unified-memory gate (vLLM #48140 MemFree), GMU. Это разведка: цель — понять, встаёт ли вообще на GB10, а не бенч-кампания.
  • Рецепт + dry-run + detached serve (--keep --no-wait) + health. Если встал — короткий smoke + опц. perf. Если нет — findings (что именно отвалилось).
  • HF-кэш: 473 GB — скачать на самый ёмкий узел (dgx4 выключен; dgx5 после чистки 307G free — может не хватить; проверить df), потом node-to-node pull.

Task 4 — Форумы (NVIDIA Developer Forums, Discourse)

Читать через skill nvidia-forum-reading (JSON API по постам — web_extract отказывается, слишком большие треды). Что искать: новые image tags, vLLM commits, YAML-рецепты, флаги, известные фиксы, отчёты по GB10/Spark.

Thread Тема Что выуживать
381350 GLM-5.3-Flash (большой) новые кванты/рецепты, GMU/KV фиксы, MTP
383406 DGPP конфиг-профили, w-шейпы, известные баги install/release
385731 Qwen3.8-Flash-Next (MiaAI) recipe, флаги, Spark-заметки
384789 TensorFold статус CUDA PR 804 (python-ветка заморожена)
385042 full GLM-5.3 EXL3 TP4 EXL3 на Spark, TP4-рецепты
381032 switchless ring-топология без свитча (для gr8/2nodes-dac)
385776 CRS812 (резолвн) — проверить апдейты
385803 dsgx10 новые наблюдения

Финдинги → specs/tech-architecture/upstream-watch-2026-10-16.md (новый файл).

Task 5 — Репозитории (GitHub + Docker/ghcr)

GitHub (проверить коммиты/теги/issues с прошлой смены):

  • vllm-project/vllm — v0.32.0 stable вышел? (rc2 = 7960eeb9de). Если stable — НЕ ре-пинить ночью, только зафиксировать (отдельная задача с bench-гейтом).
  • sgl-project/sglang — релизы/фиксы.
  • kindlingai/gr8 — активен ежедневно (S2 scheduler); новые профили/шейпы.
  • HawkBearPig/dgpp — новый HEAD после 3ad63d6b? (наш пин) — changelog, фиксы install.
  • SeraphimSerapis/tool-eval-bench — новая версия после v2.8.0? (не апгрейдить ночью — harness pin, пере-базировать якоря).
  • Модельные репо: inclusionAI/Ling-3.1-flash, cbfight/Ling-3.1-flash-NVFP4-lossless8, stepfun-ai/Step-5-Preview-NVFP4, local-inference-lab/*, unsloth/*.

Docker/ghcr (новые образы/теги):

  • vllm/vllm-openai — тег step-5-preview (для Task 3), v0.32.0.
  • ghcr.io/kindlingai/gr8 — свежий тег.
  • ghcr.io/fujitsupolycom/sparkring — новее dev-20261013-…-sircl-tp6?
  • Наш ghcr.io/kilork/sm121-addon — не трогаем (CI-зона).

Финдинги → тот же upstream-watch-2026-10-16.md.


Task 6 — Конец смены: обесточить 8x

Порядок (чисто, перед power off):

  1. sm121 stop --recipe mimo26-flash-mopd-4x-sparkring --cluster dgx58-switch (остановит dgx5–8, закроет ledger).
  2. sm121 stop --recipe glm53-flash-nvfp4-fp8-dgpp-2x --cluster 2nodes-dac (если w2 ещё стоит → dgpp-cluster down).
  3. Остановить всё, что подняли в Task 2/3 (Ling/Step-5 лейны).
  4. sm121 power off --cluster 8nodes-switch — обесточит dgx1–8 + блокирующие extra_entities (свитч sw6_mt, вентилятор sw7_fan). Проверить, что dgx4 уже off. health после — все узлы offline.
  5. Закрыть висящие ledger-записи: sm121 runlock list → runlock close <recipe> для незакрытых.

Deliverables смены

  • Отчёты бенчей рядом с лейнами (recipes/<lane>/reports/…).
  • specs/tech-architecture/upstream-watch-2026-10-16.md — форумы + репо.
  • Коммиты (launcher/recipes) с внятными сообщениями.
  • Shift-лог history/night-shifts/2026-10-16.md — что сделано/найдено/упало, состояние кластера в конце (все off).

Приоритет по времени (если не всё влезет)

  1. Task 1 (DGPP w2) — довести обязательно (уже идёт).
  2. Task 4/5 (форумы/репо) — безопасно, всегда успевается, ценно.
  3. Task 2a (Ling NVFP4 4x) — если 8x/4x свободен и base подходит.
  4. Task 3 (Step-5) — разведка, только если есть ёмкость и время.
  5. Task 2b (Ling block-FP8 8x) — в последнюю очередь.