From a3c67e249c8671a7c7a1ad35dff79ec1c5f85367 Mon Sep 17 00:00:00 2001 From: DCCONSTRUCTIONS Date: Wed, 2 Sep 2026 01:50:35 +0300 Subject: [PATCH] docs(perception): record rendezvous worker proof --- .../OBSERVATORY_REALTIME_PROFILES_EXECPLAN.md | 10 ++- .../PERCEPTION_STREAM_STAGE1_2026-09-01.md | 73 ++++++++++++++++++- 2 files changed, 76 insertions(+), 7 deletions(-) diff --git a/docs/OBSERVATORY_REALTIME_PROFILES_EXECPLAN.md b/docs/OBSERVATORY_REALTIME_PROFILES_EXECPLAN.md index 79318d5..093e1b2 100644 --- a/docs/OBSERVATORY_REALTIME_PROFILES_EXECPLAN.md +++ b/docs/OBSERVATORY_REALTIME_PROFILES_EXECPLAN.md @@ -1,8 +1,8 @@ # Observatory: четыре этапа создания полного real-time Perception-профиля -Дата: 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-01; обновлено 2026-09-02 01:50 МСК. Текущая цель — переносимые полные профили и снижение задержек всей цепочки; допустимый лабораторный overload не блокирует разработку и не выдаётся за real-time PASS. Искусственный `handoff-overflow` устранён без расширения общего лимита двух pending кадров: два повторных source-paced Worker-прогона полного графа дали 128/128 результатов и 0 drops. Source→local receiver p95 = 128.75/122.69 ms, p99 = 151.67/157.10 ms; zero-drop gate теперь проходит, совокупный 125 ms latency gate — нет. Этап 1 частично выполнен; этапы 2–4 не начаты. Static-obstacle слой и coarse `hard_surface` остаются достаточными для сельского прототипа; профиль не сводится к одной модели. -Последнее изменение, 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 ещё не проверены. +Последнее изменение, 2026-09-02 01:43–01:50 МСК: source commit `2945859` вводит точный synchronous rendezvous готового GPU-результата с уже ожидающим chronological CPU consumer. Такой результат не становится pending даже на микроскопический интервал; если consumer занят, прежняя buffered reservation и тот же drop-policy сохраняются. Повторы использовали 127–128 direct handoffs и 0–1 buffered handoff, peak pending=1, peak input bytes=5,202,376. Все обязательные outputs двух повторов совпали 128/128. Профиль остаётся 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 пока не удалён и продуктовый путь не переключён. @@ -236,7 +236,9 @@ EoMT — семейство ViT-моделей сегментации изобр - 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 в этой итерации не было. - 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 метрике. +- 2026-09-02 01:43–01:50 МСК: `2945859` заменил ложную buffered reservation на synchronous rendezvous, только когда consumer уже ждёт. 109 focused tests и Ruff PASS. Два последовательных Worker-повтора: 128/128, 0 drops, unaccounted=0; p95 = 128.75/122.69 ms, p99 = 151.67/157.10 ms. Повторная функциональная parity всех 128 outputs PASS. Evidence: `.runtime/perception-handoff-worker-20260902T0143MSK/manifest.json`, SHA-256 `d68af383c42eb3686ef199afeebd4625f27d573b77109e7e8ff8c85e811a9003`. +- 2026-09-02 01:50 МСК: Worker-сервисы снова возвращены в исходное состояние; Triton healthy/ready=200, оба Observatory agent running, active pilot containers=0, canonical Mac 8000=200, Mac 8765 закрыт. Legacy perception Worker возвращён в прежнюю HTTP 404 restart-loop конфигурацию; Ollama/Frigate exited/restart=no. +- Этап 1: частично выполнен; функциональный общий граф, исправленный preroll и bounded handoff измерены, zero-drop gate на двух повторах закрыт. Real-time qualification не закрыта из-за p99 >125 ms, а standalone/network transport ещё отсутствуют. Следующие задачи: довести выходной layered-freshness ABI, перенести расписание в общий runtime и профилировать DDRNet/CPU tail, затем измерить transport/application boundary. Нельзя закрывать whole-path gate по compute-only метрике. - Этапы 2, 3, 4: не начаты. Продуктовый backend/frontend path, active registry, canonical local 8000 и физический источник не переключались. Старый full-source materializer остаётся legacy; новый streaming transport ещё не реализован. ## Surprises / открытые вопросы @@ -274,6 +276,6 @@ EoMT — семейство ViT-моделей сегментации изобр ## Outcomes / retrospective -Результат этапа 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-контур восстановлен. +Результат этапа 1 на текущий момент: исполняемые invariants, pinned manifest-кандидат, component baseline и измеренный совместный граф с bounded causal history, очередью и исходным 1× clock. Исправленный preroll и прямой handoff функционально подтверждены на Worker; два последних повтора дали 128/128 без drops, но 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 и готовая автономия не отождествляются. diff --git a/experiments/perception/PERCEPTION_STREAM_STAGE1_2026-09-01.md b/experiments/perception/PERCEPTION_STREAM_STAGE1_2026-09-01.md index 069918c..ed50abd 100644 --- a/experiments/perception/PERCEPTION_STREAM_STAGE1_2026-09-01.md +++ b/experiments/perception/PERCEPTION_STREAM_STAGE1_2026-09-01.md @@ -9,9 +9,11 @@ Worker: RTX 4090, 24564 MiB, NVIDIA driver 610.47. находятся ниже. Последнее дополнение — 2026-09-02 00:41 МСК: семь bounded latency runs; shared-budget CPU overlap дважды дал 128/128 без drops, но 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 и не самостоятельный образ. +2026-09-02 01:22–01:33 МСК: три Worker-повтора после исправления preroll +выявили по одному `handoff-overflow`. В 01:43–01:50 МСК handoff исправлен +без расширения очереди; два следующих повтора дали 128/128, 0 drops, +p95 128.75/122.69 ms и p99 151.67/157.10 ms. Это не product cutover, +не самостоятельный образ и пока не latency qualification. ## Решение и сделанный объём @@ -644,3 +646,68 @@ HTTP 404 restart loop: running, restart count 4 на контрольном сн Этап 1 остаётся частичным: следующий runtime increment должен устранить `handoff-overflow` без замедления source clock или неявного расширения очереди, оформить layered output freshness и повторить zero-drop/p95+p99 gate. + +## Direct rendezvous handoff — 2026-09-02 01:43–01:50 МСК + +`handoff-overflow` оказался не обязательной перегрузкой модели. GPU stage +всегда резервировал buffered output slot после compute, даже когда +chronological CPU consumer уже блокировался в `take()` и мог принять результат +немедленно. На несколько инструкций такой результат считался третьим pending +кадром и выталкивал свежий ingress. + +Source commit `294585936fabcfdbd4f0f2513b33984d3523ee7d` вводит synchronous +rendezvous только для уже ожидающего consumer. Если consumer занят, completed +result по-прежнему резервирует слот в общей очереди и подчиняется прежнему +лимиту. Capacity=2, byte limit=16 MiB, source clock=1×, latest/drop semantics, +последовательный DDRNet→RF-DETR GPU schedule и chronological CPU graph не +ослаблены. Добавлены счётчики direct/buffered handoff. + +| Run | Результаты / drops | Direct / buffered | Peak pending / bytes | Mean | p95 | p99 | +| --- | --- | --- | --- | --- | --- | --- | +| `rendezvous-overlap-128-b` | 128/128, 0 | 128 / 0 | 1 / 5,202,376 | 85.48 ms | 128.75 ms | 151.67 ms | +| `rendezvous-overlap-128-c` | 128/128, 0 | 127 / 1 | 1 / 5,202,376 | 81.32 ms | 122.69 ms | 157.10 ms | + +В обоих отчётах unaccounted=0, residual bytes/completed=0, release-lag и +backlog-growth gates PASS. Run C отдельно проходит p95, но оба прогона +проваливают p99; `worker_p95_p99_125ms=false` и +`profile_realtime_qualified=false`. Устранение drop не выдаётся за устранение +DDRNet/CPU tail. Sampled VRAM = 1,929–1,936 MiB, mean GPU utilization +35.88–39.65%, max 75–76%. + +Оба повтора выдали ровно 76 fresh и 52 unavailable сцены, по 15 stale scenes; +commands_enabled=0 и actuation_allowed=0. Между B и C совпали 128/128: +sequence, segmentation SHA, proposals, lineage, sensor binding, availability, +observations, tracks, threats, non-timing TGS, costmap states/material, +stale flags и policy actions. То есть scheduler fix не изменил вычислительный +результат и вернул пропущенный кадр. + +Первый setup launch `rendezvous-overlap-128-a` исключён из performance: +при обновлении probe-каталога был механически пропущен pinned +`run_goose_vegetation_benchmark.py`; DDR preflight завершился до model load и +до release источника. Runner восстановлен из прежнего evidence с тем же SHA-256 +`b18ad60f277eea69a240a28f290611b94627fb9707faf1bb3e6e22102dad67c1`. + +Проверки: 109 focused realtime/pilot/existing-live tests PASS, Ruff PASS, +`git diff --check` PASS. Raw evidence и точные команды: +`.runtime/perception-handoff-worker-20260902T0143MSK/manifest.json`; +копия на Worker: +`D:/NDC_MISSIONCORE/runtime/experiments/perception-handoff-worker-20260902T0143MSK`. +Manifest SHA-256: +`d68af383c42eb3686ef199afeebd4625f27d573b77109e7e8ff8c85e811a9003`. + +| Артефакт | SHA-256 | +| --- | --- | +| probe-code-rendezvous.tar.gz | `27428eef631c94f32b4524201167c0d76651411c135d7a0a7540f4d89e315ada` | +| failed A report | `8128585ed445af6ddd7aeeb967966616d2e98433c3ba6867b9763851d434b1ce` | +| B report / scenes | `e031aada84c5fb535f768bcffd63754441a3291eb0d54049827dc6086d1f984e` / `9c1e4241bb8d8f66b9f225f75ce6a3d27b1b28ecc723d62b9d19daf54aa5f783` | +| C report / scenes | `adaab02960155671c0248ba146929a5c75cdcc22346af0492092e27f554de77c` / `aeeda0a5b7fcbc521fe6b784818c602d60c9123a7a4eeb11889a4854f4b5f0be` | + +После проб active pilot containers=0; Triton healthy/ready=200, два Observatory +agent running, canonical Mac 8000=200, Mac 8765 закрыт. Legacy perception +Worker возвращён в существовавшую HTTP 404 restart-loop конфигурацию. +Ollama/Frigate остаются exited/restart=no. Deployment и product cutover не +выполнялись. + +**Следующий открытый риск этапа 1:** output-level layered freshness и latency +tail. Direct handoff можно переносить в общий runtime; p99 требует отдельного +профилирования DDRNet/CPU sections и затем повторного whole-path gate.