
用Strands Agents、LeRobot和Storage Bucket实现记录-训练-部署一体化

这篇来自 AWS 和 Hugging Face 的教程,展示了如何用 Strands Agents、LeRobot 和 Hugging Face Storage Buckets 构建一个完整的机器人数据闭环:从录制演示、存储、训练到部署,全部在同一个 LeRobot 格式下完成,且数据集始终留在 Hugging Face Hub 上。
核心痛点在于:日常收集的演示文件持续增长,传统方式下每次训练都要先下载完整数据集,每次同步都上传全部字节,GPU 经常因等待数据而闲置。Strands Robots(AWS 开源的 Apache 2.0 SDK)通过将机器人抽象、模拟和 LeRobot 栈封装为 AgentTools,并与 Hugging Face Storage Buckets(2026 年 3 月发布的可变、非版本化、基于 Xet 的对象存储仓库)集成,解决了这个问题。
整个循环分为四步:
1. 录制演示并同步到 Bucket:用 Robot(“so100”) 录制 LeRobot 格式的数据集,然后通过 sync_dataset_to_bucket() 将完成的文件同步到 Hugging Face Storage Bucket。Bucket 位于 hf:// 命名空间,无需额外配置 IAM 或 CORS。录制时使用 mock policy 可先验证流程,实际抓取只需替换为真实 policy。
2. 字节级去重存储:Bucket 底层使用 Xet 的内容定义分块(content-defined chunking)。边界随内容变化,插入少量字节只影响落入的那个块。Hugging Face 自己测量的数据显示,500 MB 文件更改 1% 后重新上传只需传输 5.5 MB,更改 5% 传 27.5 MB,更改 10% 传 55 MB。相比之下,没有分块去重时,覆盖对象需要重新发送所有字节。LeRobot 的 shard 布局(Parquet 每 100 MB、视频 MP4 每 200 MB 滚动新文件)使每次同步只需上传新增的尾部 shard 和部分填充的 shard。
3. 从 Hub 流式训练:StreamingLeRobotDataset 将流式读取封装为 torch iterable,通过 stream_dataset() 暴露。训练时不下载完整数据集,GPU 直接从桶中读取批次,只拉取少量元数据(schema、统计、episode 索引),摄像头帧在迭代时从远程 MP4 解码。在单张 NVIDIA L4 上,500 步 ACT 训练(5120 万参数,有效 batch size 8,120 帧 episode)耗时 133 秒并产出可加载的 checkpoint。Hugging Face 的 CDN 预热后读取速度达约 1086 MB/s(10 GB 载荷)和约 1124 MB/s(100 GB),对比冷读取 780 MB/s。
4. 部署策略并将数据返回循环:训练后的 checkpoint 通过 Robot(“so100″, mode=”real”) 直接部署到物理机器人,只需修改一个关键字参数。物理机器人录制的演示再次保存到同一个 LeRobot 格式目录,ready to sync 回 Bucket,开始下一轮训练。
整个数据闭环中,数据集从未离开 LeRobot 格式,也从未离开 Hub。教程提供了完整的可运行 notebook(examples/notebooks/05_streaming_data_loop.ipynb),在模拟环境下即可运行全流程,无需 GPU 或 Hugging Face 凭证。安全方面,文章强调了提示注入风险、训练数据信任边界、Bucket 凭据作用域、以及只应加载来自可信组织(trust_remote_code=True 需显式设置)的模型权重。

