Новый слой данных для обучения роботов

Полный перевод X Article Nikolaus West о Rerun SDK 0.32, Rerun Hub и том, каким должен быть единый слой данных для robot learning и Physical AI.

Новый слой данных для обучения роботов

Оригинал: Nikolaus West в X.

Physical AI изменит индустрии во всём физическом мире, но робототехнике всё ещё не хватает единого слоя данных, необходимого для итераций на скорости, которой требует современный ИИ. Главная проблема в том, что обучение роботов работает с физическими данными: мультимодальными потоками с разной частотой, привязанными ко времени, пространству и воплощению в конкретном теле. Существующая инфраструктура в основном строилась вокруг веб-данных и плохо справляется с такими свойствами.

В @rerundotio мы создаём единый слой данных для физических данных, чтобы помочь командам обучать и выпускать интеллект для реального мира.

Самый крупный релиз Rerun на сегодняшний день

Rerun лучше всего известен как инструмент для визуализации мультимодальных временных рядов. Последние полтора года мы тихо строили остальные части единого слоя данных, который поддерживает весь путь от сбора данных до обучения. С релизом Rerun SDK 0.32 эти возможности становятся open source.

Это крупнейший релиз с момента, когда Rerun впервые был открыт три года назад. Он значительно расширяет типы задач, которые можно решать с помощью Rerun.

Мы стабилизируем файловый формат и добавляем новый набор низкоуровневых API чтения и записи для файлов. Добавляем новый API для работы с чанками данных Rerun, предназначенный для wrangling и нормализации реальных робототехнических данных. Расширяем поддержку MCAP и сообщений ROS 2, чтобы улучшить опыт «из коробки». Добавляем новый интерфейс ревью датасетов, который ускоряет проверку обучающих наборов данных. Open source catalog server теперь индексирует .rrd-файлы на диске, чтобы вы или ваш агент могли писать универсальные запросы по директориям с робототехническими записями. На той же основе мы выпускаем PyTorch dataloader, чтобы можно было обучать модели роботов напрямую на .rrd-файлах без экспорта в специальный формат для обучения.

Экосистеме робототехники не хватало единого фреймворка, достаточно гибкого для поддержки полного жизненного цикла данных robot learning. В версии 0.32 такая основа начинает появляться.

Помимо крупного open source-релиза, мы также анонсируем Rerun Hub — наш коммерческий каталог данных и storage engine. Rerun Hub теперь доступен в private preview и расширяет Rerun SDK для датасетов, лежащих в object storage. Он даёт общий каталог и слой доступа для трансформации, запросов, визуализации и стриминга робототехнических данных в гораздо большем масштабе, сохраняя ту же модель данных и те же API.

Используйте Rerun Hub, если ваша цель — масштабировать данные за пределы того, что помещается на локальной машине, и при этом двигаться быстро. Если вы строите продукт вокруг robot learning и думаете о своём data layer — напишите нам.

Остальная часть поста состоит из двух частей. Сначала — вводная по архитектуре данных, которая, по нашему мнению, нужна Physical AI для масштабирования. Затем — обзор новых возможностей Rerun SDK 0.32, которые воплощают эту архитектуру на практике.

Robot learning нужен слой данных, специально созданный для физических данных.

Как описано в The Data Layer Tax for Robot Learning, значительная часть трения, замедляющего прогресс Physical AI, возникает из попыток протолкнуть физические данные через инфраструктуру, созданную для традиционного ПО и аналитических нагрузок. Нужен слой данных, построенный для multi-rate и multimodal данных, который поддерживает всё, что нужно для итераций над интеллектом роботов: от сбора до обучения и деплоя.

Coding agents означают, что пользователям нужен полный контроль над compute- и application-слоем

Чтобы обслуживать весь workflow — сбор, нормализацию, постобработку, курацию и обучение, — командам нужны разные инструменты и вычислительные jobs. Эти инструменты и jobs могут, например, кодировать специфические способы работы команды или техники, которые она использует для поддержания качества данных в масштабе. Поэтому это ключевая зона дифференциации, которой команды должны владеть сами.

