物理 AI 将重塑物理世界的各个行业,但机器人技术仍然缺乏统一的数据层,无法以现代 AI 所需的速度进行迭代。核心挑战在于,机器人学习依赖于物理数据:多模态、多速率的数据流,与时间、空间和具身性紧密相连。现有的基础设施主要围绕网络数据构建,难以应对这些特性。
在 @rerundotio,我们正在为物理数据构建一个统一的数据层,帮助团队训练并为现实世界交付智能。
Rerun 迄今为止最大的一次发布
Rerun 一直以可视化多模态时间序列数据而闻名。在过去的一年半里,我们一直在默默构建统一数据层的其他组件,以支持从数据采集到训练的完整流程。随着 0.32 Rerun SDK 版本 的发布,这些能力将开源!
这是自三年前 Rerun 首次开源以来最大的一次发布,代表了你可以用 Rerun 完成的工作类型的大幅扩展。
我们正在稳定文件格式,并添加一套新的底层读写 API 用于操作文件。我们正在添加一个新的 API 来操作 Rerun 数据块,专为处理和规范化真实机器人数据而设计。我们正在扩展对 MCAP 和 ROS 2 消息的支持,以提供更好的开箱即用体验。我们正在添加一个新的数据集审查 UI,以加快训练数据集的审查速度。开源目录服务器现在可以索引磁盘上的 .rrd 文件,因此你或你的 Agent 可以对机器人录制的目录编写通用查询。基于同样的基础,我们还发布了一个 PyTorch 数据加载器,让你可以直接在 .rrd 文件上训练机器人模型,而无需导出为训练专用格式。
机器人生态系统一直缺乏一个足够灵活的统一框架来支持机器人学习数据的完整生命周期。随着 0.32 的发布,这个基础正在形成。
除了这个巨大的开源发布,我们还宣布了 Rerun Hub,我们的商业数据目录和存储引擎。Rerun Hub 目前处于私有预览阶段,它将 Rerun SDK 扩展到由对象存储支持的数据集。它提供了一个共享目录和访问层,用于在更大规模上转换、查询、可视化和流式传输机器人数据,同时保留相同的数据模型和 API。
如果你的目标是扩展数据规模,使其超出本地机器的承载能力,同时保持快速迭代,请使用 Rerun Hub!如果你是一个围绕机器人学习构建产品的团队,并且正在考虑你的数据层,请联系我们。
本文的其余部分分为两部分。首先,介绍我们认为物理 AI 扩展所需的数据架构。其次,介绍 Rerun SDK 0.32 中实现该架构的新功能。
机器人学习需要一个专为物理数据构建的数据层
正如 机器人学习的数据层税 中所述,阻碍物理 AI 进展的许多摩擦来自于试图将物理数据强行塞入为传统软件和分析工作负载设计的基础设施。我们需要的是一个为多速率、多模态数据构建的数据层,支持从采集到训练和部署的机器人智能迭代所需的一切。
编码 Agent 意味着用户需要完全控制计算和应用层
为了服务采集、规范化、后处理、筛选和训练的整个工作流程,团队需要各种不同的工具和计算任务。这些工具和任务可以编码团队特定的操作方式,或他们用来大规模驱动数据质量的技术,这使它们成为团队需要拥有的关键差异化领域。
编码 Agent 使得团队能够越来越容易地按照他们想要的方式设计这些工具和计算任务,只要他们拥有代码级别的控制权。因此,很少有团队会接受没有这种控制权。这就是为什么 Rerun SDK 完全开源,并设计为一个你可以在此基础上构建的框架,而不是一个围墙花园式的 SaaS 平台。即使是查看器也被设计为一个库,这样你永远不会被困住。Rerun 始终以代码为先,我们一直在加倍努力使其更易于 Agent 使用。这甚至包括即将推出的完全无头渲染和查看器导航功能,以帮助 Agent 像人类一样查看物理数据。
大多数团队已经在构建定制的独立应用程序和处理脚本,以适应他们自己的工作流程。如果没有建立在坚实的基础上,你最终会得到难以推理且无法良好组合的垂直片段,这限制了生产力的提升。
数据层必须处理使用大规模物理数据的难点

