# Ночная смена 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`) — **38/54 шардов готово** на NAS `models--inclusionAI--Ling-3.1-flash-fp4` (snapshot `9144477b…`, refs/main стоит). Готовы: 1-14, 19-30, 37-48. Остались: **15-18, 31-36, 49-54** (16). **БЛОКИРОВКА (внешняя): cold-read throughput NAS `nas.lan` коллапсировал** с ~83 MB/s (22:xx) до **~1.3 MB/s** (23:1x) — dd, mmap и Python-read одинаково виснут в D-state на холодных шардах; warm (page cache) 564MB/s. Это НЕ наш кластер (dgx1 kindling RX = 0; NAS не SSH-ится). Скраб/бэкап/диск на NAS. Возобновлять когда `dd if= of=/dev/null bs=4M` > 30 MB/s. **Найденные фиксы конвертера** (`/home/kilork/ling_fp4_full.py`, `/tmp/…` на Mac): - `shutil.copyfile` на NFS = `copy_file_range` возвращает 0 → бесконечный D-state цикл. Уже убран (copy-подход откатан — он ещё и удваивает NAS-трафик). - 2–3 конкурентных больших потока thrash'ят HDD-NAS (8MB/s на поток). **1 воркер**. - `dequant_fp8_block`/`quant_mxfp4` — миллисекунды, НЕ узкое место (GPU не нужен, но и не вредит). Узкое место — только чтение шарда с NAS. Возобновление (когда NAS здоров, 1 воркер, mmap): ``` ssh dgx5; tmux new -d -s fp4S "/home/kilork/relaunch.sh 15-18 31-36 49-54" ``` (`relaunch.sh` = 1 docker-run за раз, `--device cuda --no-finalize`, идемпотентно по шардам.) Затем **finalize**: `python3 ~/ling_fp4_full.py --src --dst --finalize-only` — index+config (`total_size ≈ 110 GB`, 54 шарда, `routed_experts_*`). 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 --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` (что сделано, скоры, якоря).