2026-10-15.md 7.3 KB

Night shift 2026-10-15 (day)

Mёртвый BASE: ночные теги vLLM прунены, kindling не собирается

После вчерашнего чат-шаблонного фикса sm121 serve --build-node попытался rebuild spark-glm53:v10 (чексумма каталога сменилась) и упал: FROM vllm/vllm-openai:nightly-ddd6fbca… → not found. Docker Hub прунул всю старую схему nightly-<fullsha> (сейчас только nightly-dev-<arch>-<cuda>-<shortsha>), база прунена и с узлов (dgx1/2), дайджест нигде не записан (сентябрьский лог затёрт, реестр на Mac не включён, web-jobs чисты) → образ-база невосстановим.

Промежуточный ручной путь (тонкая обёртка FROM spark-glm53:v10 + новый шаблон + label) построен на dgx1, но отклонён оператором: sm121 должен уметь собрать всё с нуля, без ручных обходов.

Решение: репин BASE на релиз v0.31.0 (постоянный тег)

  • v0.31.0 (cut 2026-10-02) — первый релиз, содержащий коммит базы ddd6fbca (09-26); multi-arch, arm64 ✓.
  • Дрейф-аудит ddd6fbca..v0.31.0 (6 дней mainline, 239 файлов):
    • все файлы, которые патчат kindling-патчеры (mla/_fa_common, mla/_core, sparse_attn_indexer_kpool, kernel_warmup, shm_broadcast, platforms/cuda, reasoning, glm5next/*) — без изменений;
    • routed_experts.py: vllm#58720 вкатился upstream дословно (_index_expert_mapping идентичен) → vllm-58720-routed-experts.patch удалён из Dockerfile (verify-base.py по-прежнему ассертит наличие фикса);
    • requirements: flashinfer 0.7.0 → 0.7.0.post1 (mикро-бамп), torch/NCCL/ cutlass-dsl без изменений.
  • ARG BASE=vllm/vllm-openai:v0.31.0, ARG VLLM_REF=db9527a4… (коммит тега — FlashKDA shim компилится против того же исходника, что в base).
  • Коммит 546e7b2 (shared repo).

Сборка через sm121 — успешна

sm121 build --recipe glm53-kindling-2x --build-node dgx1.lan: 11 m 16 s (pull base 145 s + flashkda + патчи + verify-base гейт + --load). Гейт verify-base прошёл (Glm5Next, glm45, glm47_failclosed, sm_120, MiaAI SM90 + indexer, spin-wait, FlashKDA 17a037d, mentat). Образ c4bf0a1a…, label 74087ade… (= чексумма каталога), шаблон внутри 6c444d8b… (фикс). Каталог снова полностью воспроизводим с нуля.

2x serve: падение через 9 с и настоящая причина

Первый serve упёрся в то, что контейнер умирал через ~9 с (с --rm — самоудалялся из store, в логах только TaskDelete). Причина: бейковые оверлеи experimental/ (build.sh генерирует Dockerfile.bake — COPY оверлеев поверх image/Dockerfile) написаны против дерева ddd6fbca и включают полные файлы с старыми импорт-блоками. На чистом v0.31.0 такой файл даёт ImportError в первый же импорт (hisparse get_hisparse_gpu_memory_usage). verify-base проходит — он ранит ДО bake- стадии.

23 оверлея из 38 имели дрейф базового файла. Ребейс на v0.31.0: new = v0.31.0-файл + (оверлей − ddd6fbca); 21 авто, 2 вручную (rejection_sampler — рефакторинг gather_draft_sampled(); flashinfer_mla_sparse_sm90 — 3-кортеж _kv_lens_host + early-return _TRITON). Коммит 5e04b7b.

Вторая ловушка — guard в experimental/draft-trunc/draft_trunc.py: VLLM_COMMIT = "ddd6fbca" + чек f"+g{VLLM_COMMIT}" in vllm.__version__. Ночные базы несли scm-суффикс +g<sha>; релизный v0.31.0 — голый "0.31.0" → guard ронял движок на старте ("Refresh the copies..."). Фикс: guard закреплён за версией релиза (semantics fail-loud сохранены), коммит 6e0b952. Ребильд 30 с, label 29c47313….

Финал: serve6 (08:29) — контейнер живой, грузит веса (33 шарда, NFS4), Mac-процесс serve умер после стрима лога (ран-лиджер закрыт); модель поднимается автономно, readiness ~08:39 UTC. Пайдантик-трейс с {{dflash}} в логах serve2/serve6 источник не установлен (live-команда catched inspect несёт resolved snapshots/bf582e4e…, движок грузит веса — не в этом краш); если повторится — смотреть APIServer-процесс, а не команду.

Итог дня (10-15)

  • kindling-2x снова жив на v0.31.0-базе (sm121-native, воспроизводим с нуля), API http://192.168.88.14:30000, модель glm53. Смоук: plain ✓ + structured output с параллельными tool calls ✓ (горячий путь фикс-шаблона).
  • Лиджер: Mac-серверные процессы (serve2–6) умирали после стрима лога, контейнер живёт автономно → ран-лиджер закрыт, модель служит без open-run. Для чистого состояния: sm121 serve заново (цена ~20 мин перезагрузки весов).
  • Пайдантик-трейс с {{dflash}} в логах serve2/serve6: источник не установлен (live-команда несёт resolved snapshots/bf582e4e…, движок поднялся и служит) — не фатально, не в команде.
  • Ключевой урок: при смене BASE в kindling-дире все бейковые оверлеи (полные копии vllm-файлов) надо ребейсить + проверять guards на __version__ (draft-trunc). Чек-лист записан в docker-images/glm53-kindling/AGENTS.md ("Changing the vLLM base").

Замечания

  • karmic-kraken dirs (шаблон тоже обновлён): его BASE — дайджест-закреплённая CUDA (вечная), rebuild воспроизводим, но полный clone-at-pin (долгий, 45+ мин) — сработает при следующем serve полос, использующих karmic-kraken (glm53-kindling-4x-karmic, mimo26-flash-mopd-4x-vllm, mimo26-flash-mopd-4x-sparkring).
  • Патчеры со «вступлением» (MiaAI retarget под flashinfer 0.7.0) прошли на 0.7.0.post1 — якоря не съехали.
  • Ночные vLLM-теги имеют TTL: любая схема на nightly-* мёртва через недели. Базы должны быть релизными/дайджестными (karmic — образец).