从采集到模型,服务整个数据旅程所需的核心能力是可视化、分析查询、转换和训练。所有这些能力都需要处理多速率、多模态数据,这些数据可能携带机器人语义,如 3D 关系或形状。为了避免错误和数据不一致,你希望在任何使用这种数据的地方一致地处理其细微差别。例如,时间对齐和 3D 变换应该在预处理、查询、可视化和数据集审查中表现一致。
为了轻松迭代数据实验循环以及驱动它的工具,你希望构建在一个统一的单一数据层之上,使交接变得简单,上层应用也变得简单。这意味着数据层需要足够灵活,以满足所有核心应用和计算能力的要求。例如,可视化和计算都需要对多模态时间序列进行快速随机访问,而分析查询需要高效的列扫描,大规模后处理计算(CPU)和训练(GPU)都需要高带宽的并行数据流。
物理数据的行为从根本上不同于网络和业务数据,这意味着它受益于不同的存储和查询抽象。
物理数据的核心存储单元是列块
物理数据有两个显著特征:
第一,它是多速率的:不同的传感器会以截然不同的频率记录数据。GPS 可能为 1-10Hz,摄像头为 10-30Hz,关节角度为 100-200Hz,IMU 为 1kHz。在后处理中,你可能每 10 帧摄像头画面计算一次语义嵌入,或在每个片段的开始和结束处计算场景描述。
第二,它是多模态的:不同的传感器记录的数据大小差异巨大。IMU 和 GPS 只需要几个字节来编码几个数字,而 RGB 摄像头每帧图像可能占用数 MB。
如果你将机器人录制数据存储在一个表中,其中一行代表一个时间戳,一列代表一个数据流,那么多速率特性通常会使这个表非常稀疏;对于任何给定行,大多数列很可能为空。数据的多模态特性会导致内存不平衡,因为单行可能包含大小相差几个数量级的单元格。现有的表格数据基础设施很难处理这种组合。
多速率和多模态数据应该存储在块中,每个块包含数据集的部分行和列。例如,将一百万个 IMU 样本放在一个块中,而将几个视频包放在另一个块中,可以解决稀疏性和内存不平衡问题。

在块内部,列式存储优化了更好的压缩和列扫描查询,而行式存储优化了简单的写入。
在 Rerun,我们相信列块代表了机器人学习数据系统的最佳权衡,并且我们已经将我们的架构围绕它们作为核心存储抽象进行了标准化。
Rerun 的 .rrd 文件格式围绕列块构建
Rerun 的原生文件格式 .rrd 是列块抽象的磁盘表示。在内部,每个列块被编码为一个 Apache Arrow 记录批次,并附带描述数据应如何解释的语义元数据。Apache Arrow 是数据科学领域的行业标准,使用 Arrow 意味着我们可以快速零拷贝地进入 DataFusion、Pandas 和 Polars。

每个块中的元数据包含关于如何解释数据的语义信息("这是一个 IMU 传感器,这是一个 GPS,……"),以便它可以在处理管道中传递,并仍然被自动解释和可视化。
编码后的列块被包装在 protobuf 消息中,并连接起来形成 .rrd 文件。文件末尾的页脚指向一个索引,允许快速随机访问单个块,而无需扫描整个文件。

与其他格式的比较
Apache Parquet 是一种列式磁盘格式,通常与 Arrow 一起使用。它将数据组织成行组,但与 .rrd 中的块不同,这些组不能重叠:每个行组包含密集行范围内的所有列。这使得它不适合多速率、多模态的机器人数据。你可以追加新行,但不能追加新列(无模式演化)。
MCAP 是一种用于在机器人上记录机器人日志的格式。它设计为快速且灵活地写入,具有强大的 ROS 兼容性。然而,它本质上是一种不透明消息的容器格式(使用 JSON、protobuf、CBOR 等编码),并且未针对列式分析查询进行优化。大型扫描和连接也很慢,因为你需要解码每条消息。
Lance 是一种新格式,明确为多模态数据和随机访问(对训练极其重要)而构建。与 Parquet 不同,它支持模式演化。然而,Lance 数据集仍然是行对齐片段的垂直堆叠,因此多速率流会因空值而膨胀。
NCore 是 Nvidia 的一种新格式,专为神经重建而构建。通过每个组件的 timestamps 原生支持多速率,并通过姿态图支持空间对齐。然而,模式是封闭的(规范的传感器组件,而非任意用户定义数据),它基于 Zarr 而非 Arrow 原生,并且不是为通用 SQL/数据帧查询引擎而构建。
你的团队需要的每个功能,如果文件格式不提供,就意味着需要保持同步的另一个管道和团队需要学习的额外工具。Rerun 的格式是唯一能够满足将机器人录制转换为智能所需的所有用例的选项。它允许你保留原始时间戳的数据,同时仍然能够从同一数据源查询和查看,并流式传输到训练。它有足够的结构来构建统一的数据系统,但又足够灵活,可以针对不同的读写模式进行优化。
列块之上的索引、模式和元数据层简化了大规模物理数据的使用
扫描数据集中的所有块来分析单个信号,即使对于小型数据集也扩展性不佳,因此要有效使用它们,你需要一个元数据和索引层来帮助找到任何查询所需的正确块。这看起来很像经典的数据湖仓模式。在我们的案例中,单个数据集或录制由异构块组成,这些块不共享相同的模式。经典的数据处理工具是为处理具有统一模式的表而构建的。因此,用于物理数据的湖仓式索引和元数据层还需要跟踪这些单独的模式,以便能够动态地物化任何流的合并模式,从而使经典数据工具能够处理它。例如,如果你将 IMU 升级为在其消息中发布磁场数据的版本,这种添加与不包含此字段的旧 IMU 兼容,无需重写历史数据以保持兼容性。

