После вчерашнего чат-шаблонного фикса 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 должен
уметь собрать всё с нуля, без ручных обходов.
ddd6fbca (09-26); multi-arch, arm64 ✓.ddd6fbca..v0.31.0 (6 дней mainline, 239 файлов):
routed_experts.py: vllm#58720 вкатился upstream дословно
(_index_expert_mapping идентичен) → vllm-58720-routed-experts.patch
удалён из Dockerfile (verify-base.py по-прежнему ассертит наличие фикса);ARG BASE=vllm/vllm-openai:v0.31.0, ARG VLLM_REF=db9527a4… (коммит
тега — FlashKDA shim компилится против того же исходника, что в base).546e7b2 (shared repo).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… (фикс). Каталог снова полностью воспроизводим с нуля.
Первый 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-процесс, а не команду.
glm53. Смоук: plain ✓ +
structured output с параллельными tool calls ✓ (горячий путь фикс-шаблона).sm121 serve заново (цена ~20 мин
перезагрузки весов).{{dflash}} в логах serve2/serve6: источник не
установлен (live-команда несёт resolved snapshots/bf582e4e…, движок
поднялся и служит) — не фатально, не в команде.__version__ (draft-trunc). Чек-лист записан в
docker-images/glm53-kindling/AGENTS.md ("Changing the vLLM base").glm53-kindling-4x-karmic, mimo26-flash-mopd-4x-vllm,
mimo26-flash-mopd-4x-sparkring).nightly-* мёртва через
недели. Базы должны быть релизными/дайджестными (karmic — образец).