diff --git a/docs/EXPERIMENTS.md b/docs/EXPERIMENTS.md index 85ceaed..f877962 100644 --- a/docs/EXPERIMENTS.md +++ b/docs/EXPERIMENTS.md @@ -368,6 +368,40 @@ numba являются ламина и оценка движения — вме * Реалистичная планка для предмета размером с человека на прямом участке — **около 200 м**, и путь к ней измерен выше: накопление плюс карта. +### 7.4. Стоит ли переносить вывод на GPU + +На машине проверки RTX 4070 Ti Super, драйвер 580.173.02 (CUDA до 13.0), toolkit 12.9. +Рассогласование toolkit колёсам PyTorch не мешает — они несут свой CUDA runtime, — так +что технически перенос возможен. Вопрос в том, что он даёт. Время кадра по стадиям, один +процесс, свободная машина, 390 кадров трёх записей: + +| стадия | мс | доля | +|---|---:|---:| +| lobula — кластеризация с учётом глубины | 15.3 | 35 % | +| ego — собственное движение | 6.4 | 15 % | +| lamina — центр-окружение на трёх масштабах | 6.0 | 14 % | +| retina — проекция облака на решётку | 5.3 | 12 % | +| corridor — ось пути | 4.5 | 10 % | +| stabilize | 4.0 | 9 % | +| память тоннеля, веерное тело, считывание MBON, треки, решение | 1.9 | 4 % | +| **всего, медиана / p95** | **43.1 / 49.0** | из 100 | + +Под видеокарту годится только ламина — это фильтры по сетке 128 × 600. Остальные 80 % +времени — связные компоненты и подгонка геометрии к сотням точек: нерегулярная работа с +ветвлениями, которую GPU не ускоряет, а копирование туда-обратно только замедлит. + +Ламину на CUDA проверили на 49 реальных кадрах (реализация сокомандника, +`F.avg_pool2d` вместо `uniform_filter`): 5.8 мс на процессоре, **2.9 мс** на RTX 5070 Ti +с копированием образа на карту и результата обратно. Совпадение не побитовое: ON-канал +расходится на 1·10⁻⁵, а в 60 пикселях из 3.76 млн (0.0016 %) выбирается другой масштаб — +при равных откликах решает порядок суммирования. + +Итог: перенос сэкономил бы около 3 мс из 43 при бюджете 100, а взамен потребовал бы +другого контейнера (наш собран на `ros:humble-ros-base-jammy`, без CUDA), установленного +у жюри nvidia-container-toolkit и запуска с `--gpus all`. Отказ любого из трёх звеньев — +это не медленный кадр, а не запустившееся решение. **Вывод остаётся на CPU**, видеокарта +— для обучения. + --- ## 8. Что не сработало @@ -1104,6 +1138,23 @@ reflectivity. Ламбертова модель описывала физику 20 000 клеток дают ту же AUC (0.9859 и 0.9850 против 0.9860), а в худшем кадре стоят 2.8 и 7.3 мс вместо 1.5 — платить не за что. +Позднее развёртку продолжили до 100 000 клеток на полной выборке (214 958 +кандидатов), leave-one-bag-out: + +| клеток | AUC | обстановки при 95 % предметов | +|---|---:|---:| +| **4 000** | **0.9829** | **9.89 %** | +| 20 000 | 0.9815 | 10.85 % | +| 50 000 | 0.9794 | 11.73 % | +| 100 000 | 0.9791 | 11.79 % | + +Больше клеток — **хуже**, и монотонно. Активных после торможения APL всегда сто, +поэтому с ростом популяции каждая клетка становится специфичнее, и код превращается +в справочник по обучающим записям, который на невиданной записи обобщает хуже. Узкое +место не в ёмкости, а во входе: бустинг по тем же 23 признакам даёт 0.9927, то есть +запас есть, но лежит в признаках. Для сравнения, у мухи около двух тысяч клеток +Кеньона на полушарие. + Проверка — leave-one-bag-out, отдельная модель на каждую складку. Без этого сквозные цифры были бы ложными: считывание увидело бы проверяемый бэг ровно так же, как память тоннеля, обученная на всём подряд.