Coding agents делают для команд всё более реалистичным проектирование таких инструментов и вычислительных jobs ровно так, как им нужно, если у них есть контроль на уровне кода. Из-за этого очень мало команд согласится лишиться такого контроля. Именно поэтому Rerun SDK полностью open source и спроектирован как фреймворк, на котором можно строить, а не как закрытая SaaS-платформа. Даже viewer сделан как библиотека, чтобы вы не оказались в ловушке. Rerun всегда был code-first, и мы ещё сильнее упрощаем его использование агентами. В это входит и будущая работа над полностью headless-рендерингом и навигацией viewer, чтобы агенты могли видеть физические данные так же, как люди.

Большинство команд уже создаёт кастомные одноразовые приложения и скрипты обработки, заточенные под собственные workflow. Если не строить их на прочном фундаменте, получаются вертикальные фрагменты, в которых трудно разбираться и которые плохо компонуются друг с другом. Это ограничивает рост продуктивности.

Слой данных должен справляться со сложными частями использования физических данных в большом масштабе

Ключевые возможности, необходимые для всего пути данных от сбора до модели, — это визуализация, аналитические запросы, трансформация и обучение. Все они должны работать с multi-rate, multimodal данными, которые могут нести робототехническую семантику вроде 3D-связей или формы. Чтобы избегать багов и несогласованности данных, нужно единообразно обрабатывать тонкости такого типа данных везде, где они используются. Например, выравнивание по времени и 3D-трансформации должны вести себя одинаково при препроцессинге, запросах, визуализации и ревью датасетов.

Чтобы было легко итерировать и по data-experiment loop, и по инструментам, которые его обеспечивают, нужно строить поверх единого слоя данных, где handoff между этапами тривиален, а приложения сверху остаются простыми. Это означает, что слой данных должен быть достаточно гибким, чтобы покрывать требования всех ключевых application- и compute-возможностей. Например, и визуализация, и compute требуют быстрого random access к мультимодальным временным рядам, аналитические запросы требуют эффективных column scans, а крупномасштабная постобработка на CPU и обучение на GPU требуют высокополосного параллельного стриминга данных.

Физические данные фундаментально ведут себя иначе, чем веб- и бизнес-данные, поэтому им нужны другие абстракции хранения и запросов.

Базовая единица хранения физических данных — column chunk

У физических данных есть две отличительные характеристики.

Первая — multi-rate: разные сенсоры пишут данные с очень разной частотой. GPS может работать на 1–10 Гц, камеры — на 10–30 Гц, углы суставов — на 100–200 Гц, IMU — на 1 кГц. В постобработке вы можете вычислять semantic embeddings для каждого десятого кадра камеры или описания сцен в начале и конце каждого эпизода.

Вторая — multimodal: разные сенсоры записывают данные очень разного размера. IMU и GPS требуют всего нескольких байтов для пары чисел, а RGB-камера может занимать много мегабайт на каждый кадр.

Если хранить робототехническую запись в таблице, где одна строка соответствует timestamp, а колонка — потоку данных, multi-rate-природа сделает эту таблицу очень разреженной: для любой конкретной строки большинство колонок, скорее всего, будут пустыми. Multimodal-природа данных приводит к большому дисбалансу памяти, потому что одна строка может содержать ячейки, отличающиеся по размеру на порядки. Существующая табличная инфраструктура очень плохо справляется с такой комбинацией.

Multi-rate и multimodal данные лучше хранить в чанках, каждый из которых содержит подмножества строк и колонок датасета. Возможность, например, разместить миллион samples IMU в одном чанке и всего несколько видеопакетов в другом позволяет решить и проблему разреженности, и проблему дисбаланса памяти.

Внутри чанка column-oriented storage оптимизирует лучшую компрессию и запросы column scan, а row-oriented storage оптимизирует простую запись.

В Rerun мы считаем, что column chunks — лучший компромисс для систем данных robot learning, и стандартизировали нашу архитектуру вокруг них как базовой абстракции хранения.

Формат .rrd в Rerun построен вокруг column chunks

Нативный файловый формат Rerun, .rrd, — это дисковое представление абстракции column chunk. Внутри каждый column chunk кодируется как Apache Arrow record batch вместе с семантическими метаданными, описывающими, как интерпретировать данные. Apache Arrow — индустриальный стандарт для data science, и благодаря Arrow у нас есть быстрый zero-copy путь в DataFusion, Pandas и Polars.

