RLDS、OXE 转 LeRobot
更新时间:2026-07-21
概述
将 Open X-Embodiment(OXE)标准的 RLDS 格式机器人数据集转换为 LeRobot v3.0 格式,支持分片并行转换和最终合并。
- 输入:RLDS/OXE 格式数据集目录(如
cmu_play_fusion) - 输出:LeRobot v3.0 格式数据集(含 parquet + 可选视频)
- 业务价值:一键迁移社区开源数据集到统一训练框架,无需手动编写转换脚本
处理流程
Plain Text
1RLDS 数据集 → S1 分片转换 → S2 合并分片 → LeRobot v3.0 数据集
算子映射
| 步骤 | 算子 | 说明 |
|---|---|---|
| S1 | Convert |
按分片并行读取 RLDS tfrecord,转为 LeRobot v3.0 子目录 |
| S2 | Merge |
合并所有分片子目录为完整数据集,生成统一 metadata |
数据流向
Plain Text
1input_dir (RLDS dataset)
2 → S1 → tmp_dir/shards/ (分片子目录) + tmp_dir/s1_convert.jsonl
3 → S2 → output_dir/ (LeRobot v3.0 dataset)
前置条件
| 资源 | 说明 |
|---|---|
| AIHC 队列 | 需要有可用的计算队列(queue_id) |
| PFS 存储 | 用于存放分片中间数据和最终输出(pfs_id) |
| BOS Bucket | 用于挂载算子脚本和 RLDS 输入数据,默认 aihc-rdw-bj/aihc-daft |
| 镜像 | ccr-registry.baidubce.com/aihc/aihc-daft-gpu:0.5.2.1-cu121-py3.11-ubuntu22.04 |
全局参数说明
| 参数名 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
image |
string | 是 | ccr-registry.baidubce.com/aihc/aihc-daft-gpu:0.5.2.1-cu121-py3.11-ubuntu22.04 |
镜像地址(含 tag),不填则使用默认值 |
queue_id |
string | 是 | — | AIHC 队列 ID |
priority |
string | 否 | high |
任务优先级 |
pfs_id |
string | 是 | — | PFS 存储 ID |
pfs_source_path |
string | 否 | / |
PFS sourcePath |
pfs_mount_path |
string | 否 | /mnt/pfs |
PFS 挂载点 |
bos_source_path |
string | 否 | aihc-rdw-bj/aihc-daft |
BOS sourcePath |
bos_mount_path |
string | 否 | /opt/aihc |
BOS 挂载点 |
dataset |
string | 是 | cmu_play_fusion |
OXE 数据集名 |
input_dir |
string | 是 | /opt/aihc/data/embodied_pipelines/input_data/p4/oxe |
含 RLDS 数据集的父目录 |
tmp_dir |
string | 是 | — | 中间数据目录(分片落盘 + handoff JSONL) |
output_dir |
string | 是 | — | 合并后 v3.0 数据集根目录(最终产物) |
num_splits |
int | 否 | 2 |
分片数(并行度) |
no_videos |
string | 否 | false |
是否跳过视频生成(true/false) |
vcodec |
string | 否 | h264 |
视频编码器(h264/auto/libsvtav1) |
encoder_threads |
string | 否 | 空 | 每个编码器实例的线程数(空=不限制) |
no_cleanup |
string | 否 | false |
合并后是否保留分片子目录(true/false) |
head_cpu |
int | 否 | 4 |
Head 节点 CPU 数 |
head_memory |
int | 否 | 20 |
Head 节点内存(GB) |
shared_memory |
int | 否 | 4 |
sharedMemory 大小(GB) |
worker_replicas |
int | 否 | 1 |
Worker 副本数 |
worker_cpu |
int | 否 | 6 |
Worker 节点 CPU 数 |
worker_memory |
int | 否 | 24 |
Worker 节点内存(GB) |
步骤详解
S1 分片转换(Convert)
将 RLDS/OXE 数据集按 num_splits 分片并行读取 tfrecord,转为 LeRobot v3.0 格式的子目录。每个分片独立输出一个子数据集目录。
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
dataset |
string | cmu_play_fusion |
OXE 数据集名(用于定位数据和确定 schema) |
num_splits |
int | 2 |
分片数,控制并行度和内存占用 |
no_videos |
string | false |
跳过视频编码(纯 parquet 导出) |
vcodec |
string | h264 |
视频编码器 |
encoder_threads |
string | 空 | 编码线程数 |
- 输入:
input_dir/(RLDS tfrecord 文件) - 输出:
tmp_dir/shards/(分片子目录)+tmp_dir/s1_convert.jsonl(分片清单)
S2 合并分片(Merge)
将 S1 输出的多个分片子目录合并为一个完整的 LeRobot v3.0 数据集。合并 parquet 索引、视频文件和 metadata.json。
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
no_cleanup |
string | false |
合并后是否保留分片子目录(调试用) |
- 输入:
tmp_dir/s1_convert.jsonl(分片清单) - 输出:
output_dir/(完整 LeRobot v3.0 数据集)
任务拓扑
Plain Text
1+-------------+ +----------+
2| S1 Convert | --> | S2 Merge |
3| (CPU) | | (CPU) |
4+-------------+ +----------+
2 个步骤串行执行,均为 CPU 计算,无需 GPU。
使用建议
-
num_splits应根据数据集大小和可用内存调整:- 小数据集(<10GB):
num_splits=1即可 - 大数据集(>100GB):建议
num_splits=4~8,配合增加worker_replicas
- 小数据集(<10GB):
- P4 全程 CPU 计算,
head_memory和worker_memory比 P1-P3 更大(默认 20GB/24GB),因为 tfrecord 解析内存开销较高 - 设置
no_videos=true可跳过视频编码,大幅加速转换(适合只需要动作数据的场景) no_cleanup=true适用于调试:保留分片子目录方便检查中间结果- 支持的 OXE 数据集列表取决于镜像内
oxe_dataset_configs的注册情况
评价此篇文章