列块与高效索引相结合,让你能够精确获取所需的数据,而无需为存储在其旁边的无关流付出代价。你不必在使常见操作快速和能够追踪长尾错误之间做出选择,因为你已经将常见数据导出到单独的数据仓库。
除了性能优势,这一层还允许我们抽象文件,并为上层物理数据的所有用户提供统一的 API。通常,机器人数据存储在一个文件中,而校准数据存储在另一个文件中,抽象这些实现细节是减少数据摩擦和简化计算与应用层的重要部分。
大规模处理和训练需要直接从对象存储进行选择性流式传输
机器人学习数据集已经可以变得非常大,并且随着团队遵循扩展定律以实现越来越强大的模型,它们会变得更大。要处理这种规模的数据,你通常需要将任务分发给大量 CPU 进行后处理,或 GPU 进行训练。在这些情况下,数据吞吐量能够随着计算需求扩展至关重要。
为了最大化性能并最小化出口成本,你希望计算靠近数据运行。同时,GPU 计算可能难以获得,因此许多团队最终会随时间在不同地点租用。所有这些因素意味着你希望能够将存储与处理索引和元数据的服务分开。

在 Rerun 中,查询从 Rerun SDK 开始,然后查询 Rerun Hub,后者负责知道哪些块是解决查询所需的。根据设置,SDK 要么通过 Rerun Hub 中的缓存代理请求块,要么请求对象存储上的字节范围。这允许简化的访问 API、选择性块流式传输以及底层对象存储的最大流式传输带宽。
Rerun SDK 0.32 是用于机器人学习的统一数据工具包
Rerun 0.32 是自 2023 年 2 月首次开源以来最大的一次发布。它将 SDK 的实际用例从记录、可视化和简单查询扩展到从采集到训练的完整数据旅程。以下是对突出这一扩展的新功能的介绍。查看发布说明了解更多详情。
稳定的文件格式,带有块级 Python API
在 Rerun 0.23 中,我们宣布了 Rerun 的 .rrd 文件格式的版本间向后兼容性。实际上,自那以后我们从未破坏任何版本之间的兼容性,现在我们有信心承诺文件格式的通用向后兼容性。我们将继续发展该格式以推动能力和性能,但旧数据将始终能够加载。
在 0.32 之前,你只能通过使用来自其他格式的导入器或更高级别的 log 或 send_columns API 来写入 .rrd 文件,而读取数据的唯一方式是通过数据帧或 SQL 查询。通过此次发布,我们现在引入了块级读写 API,让你能够精确控制数据的形状。
这两项变化共同意味着 .rrd 已经足够成熟,可供广泛的团队构建他们的数据层。
用于机器人原生数据处理的块处理 API
机器人数据通常很混乱。将来自多个来源的数据规范化为团队可以分析和训练的形式很快就会变得复杂。数据管道的这一部分通常由拼凑而成的 Python 脚本组成,这些脚本速度慢且充满细微错误。
为了解决这些问题,我们引入了一套新的(实验性)块处理 API。它们为 .rrd、MCAP、Parquet 和 URDF 等格式提供了统一的加载器接口,这些格式生成 Apache Arrow 块流。然后,你可以轻松地在这些流之上定义处理管道。
机器人数据通常以深度嵌套的结构体形式出现,数据规范化和处理通常意味着重塑、转换和转换其内容。为了满足这一需求,我们还发布了 Lenses,一种受 jq 启发的声明式语言,用于选择和转换这类数据。
这些 API 明确为编码 Agent 设计并经过测试,我们发现它们比通用 Python 更容易生成正确且高效的代码。未来,这些块处理转换将能够在查看器中以及通过 Rerun Hub 在云端运行,而不仅仅是当前的 SDK 端执行器。
扩展了对 MCAP、ROS 2 类型和机器人可视化的内置支持
我们认为,能够轻松地摄取并使所有机器人数据在 Rerun 中发挥作用至关重要。同时,有很多数据无需定制即可完美处理,我们每次发布都在不断改进这种体验。0.32 带来了改进的性能和更多对 MCAP 和常见 ROS 2 类型的开箱即用支持,以及可用可视化的扩展。在此处查看具有内置支持的消息的更新列表。
占用网格,或 3D 中的 2D 地图,对于移动机器人很重要,并且一直是 Rerun 中一个被强烈要求的功能。因此,0.32 添加了新的 GridMap 原型和可视化器,并内置了对相应 ROS 2 消息的支持。
另一个常见请求是能够可视化随时间变化的状态变化。0.32 带来了一个新的实验性 状态时间线视图。如果你一直在等待 Rerun 中的这个视图,我们很乐意听取你对该视图的更多期望。
目录服务器,支持对磁盘上多个录制内容进行索引 SQL 或数据帧查询
Rerun SDK 中的目录 API 允许你对机器人数据集编写完全通用的 SQL 或数据帧查询。当连接到 Rerun Hub 时,这已经支持大规模数据集一段时间了,而开源服务器仅支持完全适合内存的数据集。通过 0.32,我们扩展了开源目录服务器,使其能够索引本地磁盘上文件的字节范围,因此你现在可以仅使用开源 SDK 轻松分析任何包含 .rrd 文件的本地机器人录制目录。
用于快速审查训练和评估数据集的新 UI
在 0.32 中,我们发布了(实验性)数据集审查工具的第一个版本。它让你能够快速同时浏览多个录制,进行异常检测并建立对数据的直觉。它还允许你标记录制,使其成为有用的简单注释工具。该视图使用普通的 Rerun 蓝图进行配置。
许多机器人学习团队都要求这个功能,我们非常希望得到你的所有反馈,以将其变成最高效的数据集审查工具。
用于机器人学习的数据加载器,支持简单的数据集混合和 .rrd 文件的随机查找
我们已经开始研究最受欢迎的功能之一:Rerun 的 PyTorch 数据加载器!新的 rerun.experimental.dataloader 模块将 Rerun 录制暴露为可迭代或映射风格的 PyTorch 数据集,实时流式传输编码图像、标量和压缩视频(h264/h265/av1)。随机访问、多工作线程预取和 DDP 支持开箱即用。它与 OSS 目录服务器以及我们的商业产品 Rerun Hub 兼容,当你想要直接在由对象存储支持的大型数据集上训练时。
我们非常兴奋地发布这个训练数据加载器,供社区开始实验。我们打算使其成为机器人学习领域最好的流式数据加载器,并非常希望得到你的所有反馈和请求。
能够直接使用与可视化、分析和转换相同的数据层进行训练,对于团队真正统一其数据层至关重要,这也是他们简化系统和加速实验周期的关键。
Rerun Hub 处于私有预览阶段,专为扩展而构建
在过去的一年半里,我们一直在与早期的一批优秀初创公司和实验室一起,默默构建加速将机器人学习应用于有价值的现实世界应用所需的数据层。我们目前正在处理 PB 级的机器人训练数据,并且已经到了准备让更多团队加入我们的商业产品 Rerun Hub 的阶段,该产品现已进入私有预览。
Rerun Hub 是一个目录和存储引擎,连接到开源 Rerun SDK,使处理从采集到训练和部署的机器人学习数据变得容易。它充当统一的管理和访问层,为所有核心数据能力提供支持,包括摄取、可视化、分析查询、转换和训练。数据可以存储在任何兼容 S3 的对象存储中,Rerun Hub 高效地协调从对象存储到 Rerun SDK 的直接选择性流式传输,用于你的训练或大规模并行后处理任务。集中式枢纽还通过使构建可共享的数据链接变得容易(无论是通过代码还是在查看器中交互式进行),简化了协作和自动审查。

如果你正在构建智能机器人,并且有兴趣升级你的数据层以加快迭代速度,请联系我们。对于已经达到一定规模、拥有复杂现有系统的团队,Rerun 很容易逐步采用,我们还可以提供前向部署工程师来帮助你升级,而无需将核心人员从其他最高优先级任务中调离。





