docs(perception): record preroll worker pilot
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
# Observatory: четыре этапа создания полного real-time Perception-профиля
|
||||
|
||||
Дата: 2026-09-01; обновлено 2026-09-02 00:41 МСК. Текущая цель — переносимые полные профили и снижение задержек всей цепочки; допустимый лабораторный overload не блокирует разработку и не выдаётся за real-time PASS. В двух новых source-paced пилотах с перекрытием CPU и последовательного GPU этапа получены 128/128 результатов без drops; source→local receiver p95 143.32/153.44 ms, p99 198.22/194.25 ms. Среднее ожидание очереди 7.20/8.31 ms против 13.65/25.48 ms в serial-контролях. Это перспективный экспериментальный scheduler, не квалификация и не замена рабочего runtime. Этап 1 частично выполнен; этапы 2–4 не начаты. Static-obstacle слой и coarse `hard_surface` остаются достаточными для сельского прототипа; профиль не сводится к одной модели.
|
||||
Дата: 2026-09-01; обновлено 2026-09-02 01:36 МСК. Текущая цель — переносимые полные профили и снижение задержек всей цепочки; допустимый лабораторный overload не блокирует разработку и не выдаётся за real-time PASS. Исправленный source preroll binding проверен тремя новыми source-paced Worker-прогонами полного графа: стартовый кадр теперь действительно получает текущую геометрию и TGS, однако каждый прогон выдал 127/128 результатов и один явный `handoff-overflow`. Source→local receiver p95 = 120.84–127.18 ms, p99 = 135.46–143.22 ms; zero-drop и 125 ms gates не пройдены. Этап 1 частично выполнен; этапы 2–4 не начаты. Static-obstacle слой и coarse `hard_surface` остаются достаточными для сельского прототипа; профиль не сводится к одной модели.
|
||||
|
||||
Последнее изменение, 2026-09-02 01:06 МСК: выполнен Git checkpoint и отдельное исправление source preroll binding. Metadata-only аудит прежних 128 кадров меняет admission только кадра 0: 75 → 76 допустимых cloud/pose пар. Это не новый модельный прогон; старые latency-результаты выше остаются последними измеренными. Следующий gate — bounded Worker pilot нового source binding, включая влияние первого нового geometry frame на последующие temporal outputs.
|
||||
Последнее изменение, 2026-09-02 01:22–01:33 МСК: bounded Worker pilot нового binding выполнен на source commit `fd83138`. Кадр 0 изменился с unavailable на valid: 4,787 current points, 7,207 history-only points и 9,096 принятых TGS points. DDRNet masks и RF-DETR proposals совпали со старым контролем на всех 127 общих кадрах; дальнейшие различия geometry/temporal ожидаемо начинаются с исправленного кадра 0. Профиль остаётся observation-only, standalone release и внешний transport ещё не проверены.
|
||||
|
||||
Текущий evidence: [отчёт этапа 1](../experiments/perception/PERCEPTION_STREAM_STAGE1_2026-09-01.md), [ADR 0049](adr/0049-stream-first-perception-profiles.md), [candidate manifest](../config/perception/k1-perception-ddrnet39-rfdetr-tgs-prototype-v1.json). Запрет full-source preload закреплён в новом контракте; старый batch materializer пока не удалён и продуктовый путь не переключён.
|
||||
|
||||
@@ -234,7 +234,9 @@ EoMT — семейство ViT-моделей сегментации изобр
|
||||
- 2026-09-02: 91 focused tests PASS (12 pilot, 52 contract, 27 existing live-ingress/synchronizer/shadow), Ruff PASS, Python 3.9 child lint PASS. Семь последовательных Worker runs и версии кода сохранены в `.runtime/perception-latency-20260902T0020MSK/manifest.json`. Worker-сервисы восстановлены, Triton ready=200, local 8000=200; Frigate/Ollama exited/restart=no. Никаких продуктовых defaults/registry cutover.
|
||||
- 2026-09-02 01:06 МСК: по запросу владельца сохранены все 122 изменённых/новых исходных файла семью тематическими коммитами; чистая контрольная точка `ffd6be5`. Коммиты: `d655d69` equipment/capture, `a945d66` backend lifecycle, `62d5520` Worker packaging, `5a78c99` portable UI, `4e04d06` real-time contracts, `bfe6ef4` streaming pilot, `ffd6be5` plan/evidence. Push не выполнялся; raw/weights/runtime не включены. Отдельный `05c99ef` исправляет девять legacy test failures: исторические fixtures отделены от новых installed-package pins, старый image явно отвергается; production digest checks не ослаблены.
|
||||
- 2026-09-02: следующий source-binding increment отделяет первый preroll от текущих LiDAR increments, сохраняет history-only timestamps/points в rolling/TGS и добавляет поэлементные причины unavailable/stale/held. Metadata audit: первый кадр получает 4,787 current points, 7,207 preroll points остаются history-only; остальные 127 admissions и increment identities неизменны. 384 focused Python tests и 62 выбранных frontend architecture/Observatory tests PASS. Нового GPU run, frontend build, deployment или product cutover в этой итерации не было.
|
||||
- Этап 1: частично выполнен; совместный пилот и ограниченный latency experiment выполнены. Performance gate остаётся FAIL, но сам по себе больше не является запретом экспериментальной упаковки. Preroll source fix проверен unit/integration и metadata-only аудитом, ещё не новым модельным прогоном. Следующие задачи: повторить bounded Worker pilot, довести выходной layered-freshness ABI, перенести расписание в общий runtime, затем измерить transport/application boundary. DDRNet/online-surface jitter остаётся отдельным profiling направлением. Нельзя закрывать whole-path gate по compute-only метрике или отсутствию drops.
|
||||
- 2026-09-02 01:22–01:33 МСК: preroll fix проверен тремя последовательными 128-frame Worker-прогонами полного графа. Во всех трёх кадр 0 valid и TGS рассчитан; model outputs на 127 общих последовательностях совпали с прежним control. Каждый прогон потерял ровно один кадр из-за `handoff-overflow`: A — seq 84, B/C — seq 38. p95 = 127.18/125.19/120.84 ms, p99 = 143.22/138.02/135.46 ms. Ничего не продвинуто в defaults: zero-drop и 125 ms gate FAIL. Evidence: `.runtime/perception-preroll-worker-20260902T0122MSK/manifest.json`.
|
||||
- 2026-09-02 01:33 МСК: временно остановленные Triton, perception Worker и два Observatory agent возвращены в исходное состояние; Triton healthy/ready=200, оба agent running, canonical Mac 8000=200, Mac 8765 закрыт. Legacy perception Worker возобновил существовавший до замера HTTP 404 restart loop (running, restart count 4 на контрольном снимке); новый пилот от него не зависел. Ollama/Frigate сохранены exited/restart=no. Модельные запуски были строго последовательными; EoMT и посторонняя GPU-нагрузка не запускались.
|
||||
- Этап 1: частично выполнен; функциональный общий граф и исправленный preroll измерены, но real-time qualification не закрыта. Performance gate остаётся FAIL, но сам по себе больше не является запретом экспериментальной упаковки. Следующие задачи: устранить `handoff-overflow` без скрытого замедления clock/ослабления учёта, довести выходной layered-freshness ABI, перенести расписание в общий runtime, затем измерить transport/application boundary. DDRNet/online-surface jitter остаётся отдельным profiling направлением. Нельзя закрывать whole-path gate по compute-only метрике.
|
||||
- Этапы 2, 3, 4: не начаты. Продуктовый backend/frontend path, active registry, canonical local 8000 и физический источник не переключались. Старый full-source materializer остаётся legacy; новый streaming transport ещё не реализован.
|
||||
|
||||
## Surprises / открытые вопросы
|
||||
@@ -272,6 +274,6 @@ EoMT — семейство ViT-моделей сегментации изобр
|
||||
|
||||
## Outcomes / retrospective
|
||||
|
||||
Результат этапа 1 на текущий момент: исполняемые invariants, pinned manifest-кандидат, component baseline и измеренный совместный граф с bounded causal history, очередью и исходным 1× clock. Локальная оптимизация убрала drops на 128 кадрах, но real-time gate не прошёл. Transport, network end-to-end, переносимость по нескольким записям и standalone packaging остаются непроверенными. Экспорт image дополнительно упёрся в отсутствующий cached Triton blob / NVCR 403; временный mounted pilot не заменяет поставляемый образ. Ollama/Frigate остались выключенными, остальной временно остановленный Mission Core-контур восстановлен.
|
||||
Результат этапа 1 на текущий момент: исполняемые invariants, pinned manifest-кандидат, component baseline и измеренный совместный граф с bounded causal history, очередью и исходным 1× clock. Исправленный preroll функционально подтверждён на Worker, но три повтора стабильно выявили один bounded-queue drop и p99 выше 125 ms. Transport, network end-to-end, переносимость по нескольким записям и standalone packaging остаются непроверенными. Экспорт image дополнительно упёрся в отсутствующий cached Triton blob / NVCR 403; временный mounted pilot не заменяет поставляемый образ. Ollama/Frigate остались выключенными, остальной временно остановленный Mission Core-контур восстановлен.
|
||||
|
||||
После этапа 4 здесь будут перечислены digest самостоятельного полного образа, измеренные статусы и ошибки по recordings, реально проверенные source/hardware/config комбинации, состояние сохранённого EoMT-варианта и оставшиеся physical-live/quality/vehicle-integration ограничения. Готовый Docker и готовая автономия не отождествляются.
|
||||
|
||||
@@ -8,8 +8,10 @@ Worker: RTX 4090, 24564 MiB, NVIDIA driver 610.47.
|
||||
Подробности и evidence нового experiment `perception-joint-pilot-20260901T2040Z`
|
||||
находятся ниже. Последнее дополнение — 2026-09-02 00:41 МСК: семь bounded
|
||||
latency runs; shared-budget CPU overlap дважды дал 128/128 без drops,
|
||||
но p99 194.25–198.22 ms не проходит исходные 125 ms. Подробности — в последнем
|
||||
разделе. Это не product cutover и не самостоятельный образ.
|
||||
но p99 194.25–198.22 ms не проходит исходные 125 ms. Последнее дополнение —
|
||||
2026-09-02 01:22–01:33 МСК: три Worker-повтора после исправления preroll,
|
||||
каждый 127/128 с одним `handoff-overflow`; p95 120.84–127.18 ms,
|
||||
p99 135.46–143.22 ms. Это не product cutover и не самостоятельный образ.
|
||||
|
||||
## Решение и сделанный объём
|
||||
|
||||
@@ -557,3 +559,88 @@ Python-кода PASS. Full backend/frontend suite и production build не вы
|
||||
новых визуальных или продуктовых runtime изменений в этом шаге нет.
|
||||
На Mac только небольшие fixtures и metadata audit, без моделей/load tests.
|
||||
Worker-сервисы не останавливались; canonical local 8000 сохранён.
|
||||
|
||||
## Bounded Worker-пилот исправленного preroll — 2026-09-02 01:22–01:33 МСК
|
||||
|
||||
Source commit `fd8313899b16b16a578529909b5b3c2ac5a03c0b` проверен на том же
|
||||
RTX 4090 Worker и том же 128-frame source window. Полный граф не урезался:
|
||||
DDRNet → RF-DETR исполнялись последовательно на GPU; online geometry/distance,
|
||||
temporal/motion, TGS/costmap и policy-shadow рассчитывались текущим запуском.
|
||||
Источник шёл 1×, очередь оставалась bounded двумя pending camera frames,
|
||||
EoMT и другие профили не запускались. Внешняя сеть приложение↔Worker не входила
|
||||
в измерение; source уже находился на Worker.
|
||||
|
||||
| Run | Результаты / 128 | Drop | Mean | p95 | p99 | Queue wait p95 / p99 |
|
||||
| --- | --- | --- | --- | --- | --- | --- |
|
||||
| `preroll-overlap-128-a` | 127 | seq 84, `handoff-overflow` | 79.05 ms | 127.18 ms | 143.22 ms | 44.41 / 60.90 ms |
|
||||
| `preroll-overlap-128-b` | 127 | seq 38, `handoff-overflow` | 83.01 ms | 125.19 ms | 138.02 ms | 48.17 / 60.80 ms |
|
||||
| `preroll-overlap-128-c` | 127 | seq 38, `handoff-overflow` | 75.41 ms | 120.84 ms | 135.46 ms | 33.13 / 56.33 ms |
|
||||
|
||||
Во всех трёх отчётах released=128, completed=127, dropped=1, unaccounted=0.
|
||||
Run C проходит p95 125 ms отдельно, но проваливает p99 и zero-drop; ни один
|
||||
прогон не проходит совокупный gate. Нельзя выбирать лучший percentile и
|
||||
скрывать потерянный кадр. Первый ошибочный shell launch с дублированной Python
|
||||
entrypoint был отклонён argparse до старта runtime/model и исключён из измерений.
|
||||
|
||||
### Проверка исправления и functional parity
|
||||
|
||||
Sequence 0 теперь `available=true`, `surface_state=valid`: pose age
|
||||
25.267 ms, current point ages 19.571–89.667 ms, skew 64.400 ms. Текущая пара
|
||||
содержит два increments / 4,787 points. Ещё три increments / 7,207 points
|
||||
сохраняют исходные timestamps как `history_only`; TGS на первом кадре реально
|
||||
получил 9,096 прошедших rolling/filter points. Получены 13 observations,
|
||||
4 tracks и 13 threats; commands/actuation остаются false.
|
||||
|
||||
В B/C fresh current pair есть у 76 из 127 выданных сцен; пропущенный seq 38
|
||||
сам был unavailable. В A fresh 75/127, потому что пропущенный seq 84 был fresh.
|
||||
В полном 128-frame admission остаются 76 current pairs и 52 unavailable.
|
||||
Причины по всем released кадрам сохранены без retimestamping: 39 `pose-too-old`,
|
||||
43 `point-increment-unavailable`, по 4 `point-pose-skew` и
|
||||
`newest-points-too-old`; множества причин пересекаются. Stale publication
|
||||
наблюдалась у 13–15 выданных сцен, но commands_enabled=0 и actuation_allowed=0
|
||||
во всех трёх запусках.
|
||||
|
||||
Сравнение B с прежним `overlap-shared-repeat-128` на 127 общих sequences:
|
||||
segmentation SHA и RF-DETR proposals совпали 127/127; camera/pose lineage —
|
||||
127/127; point lineage и availability — 126/127, единственное целевое отличие
|
||||
на seq 0. Из-за нового первого geometry frame stateful результаты ожидаемо
|
||||
расходятся: observations равны 121/127, tracks 113/127, threats 97/127,
|
||||
non-timing TGS/costmap states 124/127. Это влияние исправленного входного
|
||||
состояния, а не изменение model weights или preprocessing.
|
||||
|
||||
Sampled profile VRAM = 1,931–1,937 MiB. GPU utilization mean по прогонам
|
||||
25.85–33.69%, max 55–85%; это снова опровергает трактовку «GPU <5%» и не
|
||||
указывает на исчерпание 24 GiB. Cgroup memory peak не превысил 6,358.07 MiB.
|
||||
Полная запись не читалась до EOF: camera arrivals=128, pose=131, points=124;
|
||||
инкрементально прочитано 241 из 4,598 pose rows, 229 из 4,570 point packets и
|
||||
545,590 из 10,751,258 XYZ rows. Preroll history = 7,207 points.
|
||||
|
||||
### Evidence и состояние после пилота
|
||||
|
||||
Полные reports/scenes/logs и точные команды сохранены локально в
|
||||
`.runtime/perception-preroll-worker-20260902T0122MSK/` и на Worker в
|
||||
`D:/NDC_MISSIONCORE/runtime/experiments/perception-preroll-worker-20260902T0122MSK`.
|
||||
Manifest SHA-256:
|
||||
`1b233cca8d295e89c633e642e90cf161b0a0c6d7f9411df3443e45221dd107e6`.
|
||||
|
||||
| Артефакт | SHA-256 |
|
||||
| --- | --- |
|
||||
| probe-code-fd83138.tar.gz | `00d7fc58f1dd91703446c6ab966722cc642fac4def54e024d32fcab36452b993` |
|
||||
| A report / scenes | `5eab9cef90b6393698946ca3641e77661950022def5775c30a5f1c654403d3e2` / `91b97b0cc93dc14626bae0f979bcd7e874bf6fbb39d0006fc8c75bb15d0e2f67` |
|
||||
| B report / scenes | `dc65ef4bdcf45d64ac496c22cfe2af6a4aef4da6e8aa614a4499bfe36bcaaf47` / `da0f7fa187afabb721d0e5f4852b09b37a7c73b054d294a309bae171349f80aa` |
|
||||
| C report / scenes | `6fbc337c03cfb45febfb75a25cce486c6bfd7b47cebededae28c50552133dee7` / `ece32a799cbb2c8374d1c57aaf34fd041e881884777569513d60835e866a671c` |
|
||||
|
||||
После чистого окна `ndc-mission-core-triton`, legacy perception Worker,
|
||||
installed LAB agent и M49 agent возвращены в исходное состояние. Triton
|
||||
healthy/ready=200, оба agent running, canonical Mac 8000=200, Mac 8765
|
||||
не слушает. Legacy perception Worker возобновил существовавшийся до пробы
|
||||
HTTP 404 restart loop: running, restart count 4 на контрольном снимке; пилот
|
||||
его не использовал и это не объявляется healthy-восстановлением.
|
||||
`sentinel-ollama` и `sentinel-frigate` остаются exited/restart=no по решению
|
||||
владельца. Product defaults, registry, frontend/backend path и standalone image
|
||||
не переключались; deployment не выполнялся.
|
||||
|
||||
**Вердикт:** preroll bug функционально закрыт и full-graph эффект измерен.
|
||||
Этап 1 остаётся частичным: следующий runtime increment должен устранить
|
||||
`handoff-overflow` без замедления source clock или неявного расширения
|
||||
очереди, оформить layered output freshness и повторить zero-drop/p95+p99 gate.
|
||||
|
||||
Reference in New Issue
Block a user