返回

文章详情

YouTube系统设计用于机器人数据基础设施

Hacker News2026年7月21日 18:08

金斯顿·宽 2026-07-20 当我们第一次开始构建一个机器人数据平台时,我们并没有考虑YouTube。机器人团队希望能够上传他们的LeRobot数据集,搜索演示内容,检查同步的摄像头视频流和机器人状态,并导出经过整理的集用于训练。在我们看来,这听起来是一个相当专业化的机器人问题。因此我们构建了Pareto。一旦我们开始进行基础设施工作,需求开始变得熟悉。我们需要可靠地上传大型媒体文件,保留原始文件,后台处理它们,生成缩略图和预览视频,索引它们的元数据,并将它们流式传输到浏览器,而无需下载整个数据集。"设计YouTube"是一个经典的系统设计练习。它可能显得有些无意义:YouTube占据主导地位,而我们几乎没有人会需要以那种规模构建一个全球消费视频平台。如果我们将成千上万的用户在平台上上传单个视频重新框架为单个机器人数据集上传成千上万的视频,相似之处变得更加清晰。ByteByteGo将练习的范围限定为上传和播放:原始文件归入Blob存储,后台工作者对其进行转码,一个完成流程更新元数据,CDN交付最终版本。这是上面简化后的形状。机器数据的一集经典视频平台始于一个主导对象:一个视频,也许还有音频,或者可能还有字幕。一个机器人学习数据集具有更复杂的数据单元。一集机器数据是一个多模态记录:它可以包含多个摄像头视频流(手腕、顶部、胸部等)以及关节位置、动作、力读数、时间戳、任务描述和其他传感器流。摄像头可能是数据集的最大部分,但如果孤立存在则没有用处。只有当数据与机器人在那一时刻的感知和行为保持联系时,数据才有意义。Pareto在各集中进行搜索,因此,寻找“橙色块”的人可以拖动周围的轨迹,比较摄像头,并决定某个演示是否属于训练集。LeRobot v3使这一点具体化。各集可以共享Parquet数据文件和MP4碎片,因此阅读一集意味着解析其结构化行范围以及每个摄像头视频中的时间戳范围。我们一旦将数据路径写下来,便觉得很熟悉:上传 -> 处理 -> 存储 -> 索引 -> 播放。Pareto是开源的,因此您可以检查系统并自行运行。1. 可靠的上传 当涉及多媒体时,我们会进入麻烦的大型上传艺术。连接失败,进程重启,而因为最后一个文件被中断而重试整个数据集是昂贵的。视频平台通过可恢复上传和明确的从上传到准备处理的过渡来解决这个问题。在Pareto中,我们将接收源文件与转换和索引分开。源文件存储在版本化存储路径下,完成的批次被标记检查点,最终的清单最后写入。下游作业使用该清单作为完成标记,而不是猜测某个目录是否已完成。它还使我们能够追踪任何生成的输出到确切的源文件和生成它的批次。保留原始数据集也意味着未来的处理可以变化,而不需要用户再次上传数据。2. 处理成为管道 对于任何流媒体视频的网站,上传必须处理成多个版本:不同的分辨率和编码,缩略图,预览,字幕和其他资产。原始文件是更大后台管道的一个输入。对于机器数据,我们生成采样帧、缩略图、预览视频、下采样的状态和动作系列、向量嵌入、搜索索引和Rerun录音。每个都服务于不同的用途:搜索、浏览、同步播放、分析或导出。浏览器可以显示搜索结果而无需打开完整数据集,就像YouTube可以在不提供原始上传的情况下开始播放一样。3. 运行长作业 Pareto使用Temporal作为持久工作流在管道中运行不同的作业。它们有托管服务,但它也是开源和可自托管的。工作者按能力和工作的形状分开。我们在GPU嵌入工作者之间分片独立的集范围,然后在合并切片输出并运行全球工作的一步中汇聚。其他不需要预加载热模型的作业被拆分为独立块,可以在弹性GPU或CPU池上运行。这样可以防止一种作业类的突发消耗另一种工作所需的容量。并非每个生成的输出都需要在数据集有用之前就准备好。我们将许多轻量级、可恢复的计算移至按需的延迟路径,使关键路径专注于使数据可搜索和可视化。这降低了首次使用的时间,并避免在没有人要求的工件上浪费周期。

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