Метаданные в каждом чанке содержат семантическую информацию о том, как интерпретировать данные («это IMU-сенсор», «это GPS» и так далее), чтобы она проходила через пайплайны обработки и всё ещё могла автоматически интерпретироваться и визуализироваться.

Закодированные column chunks оборачиваются в protobuf-сообщения и конкатенируются в .rrd-файл. Footer в конце файла указывает на индекс, позволяя быстро получать random access к отдельным чанкам без сканирования всего файла.

Сравнение с другими форматами

Apache Parquet — columnar on-disk формат, часто используемый вместе с Arrow. Он организует данные в row groups, но, в отличие от chunks в .rrd, эти группы не могут пересекаться: каждая row group содержит все колонки для плотного диапазона строк. Это делает формат неподходящим для multi-rate, multimodal робототехнических данных. Можно добавлять новые строки, но нельзя добавлять новые колонки — нет schema evolution.

MCAP — формат для записи робототехнических логов на роботе. Он рассчитан на быструю и гибкую запись, с сильной совместимостью с ROS. Однако по сути это контейнер непрозрачных сообщений, закодированных через JSON, protobuf, CBOR и так далее, и он не оптимизирован для columnar analytical queries. Большие scans и joins тоже медленные, потому что нужно декодировать каждое сообщение.

Lance — новый формат, явно построенный для multimodal данных и random access, что крайне важно для обучения. В отличие от Parquet, он поддерживает schema evolution. Однако Lance dataset всё ещё представляет собой вертикальный стек row-aligned fragments, поэтому multi-rate потоки раздуваются null-значениями.

NCore — новый формат от Nvidia, построенный для neural reconstruction. Multi-rate поддерживается нативно через per-component timestamps, а spatial alignment — через pose graph. Однако схема закрытая: canonical sensor components, а не произвольные пользовательские данные. Он основан на Zarr, а не Arrow-native, и не создан для обслуживания generic SQL / dataframe query engine.

Каждая возможность, которая нужна вашей команде, но отсутствует в файловом формате, означает ещё один пайплайн, который нужно синхронизировать, и ещё один набор инструментов, который команде нужно освоить. Формат Rerun — единственный вариант, который может обслуживать все сценарии, необходимые для превращения робототехнических записей в интеллект. Он позволяет хранить данные в исходных timestamps, одновременно делая их доступными для запросов, просмотра и стриминга в обучение. В нём достаточно структуры, чтобы строить единые data systems сверху, и достаточно гибкости, чтобы оптимизировать разные паттерны чтения и записи.

Слой индексации, схемы и метаданных поверх column chunks упрощает работу с физическими данными в масштабе

Сканировать все чанки датасета, чтобы проанализировать один сигнал, плохо масштабируется даже для небольших датасетов. Поэтому для эффективного использования нужен слой метаданных и индексации, который помогает находить правильные чанки для любого запроса. Это очень похоже на классический паттерн data lakehouse. В нашем случае один датасет или запись состоит из гетерогенных чанков, у которых нет общей схемы. Классические инструменты обработки данных построены для таблиц с единой схемой. Поэтому lakehouse-подобный слой индексации и метаданных для физических данных должен также отслеживать индивидуальные схемы, чтобы на лету материализовывать объединённые схемы любого stream и позволять классическим data tools работать с ними. Например, если вы обновите IMU до модели, которая публикует данные магнитного поля, это добавление будет совместимо со старым IMU, где такого поля не было: не нужно переписывать исторические данные ради совместимости.

Column chunks вместе с эффективной индексацией позволяют получать ровно те данные, которые нужны, без штрафа за несвязанные потоки, хранящиеся рядом. Не приходится выбирать между быстрыми частыми операциями и возможностью искать редкие long-tail bugs только потому, что частые данные были экспортированы в отдельный warehouse.

Помимо преимуществ производительности, этот слой позволяет абстрагироваться от файлов и представить единый API для всех пользователей физических данных на слоях выше. Часто робототехнические данные хранятся в одном файле, а калибровка — в другом. Абстрагирование таких деталей реализации — важная часть снижения data friction и упрощения compute- и application-слоя.

