ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Rerun 快速上手:从单次日志记录到跨多段录制的查询与机器人训练数据流水线

Rerun 快速上手:从单次日志记录到跨多段录制的查询与机器人训练数据流水线 Rerun 快速上手从单次日志记录到跨多段录制的查询与机器人训练数据流水线【免费下载链接】rerunVisualize, query, and stream to train on multimodal robotics data.项目地址: https://gitcode.com/GitHub_Trending/re/rerunRerun 是面向机器人与 Physical AI 团队的时序数据可视化与处理平台其核心工作流可以概括为从任意传感器记录日志Log、在 Viewer 中可视化Visualize、用数据帧DataFrame查询Query再借助专用 Dataloader 将数据直接**送入训练Train**流程——并且这一切都可以跨越一条或多条录制Recording统一进行。本文以 docs/content/getting-started.md 为主线结合仓库内的 SDK 示例片段与底层源码完整演示从安装到训练的全部步骤读完即可搭建一条日志 → 目录Catalog→ 查询 → 训练的端到端流水线。安装一条命令同时获得 SDK 与 ViewerRerun 将数据写入端SDK与可视化端Viewer打包在同一个 Python 发行包中使用如下命令安装pip install rerun-sdk[catalog,dataloader]其中rerun-sdk本体提供SDK在代码中记录日志、发起查询与Viewer可视化应用可选依赖catalog支持跨多条录制的目录式管理与查询可选依赖dataloader支持将录制数据直接流式送入 PyTorchDataLoader进行训练。如果你使用 Rust 或 C安装与项目初始化方式不同参见仓库内的 Install Rerun 与 Set up a project 两篇文档分别覆盖 Python / Rust / C 三套 SDK 的详细配置。仓库根目录还提供了多语言示例代码例如 examples/python/dna/dna.py、examples/rust/dna/src/main.rs 与 examples/cpp/dna/main.cpp可以作为安装后的第一个运行目标。打开 Viewer一条命令即可浏览任意录制安装完成后在终端直接执行rerun即可启动 Viewerrerun也可以把录制文件直接作为参数传入Viewer 会立即打开该文件rerun path/to/recording.rrdViewer 原生支持的格式包括.rrdRerun 的原生录制格式Rerun Data Recording.mcap机器人社区广泛使用的 MCAP 容器格式以及更多格式图片、视频、点云等详见 Opening files。此外官方还提供浏览器内运行的 Viewer 版本无需本地安装即可打开录制文件进行查看。若安装或运行中遇到问题可查阅 troubleshooting guide。跨多条录制扩展Catalog 目录工作流单个录制的日志与可视化只是起点。当数据集由成百上千条机器人实验录制组成时Rerun 通过Catalog目录把它们组织成可查询的segment段——segment 是目录对象模型中的核心概念详细定义见 Catalog object model。完整的目录工作流分为六步Log将数据写入.rrd文件Server启动或连接一个 catalog serverIngest把.rrd注册为某个数据集dataset下的可查询 segmentVisualize让 Viewer 指向 server浏览目录中的全部录制Query把目录内容查询为 DataFrame底层由 DataFusion 驱动Train挂载 Dataloader从 server 流式读取训练批次。下面逐步展开所有代码片段均来自仓库 docs/snippets/all/tutorials/getting_started.py 与 docs/snippets/all/tutorials/getting_started_log.pyRust 与 C 版本位于同一目录的getting_started_log.rs/getting_started_log.cpp。第 1 步Log——把数据写入 .rrdLog 步骤只依赖日志 SDK因此在 Python、Rust、C 三个语言中都可用。以下 Python 代码创建一个名为run-1的录制记录 10 个时间步上机械臂肩/肘两个关节的标量数据并同时保存到本地.rrd文件import math import rerun as rr with rr.RecordingStream( rerun_example_getting_started, recording_idrun-1 ) as rec: rec.save(run-1.rrd) for t in range(10): rec.set_time(step, sequencet) rec.log(/arm/shoulder, rr.Scalars(math.sin(t * 0.5))) rec.log(/arm/elbow, rr.Scalars(math.cos(t * 0.5)))几个值得注意的 API 语义RecordingStream通过ApplicationId这里为rerun_example_getting_started命名录制稳定的ApplicationId会让 Viewer 在多次运行之间保留 UI 状态recording_idrun-1是录制的唯一标识稍后注册到目录时它会被用作segment IDset_time(step, sequencet)创建一条名为step的时序轴Timeline后续所有log调用都会带上该时间戳rec.save(run-1.rrd)将日志流同时写入磁盘文件便于后续注册与分享。数据写入.rrd的更多细节包括 Archetype / Component 数据模型、实体路径层级、批量日志Component batches与 latest-at 语义参见 Log and Ingest。如果已有其他格式的数据需要转换仓库文档的 how-to 章节提供了大量转换为.rrd的实例。第 2 步启动 catalog server在另一个终端启动本地 catalog serverrerun server该命令会启动一个本地目录服务默认监听端口51234。这一默认值在源码中有明确实现crates/store/re_uri/src/lib.rs 定义了pub const DEFAULT_REDAP_PORT: u16 51234;目录的 URI 形式为rerunhttp://localhost:51234/catalog参见 crates/store/re_uri/src/lib.rs。说明rerun server适用于本地、单机、多用户临时共享如果需要持久化存储与多用户协作官方提供商业化的 Rerun Hub 服务代码只需连接远端地址即可API 保持一致。随后在代码中连接到 server即文档中getting_started[setup]片段import rerun as rr # server_url 即 catalog 地址——本地执行 rerun server 时 # 默认为 rerunhttp://127.0.0.1:51234 client rr.catalog.CatalogClient(server_url)第 3 步Ingest——把 .rrd 注册为 segment目录的条目entry分为table单张 Arrow 表schema-on-write与datasetRerun 数据集合schema-on-read两类。机器人实验数据通常按 dataset 组织一个 dataset 内包含多个 segment如一次抓取任务的多次运行segment 下又可按layer层叠加不同来源的数据默认层名为base。关于对象模型的完整说明见 Catalog object model。注册.rrd的代码getting_started[ingest]片段如下dataset client.create_dataset(demo, exist_okTrue) dataset.register([Path(run-1.rrd).absolute().as_uri()]).wait()要点create_dataset(demo, exist_okTrue)创建或复用名为demo的数据集register()接受一个.rrd文件 URI 列表底层会以该录制的recording_id作为 segment ID 注册该操作是异步的wait()用于等待注册完成。除了注册数据本体还可以注册**属性properties**作为附加层——下面的getting_started[annotate]片段把该 episode 任务成功、任务是 pick_and_place这样的元信息以properties层注册到同一 segmentwith rr.RecordingStream( rerun_example_getting_started, recording_idrun-1 ) as ann: ann.save(run-1-properties.rrd) ann.send_property( episode, rr.AnyValues(successTrue, taskpick_and_place) ) dataset.register( [Path(run-1-properties.rrd).absolute().as_uri()], layer_nameproperties ).wait()同一 segment ID 在同一层名上重复注册会产生覆盖语义若希望追加则使用不同的layer_name。这与对象模型文档中 create segment / append to segment / overwrite segment layer 三种变更操作一一对应。第 4 步Visualize——让 Viewer 浏览整个目录把 Viewer 指向 catalog server即可浏览目录中的每一条录制rerun rerunhttp://127.0.0.1:51234rerunhttp://是 Rerun 目录服务的自定义 URI scheme端口需与第 2 步启动的 server 一致。关于 Viewer 的界面导航、面板布局与操作方式参见 Configure the Viewer 与 navigating-the-viewer。第 5 步Query——查询为 DataFrame目录查询会把数据集内容物化为 DataFrame底层由 Apache DataFusion 提供 SQL 能力可以直接按实体路径、组件与索引列做筛选和列选择。getting_started[query]片段df dataset.filter_contents([/arm/**]).reader(indexstep) print( df.select( rerun_segment_id, /arm/shoulder:Scalars:scalars, /arm/elbow:Scalars:scalars, ) )说明filter_contents([/arm/**])用实体路径通配符限定查询范围.reader(indexstep)指定以step时间轴作为索引列indexselect(...)的列名遵循 Rerun 的列命名约定实体路径:Archetype:component例如/arm/shoulder:Scalars:scalarsrerun_segment_id是查询结果自带的伪列用于标识每条记录来自哪个 segment——这正是跨多条录制统一查询的关键。更完整的查询工作流DataFrame 视图探索 → 导出 → 分析回写参见 Query and Transform该指南以 Pandas 为例同样的思路也适用于 Polars 或直接使用 DataFusion。第 6 步Train——用 Dataloader 生成训练批次训练环节使用rerun.experimental.dataloader模块注意该模块是实验性 API会在版本迭代中变化把目录数据直接包装成 PyTorch 的IterableDataset无需中间导出步骤。getting_started[train]片段from torch.utils.data import DataLoader from rerun.experimental.dataloader import ( DataSource, Field, NumericDecoder, RerunIterableDataset, ) ds RerunIterableDataset( sourceDataSource(datasetdataset), indexstep, fields{ shoulder: Field( /arm/shoulder:Scalars:scalars, decodeNumericDecoder() ), elbow: Field(/arm/elbow:Scalars:scalars, decodeNumericDecoder()), }, ) for batch in DataLoader(ds, batch_size4): print(batch)要点DataSource(datasetdataset)声明数据来源为某个目录数据集indexstep指定按step时间轴采样fields把实体组件列映射为训练样本中的字段名每个Field通过decodeNumericDecoder()指定解码方式数值类数据直接解码为张量最终交给标准torch.utils.data.DataLoader即可按batch_size产出批次。此外还有一处工程细节值得留意Rerun 的 tokio 运行时对fork不安全因此使用多进程 DataLoader worker 时必须把启动方式设置为spawnimport torch.multiprocessing torch.multiprocessing.set_start_method(spawn, forceTrue)这一约束在 getting_started.py 的注释中有明确说明。若要了解更完整的训练示例含 windowed action chunks、GOP 感知的视频解码、DDP 数据划分等高级特性参见 Train 文档其中给出了基于 LeRobot ACT 策略的端到端训练流程准备数据集脚本 → 启动rerun server→ 将 HuggingFace 数据集切分为逐 episode 的.rrd并注册到目录 → 运行训练脚本产出 checkpoint。如果卡住了问题排查路径当流程中任何一步出现问题按以下顺序排查阅读 Troubleshooting 指南覆盖安装与连接阶段的常见问题检查rerun server与代码进程是否在同一台机器、端口 51234 是否被占用或防火墙拦截确认注册的.rrd文件 URI 可被 server 访问本地绝对路径需转换为file://URI远程对象存储则需使用s3://等可寻址 URI确认查询列名与注册数据的实体路径、组件名严格一致。延伸阅读与仓库索引围绕本文工作流可以在仓库中继续深入以下文件文档主线docs/content/getting-started.md、Log and Ingest、Query and Transform、Train概念模型Catalog object modeldatasets / segments / layers / assets / blueprints示例代码getting_started.pyCatalog SDK 全流程、getting_started_log.py三语言 Log 步骤、同目录下的getting_started_log.rs与getting_started_log.cpp底层实现目录默认端口定义见 crates/store/re_uri/src/lib.rsCatalog 客户端实现位于 rerun_py/src/catalog/Python 绑定的入口可参考 rerun_py/src/python_bridge.rs。至此一条完整的日志记录 → 目录管理 → 跨录制查询 → 训练数据供给流水线已经跑通。在此基础上可以进一步探索 Viewer 的蓝图Blueprint定制、Assets 静态资源复用如机器人 URDF 只注册一次即可被所有 segment 共享以及 chunk 级的数据处理 API逐步把 Rerun 变成你机器人实验数据的统一工作台。【免费下载链接】rerunVisualize, query, and stream to train on multimodal robotics data.项目地址: https://gitcode.com/GitHub_Trending/re/rerun创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表