docs(perception): record preroll worker pilot

This commit is contained in:
DCCONSTRUCTIONS
2026-09-02 01:40:06 +03:00
parent fd8313899b
commit 380a13688c
2 changed files with 95 additions and 6 deletions
@@ -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.25198.22 ms не проходит исходные 125 ms. Подробности — в последнем
разделе. Это не product cutover и не самостоятельный образ.
но p99 194.25198.22 ms не проходит исходные 125 ms. Последнее дополнение —
2026-09-02 01:2201:33 МСК: три Worker-повтора после исправления preroll,
каждый 127/128 с одним `handoff-overflow`; p95 120.84127.18 ms,
p99 135.46143.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:2201: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.57189.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,9311,937 MiB. GPU utilization mean по прогонам
25.8533.69%, max 5585%; это снова опровергает трактовку «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.