Крупномасштабная обработка и обучение требуют выборочного стриминга напрямую из object storage

Датасеты robot learning уже могут быть очень большими и станут намного больше по мере того, как команды будут следовать scaling laws для создания всё более способных моделей. Для обработки такого масштаба часто нужно распараллеливать работу на большое количество CPU для постобработки или GPU для обучения. В таких случаях важно, чтобы throughput данных мог масштабироваться вместе с потребностями compute.

Чтобы максимизировать производительность и минимизировать egress costs, compute желательно запускать рядом с данными. При этом GPU compute бывает трудно достать, поэтому многие команды со временем арендуют его в разных местах. Всё это означает, что нужно уметь отделять storage от сервисов, отвечающих за индексацию и метаданные.

В Rerun запросы начинаются из Rerun SDK, который затем обращается к Rerun Hub. Rerun Hub отвечает за понимание, какие чанки нужны для выполнения запроса. В зависимости от настройки SDK либо запрашивает чанки через cached proxy в Rerun Hub, либо запрашивает byte ranges в object storage. Это даёт упрощённый API доступа, выборочный chunk streaming и максимальную полосу стриминга от underlying object storage.

Rerun SDK 0.32 — единый data toolkit для robot learning.

Rerun 0.32 — крупнейший релиз с момента открытия проекта в феврале 2023 года. Он расширяет практические сценарии использования SDK: от логирования, визуализации и более простых запросов до полного пути данных от сбора до обучения. Ниже — обзор новых функций, подчёркивающих это расширение. Подробнее смотрите release notes.

Стабильный файловый формат и chunk-level Python API

В Rerun 0.23 мы объявили backward compatibility между версиями для файлового формата .rrd. На практике мы не ломали совместимость ни между какими версиями с тех пор и теперь уверенно обещаем общую backward compatibility для файлового формата. Мы продолжим развивать формат ради новых возможностей и производительности, но старые данные всегда будут загружаться.

До 0.32 записывать .rrd-файлы можно было только через importer из другого формата или через более высокоуровневые API log и send_columns, а читать данные — только через dataframe- или SQL-запросы. В этом релизе мы вводим chunk-level API чтения и записи, которые дают точный контроль над формой ваших данных.

Вместе эти два изменения означают, что .rrd стал достаточно зрелым, чтобы широкий круг команд мог строить на нём свои data layers.

Chunk processing API для robotics-native data wrangling

Робототехнические данные часто грязные. Нормализация данных из нескольких источников во что-то, что команда может анализировать и использовать для обучения, быстро становится сложной. Эта часть data pipeline часто состоит из набора склеенных Python-скриптов, которые медленные и полны тонких багов.

Чтобы решить эти проблемы, мы вводим новый набор экспериментальных chunk processing API. Они дают единый loader interface для форматов вроде .rrd, MCAP, Parquet и URDF, которые производят streams Apache Arrow chunks. Затем поверх этих streams можно легко определять processing pipelines.

Робототехнические данные часто приходят в виде глубоко вложенных structs, а нормализация и wrangling данных часто означают reshape, cast и transform их содержимого. Для этого мы также выпускаем Lenses — декларативный язык выбора и трансформации таких данных, вдохновлённый jq.

Эти API были явно спроектированы и протестированы с учётом coding agents. Мы видим, что агентам гораздо проще писать корректный и эффективный код с Rerun chunk processing API, чем с generic Python. В будущем эти chunk processing transforms смогут выполняться не только на стороне SDK executor, но и в viewer, и в облаке через Rerun Hub.

Расширенная встроенная поддержка MCAP, типов ROS 2 и робототехнических визуализаций

Мы считаем критически важным, чтобы любые робототехнические данные было легко ingest-ить и делать полезными в Rerun. При этом много данных можно отлично обрабатывать без кастомизации, и мы улучшаем этот опыт с каждым релизом. Версия 0.32 приносит улучшенную производительность и больше out-of-the-box поддержки MCAP и распространённых типов ROS 2, а также расширение доступных визуализаций. Обновлённый список сообщений со встроенной поддержкой смотрите здесь.

