docs(perception): close stage-one baseline and record freshness proof
This commit is contained in:
@@ -2,7 +2,9 @@
|
||||
|
||||
Дата: 2026-09-01. Experiment ID: `perception-stream-stage1-20260901T1930Z`.
|
||||
Worker: RTX 4090, 24564 MiB, NVIDIA driver 610.47.
|
||||
Статус: **частичный результат этапа 1; не полный runtime и не real-time qualification**.
|
||||
Статус на 2026-09-02 10:16 МСК: **этап 1 закрыт как контракты и технический baseline;
|
||||
GO на инженерную реализацию этапа 2, не полный runtime и не real-time qualification**.
|
||||
Все промежуточные статусы ниже сохранены как история измерений.
|
||||
Обновление 20:51 UTC: совместный source-paced пилот выполнен. После оптимизации
|
||||
128/128 кадров без drops; p95/p99 174.09/190.62 ms — FAIL исходного latency gate.
|
||||
Подробности и evidence нового experiment `perception-joint-pilot-20260901T2040Z`
|
||||
@@ -30,6 +32,15 @@ NO_GO→ALLOW_candidate. Default остаётся pinned PyTorch; подробн
|
||||
p99 снова 144.88 ms. Исправлена ничья material votes → unknown/NO_GO.
|
||||
Это bounded Worker-local latency PASS, не qualification продукта/сети/автономии.
|
||||
|
||||
Последнее дополнение — 2026-09-02 10:16 МСК: общий six-layer freshness ABI
|
||||
подключён к пилоту и проверяет возраст на стороне consumer. Финальный PyTorch
|
||||
auto-clock run: 128/128 без drops, p95/p99 122.11/141.40 ms, 27 полноценно
|
||||
свежих сцен; 52 missing sensor pairs и 49 stale costmaps не получают допуск.
|
||||
Пять сцен реально истекли между publisher guard и receipt. Численный baseline
|
||||
моделей/geometry/motion/TGS/material совпал с прежним reference на всех кадрах.
|
||||
Worker operating envelope зафиксирован как проверяемый контракт, без управления
|
||||
частотами из контейнера. Детали, ошибки проверок и граница GO — в конце отчёта.
|
||||
|
||||
## Решение и сделанный объём
|
||||
|
||||
Первый профиль зафиксирован как `K1 Perception — DDRNet-39 + RF-DETR + TGS`:
|
||||
@@ -983,3 +994,115 @@ power limit 450 W; все clock resets успешны. Canonical Mac 8000=200, 8
|
||||
layered output ABI и reproducible Worker operating envelope ещё нужно закрепить;
|
||||
этапы 2–4 не объявляются завершёнными. Отсутствие full-session/standalone/network
|
||||
proof и TensorRT numeric/material parity не маскируются полученным ускорением.
|
||||
|
||||
## Шесть слоёв, receiver freshness и завершение этапа 1 — 2026-09-02 10:16 МСК
|
||||
|
||||
Commit `097e450`; experiment `perception-freshness-worker-20260902T1006MSK`.
|
||||
Добавлены shared `realtime_scene.py`, `worker_operating_envelope.py`, тонкий
|
||||
`pilot_freshness.py` adapter и отрицательные тесты. Это не новая LAB-программа,
|
||||
не новая модель и не изменение действующего backend/frontend пути.
|
||||
|
||||
### Что изменено
|
||||
|
||||
- `missioncore.perception-scene-freshness/v1` учитывает segmentation, objects,
|
||||
geometry, motion, costmap и policy. У слоя сохранены собственные epoch,
|
||||
sequence/time, payload digest, current/held/stale/unavailable и время самого
|
||||
старого обязательного свежего входа. Derived-layer timestamp не освежает
|
||||
входы; missing/stale распространяются по dependency graph. Пустые детекции —
|
||||
валидный результат; missing LiDAR или failed surface — не нулевая дистанция.
|
||||
- JSON-проекция int64 использует десятичные строки, включая timestamps выше
|
||||
JavaScript safe integer. Проверяются закрытая схема, future/cross-epoch данные,
|
||||
mapped clock domain и погрешность часов. Полный StreamStart / lease fencing
|
||||
остаётся отдельной обязанностью будущего transport/controller, не имитируется
|
||||
проверкой одного epoch.
|
||||
- Publisher guard и local collector независимо оценивают возраст. Receiver
|
||||
проверяет фактические payload hashes и снимает terrain permission при stale
|
||||
или unavailable. Его диагностический view не переписывает immutable
|
||||
опубликованный payload. Возраст нужно повторно считать при дальнейшем use;
|
||||
один сохранённый receipt не является вечным допуском.
|
||||
- TGS сохраняет oldest last-seen среди разрешающих/high-cost ячеек. Retained
|
||||
occupied/unknown и история motion могут запрещать, но не самостоятельно
|
||||
разрешать поверхность. Пока это намеренно консервативный whole-scene guard:
|
||||
одна устаревшая разрешающая ячейка переводит **всю** advisory policy в NO_GO.
|
||||
Per-cell expiry и полные dependency references — дальнейшая работа общего
|
||||
runtime. Корректность temporal reprojection/материалов и vehicle clearance
|
||||
этим контрактом не доказана.
|
||||
- Candidate manifest содержит измеренные reference conditions: RTX 4090,
|
||||
driver 610.47, Docker 8 CPU / 8 GiB, SM ≥2610 / memory ≥10251 MHz.
|
||||
Read-only evaluator сверяет image/config/worker, известность и возраст
|
||||
snapshot, ресурсы/частоты, authoritative lease, отсутствие competing clients
|
||||
и warmup. Unknown не становится PASS. Snapshot PASS — лишь readiness,
|
||||
не qualification и не доказательство постоянных частот. Его подключение к
|
||||
controller/continuous monitoring относится к этапу 2; текущая lease acquisition
|
||||
не реализована. Auto-mode эксперимент разрешён, но не наследует fixed-clock
|
||||
квалификацию. Power/P-state/limit сохранены в telemetry/host evidence.
|
||||
|
||||
### Проверка на Worker
|
||||
|
||||
Два последовательных 128-frame PyTorch eager reference запуска, original
|
||||
source pacing 1×, DDRNet→RF-DETR serial GPU, overlap CPU, pending ≤2,
|
||||
inflight ≤16 MiB, Docker 8 CPU / 8 GiB. Частоты **не менялись**, новый образ
|
||||
не собирался, использовались прежние pinned assets и code-only overlay.
|
||||
|
||||
| Run | Состав / wire | p95 | p99 | Fresh при receipt | Results / drops |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| B | Полный граф, промежуточная JSON integer проекция | 142.07 ms | 181.77 ms | 23/128 | 128/128, 0 |
|
||||
| C | Полный граф, финальная decimal-int64 ABI | 122.11 ms | 141.40 ms | 27/128 | 128/128, 0 |
|
||||
|
||||
Разница B/C не приписывается JSON: это не controlled clock A/B. В обоих runs
|
||||
22/27 clock samples ниже reference operating envelope; CPU cgroup throttling=0.
|
||||
Ни один не проходит совместный gate p95 **и** p99 ≤125 ms (C проходит только p95).
|
||||
|
||||
В C fresh при publisher guard=32, при receipt=27. Sequence 30, 39, 70, 93, 115
|
||||
истекли за время кодирования/получения; consumer выставил NO_GO. 52 sensor pairs
|
||||
отсутствуют по исходному binding, ещё 49 scenes имеют stale costmap/policy.
|
||||
Ни один stale/unavailable receipt не сохранил ALLOW/HIGH_COST. Эти 27 — полнота
|
||||
и свежесть ABI, не доказанная perceptual accuracy. Исторические «76 fresh» здесь
|
||||
означали лишь 76 доступных camera–cloud–pose pairs, не 76 полных свежих scene.
|
||||
|
||||
В B и C все 128 segmentation hashes, proposals, observations, tracks, threats,
|
||||
range estimators, sensor bindings, costmap states и material arrays точны к
|
||||
предыдущему pinned PyTorch `reference-locked-128-e`. Изменились только freshness
|
||||
metadata и консервативный policy guard; thresholds/precision не ослаблялись.
|
||||
|
||||
В C весь участок freshness + JSON encode/receive/validation занимает mean
|
||||
2.176 / p95 3.267 / p99 3.564 ms. Это **не** измеренная добавочная стоимость
|
||||
контракта относительно старого кода. VRAM peak 2365 MiB; cgroup memory peak
|
||||
3370.79 MiB (это не process RSS), inflight peak 5,202,376 bytes, stop 4.066 s,
|
||||
warmup 9.274 s, backlog growth 1.212 ms. Лимиты не расширялись.
|
||||
|
||||
### Проверки, ошибки и evidence
|
||||
|
||||
142 focused tests PASS; дополнительно 42 adjacent regression tests PASS,
|
||||
1 historical baseline test FAIL: `.runtime` evidence symlinks разрешаются
|
||||
в соседний `NODEDC_MISSION_CORE`, а неизменённый root-containment guard
|
||||
`baseline.py` это запрещает. Baseline/data/symlinks не исправлялись и не
|
||||
перехешировались ради зелёного теста. Ruff, mypy трёх contract modules,
|
||||
diff-check PASS. Full suite/build/модельная нагрузка на Mac не выполнялись.
|
||||
|
||||
Первая попытка host inventory остановилась до service stop из-за PowerShell 5
|
||||
array wrapping; исправлено. Run A остановился до source release (0 frames):
|
||||
в code staging отсутствовал pinned preprocessing runner. Для B/C восстановлен
|
||||
тот же файл с SHA `b18ad60f277eea69a240a28f290611b94627fb9707faf1bb3e6e22102dad67c1`.
|
||||
Первое восстановление perception-worker потребовало повторного start после
|
||||
Triton; зависимый порядок исправлен в B/C. Неудачные attempts сохранены.
|
||||
|
||||
Manifest: `.runtime/perception-freshness-worker-20260902T1006MSK/manifest.json`,
|
||||
140 artifacts; SHA-256
|
||||
`3b0a2ad32f6b60d3da48a4bcafdf6e11bc91209abc9d1f65da54b0eb36c52d45`.
|
||||
Копия в `D:/NDC_MISSIONCORE/runtime/experiments/perception-freshness-worker-20260902T1006MSK`.
|
||||
Image неизменён; profile candidate SHA теперь
|
||||
`e1c244e3be8b4880cb4b4d7e96a88feada69773dbb16f5c9a17ef663030138f3`.
|
||||
Raw records/model outputs — вне Git. Все четыре временно остановленных сервиса
|
||||
восстановлены; Triton healthy/ready 200. Старые transport/HTTP404 loops не
|
||||
ремонтировались. Ollama/Frigate exited/restart=no. Pilot containers=0,
|
||||
GPU P8/210/405 MHz, 979 MiB, power limit 450 W; Mac 8000=200, 8765 закрыт.
|
||||
|
||||
**Gate этапа 1:** состав, shared contracts, зависимости, ограничения и
|
||||
воспроизводимый bounded baseline зафиксированы — GO на этап 2 как разработку
|
||||
экспериментального runtime. Это соответствует разрешению владельца продолжать
|
||||
платформу при честном performance FAIL; stage 1 не переименован в qualification.
|
||||
Этап 2 ещё не выполнен: нужны общий lifecycle/lease/data plane, per-cell expiry,
|
||||
streaming без full-source barrier и standalone image без developer mounts.
|
||||
Auto-clock p99, source gaps, TensorRT parity, full-session/network/quality
|
||||
приёмка остаются открытыми. Этапы 3–4 не начаты, actuation=false.
|
||||
|
||||
Reference in New Issue
Block a user