Sfoglia il codice sorgente

Night-shift agenda 2026-10-17: Task1 Ling fp4 finalize+serve+bench, Task2 GLM-5.3-Flash-FP4-Local 2x (A/B vs kindling 95/100), Task3 Qwen3.8-Flash-Next 1x, Task4 Nemotron; guardrails incl GB10 stuck-clock + GPU-mem-not-cgroup-contained

Alexander Korolev 6 giorni fa
parent
commit
802de90878
1 ha cambiato i file con 90 aggiunte e 0 eliminazioni
  1. 90 0
      history/night-shifts/2026-10-17-night-plan.md

+ 90 - 0
history/night-shifts/2026-10-17-night-plan.md

@@ -0,0 +1,90 @@
+# Ночная смена 2026-10-16 → 17 — план (автономный режим)
+
+**Режим:** полная автономия, супервизор спит. Оператор авторизовал power off в
+конце смены (после чистой остановки серв). Все действия через `sm121`
+(см. AGENTS «All builds must go through sm121»). Язык отчётов — ru/en.
+
+## Текущее состояние (снимок на начало смены)
+
+| Кластер | Состояние |
+|---|---|
+| `8nodes-switch` (dgx1–8) | cluster **offline** (switch off). online: **dgx1, dgx2, dgx5**; offline: dgx3,4,6,7,8 |
+| dgx1, dgx2 | **живой GLM-5.3 kindling 2x serve** (`sm121_glm53-kindling-2x_0`, Up 12h) — НЕ ТРОГАТЬ (возможно обслуживает этот агент) |
+| dgx5 | идёт **Ling-3.1-flash fp8→fp4 конвертация** (наш конвертер, 30/54 шардов, tmux `fp4_*`, лог `~/fp4-*.log`) |
+
+Свободных Sparks для новых лейнов: **dgx3, dgx4, dgx6, dgx7, dgx8** (выключены;
+включаются `sm121 power on --cluster 8nodes-switch --node dgxN.lan`).
+
+## Guardrails (без супервизора)
+
+- Перед любым `stop`/`power off` — сначала `health`; не роняем живой трафик.
+  **dgx1/dgx2 kindling 2x — не трогать** всю смену (unless оператор скажет).
+- **GB10: GPU/unified память НЕ ограничена cgroup** (forum 386057) — `docker
+  --memory` не кажет cudaMalloc; при исчерпании пула стабится хост. Тяжёлые
+  задачи (конвертация, большая загрузка) — только на **чистой** ноде, никогда
+  рядом с live serve. (Так и сделали: конвертер уехал с dgx1 на dgx5.)
+- **GB10 stuck-clock** (forum 386060): если лейн аномально медленный — проверить
+  SM clock под нагрузкой (`nvidia-smi` ждёт ~2000–2400, не ~660; throttle 0x0).
+  Лечится полным power-cycle (unplug AC+USB + держать power 10s), reboot не helps.
+- Первый/необкатанный запуск — detached `--keep --no-wait` (serve-boot-triage).
+- Harness `tool-eval-bench` **v2.8.0** (97 сценариев), bench с **pluto.lan**
+  (`--ssh-host pluto.lan`), scratch-cwd, `--json-file` рядом с лейном.
+  **A/B только внутри одной версии harness.**
+- Ночью **не резать** базовый образ kindling (v0.31.0) — v0.32.0 ещё rc2, не stable.
+
+---
+
+## Task 1 — Ling-3.1-flash fp4: доконвертировать → serve на 1 Spark → bench
+
+Конвертер (fp8-block experts → MXFP4, «even» scale, byte-exact vs vLLM
+`reference_mxfp4.py`) идёт на dgx5 → NAS
+`models--inclusionAI--Ling-3.1-flash-fp4` (snapshot `9144477b…`, refs/main уже
+стоит). 30/54 шардов.
+
+1. Дождаться 54/54 (3 воркера `fp4_1-18`/`fp4_19-36`/`fp4_37-54`). Если воркер
+   завис — перезапустить только его диапазон (`--shards A-B --no-finalize`),
+   конвертер идемпотентен по шардам.
+2. **Finalize**: `python3 ~/ling_fp4_full.py --src <SRC> --dst <DST>
+   --finalize-only` — собрать index+config из готовых шардов (проверить
+   `total_size ≈ 110 GB`, 54 шарда, config с `routed_experts_*`).
+3. Рецепт `ling-31-flash-fp4` (solo/TP1, `model =
+   inclusionAI/Ling-3.1-flash-fp4`, `--tool-call-parser ling3`, MTP, mxfp4
+   MoE-backend — конфиг-driven, `--quantization` не нужен). Dry-run → serve на
+   **одной свободной Spark** (dgx3/4/6/7/8), `--keep --no-wait`.
+4. Smoke (`/v1/models`, chat) → `tool-eval-bench --no-think` (Ling default
+   thinking вылезает за 120s/turn) с pluto. **Цель: валидный скор** против fp8
+   8x-якоря; померить quality-delta fp4. Отчёт рядом с лейном.
+
+## Task 2 — nvidia/GLM-5.3-Flash-FP4-Local (2x, официальный NVFP4)
+
+Рецепт `glm53-flash-fp4-local-2x` готов (recipes `d5276db`): TP2, b12x-контейнер
+(обязателен — новый lossless NVFP4-scale формат не в upstream vLLM), 500K ctx,
+MTP n5, FP8 KV, `glm45`/`glm47`. Нужны **2 свободные Spark** (не dgx1/2 — там
+kindling). Включить пару (напр. dgx6+dgx7), serve `--keep --no-wait`, smoke,
+bench v2.8.0. **A/B против kindling 2x 95/100** (тот же harness). Если b12x-образ
+не подтянулся на ноды — `sm121` sync с dgx1 (у него есть).
+
+## Task 3 — Qwen3.8-Flash-Next-FP4-Local (1x, b12x)
+
+Рецепт `qwen38-flash-next-fp4-local` готов. Одна Spark, MTP n4, FP8 KV, 262K,
+`VLLM_ENGINE_READY_TIMEOUT_S=3600`. Forum hardmode 89/100. Дешёвый 1x лейн —
+поднять на свободной Spark, smoke, bench. Тот же b12x-образ.
+
+## Task 4 — (по остатку времени) Nemotron Super-VL / Bolt 1x
+
+Рецепты `nemotron-35-super-vl-120b-nvfp4` (LiLiCorr dflash-7 drafter — второй HF
+репо, пред-скачать) и `nemotron-35-bolt-74b-24gb` (`ultra_v3` parser-plugin —
+может не разрешиться, см. комментарий рецепта). Низкий приоритет; VL-модели,
+наш bench текстовый. Только если Tasks 1–3 закрыты и есть свободная Spark.
+
+## Watch (не ночные действия)
+- v0.32.0 stable → re-pin kindling base + rebase overlays (bench-gate 95/100).
+- DGPP pin bump (`3ad63d6b…` → `d9311e72…`) — после supervised re-bench.
+- Официальный Ling-3.1-flash fp4 от inclusionAI (пока есть только 3.0).
+
+## В конце смены
+- Остановить все sm121-сервы, поднятые за смену (кроме kindling 2x на dgx1/2 —
+  его не трогали). `runlock list` → закрыть висячие.
+- Конвертацию/serve на dgx5 остановить, `sm121 power off --cluster 8nodes-switch`
+  (обесточить всё; dgx1/2 kindling — решить с оператором, по умолчанию оставить).
+- Написать `history/night-shifts/2026-10-17.md` (что сделано, скоры, якоря).