Occupancy grids, или 2D-карты в 3D, важны для мобильных роботов и давно были одной из самых запрашиваемых возможностей в Rerun. Поэтому 0.32 добавляет новый GridMap archetype и visualizer вместе со встроенной поддержкой соответствующих сообщений ROS 2.

Ещё один частый запрос — возможность визуализировать изменения состояния во времени. Rerun 0.32 приносит новый экспериментальный State Timeline View. Если вы ждали этот view в Rerun, нам очень нужна ваша обратная связь о том, что ещё вы хотели бы в нём увидеть.

Catalog server с индексированными SQL- или dataframe-запросами по множеству записей на диске

Catalog APIs в Rerun SDK позволяют писать полностью универсальные SQL- или Dataframe-запросы по робототехническим датасетам. При подключении к Rerun Hub это уже некоторое время поддерживало крупномасштабные датасеты, тогда как open source server поддерживал только датасеты, полностью помещающиеся в памяти. В 0.32 мы расширяем open source catalog server: теперь он индексирует byte ranges файлов на локальном диске, и вы можете легко анализировать любую локальную директорию робототехнических записей в .rrd-файлах, используя только open source SDK.

Новый UI для быстрого ревью датасетов для обучения и оценки

В 0.32 мы выпускаем первую версию экспериментального инструмента ревью датасетов. Он позволяет быстро просматривать множество записей одновременно, искать аномалии и наращивать интуицию по данным. Он также позволяет помечать записи флагами, что делает его полезным как простой annotation tool. View конфигурируется через обычный Rerun blueprint.

Многие команды robot learning просили такую функциональность, и нам очень нужна обратная связь о том, как превратить её в максимально эффективный инструмент ревью датасетов.

Dataloader для robot learning с простой смесью датасетов и random seeks в .rrd-файлах

Мы начали работу над одной из самых запрашиваемых функций: PyTorch dataloader для Rerun. Новый модуль rerun.experimental.dataloader предоставляет Rerun recordings как iterable или map-style PyTorch datasets, стримя encoded images, scalars и compressed video — h264/h265/av1 — на лету. Random access, multi-worker prefetching и DDP support работают из коробки. Он совместим и с OSS catalog server, и с нашим коммерческим продуктом Rerun Hub, когда вы хотите обучаться напрямую на больших датасетах, лежащих в object storage.

Мы очень рады выпустить этот training dataloader, чтобы сообщество начало экспериментировать. Мы намерены сделать его лучшим streaming dataloader для robot learning из возможных и будем рады вашей обратной связи и запросам.

Возможность обучаться напрямую на том же слое данных, который используется для визуализации, анализа и трансформации, критически важна для команд, которые хотят действительно унифицировать свои data layers, упростить системы и ускорить экспериментальные циклы.

Rerun Hub доступен в private preview и построен для масштаба.

Последние полтора года мы тихо строили слой данных, необходимый для ускорения вывода robot learning в ценные реальные приложения, вместе с ранней группой отличных стартапов и лабораторий. Сейчас мы обрабатываем петабайты обучающих данных роботов и подошли к моменту, когда готовы подключать больше команд к нашему коммерческому продукту Rerun Hub, который теперь входит в private preview.

Rerun Hub — это catalog и storage engine, который подключается к open source Rerun SDK и упрощает работу с robot learning data от сбора до обучения и деплоя. Он выступает единым слоем управления и доступа, обеспечивающим все ключевые data capabilities: ingestion, visualization, analytical queries, transformation и training. Данные могут храниться в любом S3-compatible object storage, а Rerun Hub эффективно управляет direct selective streaming из object storage в Rerun SDK внутри ваших training jobs или massively parallel post-processing jobs. Централизованный hub также упрощает совместную работу и автоматизированное ревью, позволяя легко создавать shareable data links как через код, так и интерактивно в viewer.

Если вы строите интеллектуальных роботов и хотите обновить свой data layer, чтобы итерировать быстрее, напишите нам. Для команд, которые уже достигли некоторого масштаба со сложными существующими системами, Rerun легко внедрять по частям, а мы также можем предложить forward deployed engineers, чтобы помочь вам обновиться, не отвлекая ключевых людей от других главных приоритетов.

Subscribe to AI Pulse

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
jamie@example.com
Subscribe