
2026/09/01 0:02
Hebbian Robotics (YC S26) のスケーラブルなロボティクスデータパイプライン構築へ
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Hebbian Robotics は、多様なシステムからの同期された動画、状態、行動記録を含む大規模なデータセットの管理というロボティクスにおける重要なボトルネックを解決することを目的としたオープンソース SDK「HFlow」を発表しました。このツールは、これらの時系列ストリームに対して MCAP を標準的な規範フォーマットとして確立することで、物理 AI および自律ポリシーに不可欠なスケーラブルなマルチモーダルパイプラインを可能にします。特に重要なのは、開発者が独自のプロパリエートフレームワークの中核ロジックを書き換えるのではなく、自分のデータ要件に応じたシンプルな Python アダプターを書くことができる点です。この柔軟性により、処理された各エピソードは直接の provenance メタデータを保持し、スキーマ、パイプラインバージョン、ソースの起源に対する完全なトレーサビリティを実現します。ユーザーは重い動画ファイルをロードせずに DuckDB SQL を使用してこの豊富なデータを検査でき、システムは複雑な処理ステップを視覚グラフとしてレンダリングすることでデバッグを容易にしています。4 つの段階からなるライフサイクルは、収集・取り込み、Python 変換を用いた Airflow DAG ベースの処理、エピソードカタログに対する SQL ベースのカリキュレーション、カリキュレーテッドな MCAP アウプットの配信をサポートします。現在では単一テナントワークスペース(Docker Compose を通じて、または既存の Airflow 3 環境へのデプロイを通じて)でホストされていますが、今後のアップデートではマルチテナント制御平面的を導入することを目指しています。システム要件には Python ≥ 3.11、Docker、Linux 用のネイティブ ffmpeg/ffprobe、クラウドルート用のオプションバックエンドバケット(Windows は WSL2 を通じてサポートされます)が含まれます。PyPI で利用可能なバージョン 0.2.0 から、HFlow は既存の環境を用いて高度なロボティックエージェントの学習および評価のために堅牢で透明性の高いインフラストラクチャを求めるチームにとって、大きな一歩を進めることを意味します。
本文
Hebbian Robotics (YC S26):オープンソース SDK「HFlow」
ロボティクスおよびフィジカル AI における、スケーラブルなマルチモーダルデータパイプラインのためのオープンソース SDK です。
本プロジェクトは Hebbian Robotics (YC S26) が開発しており、大規模チームで用いられるデータツールやプラクティスを、あらゆるサイズのチームが利用できるようにすることを目指しています。
背景と課題:なぜ HFlow か?
我々は、データの処理がロボティクスにおける主要なボトルネックだと考えています。コーパス(データ集)には、ビデオ、状態、アクション、タイムスタンプ、メタデータを組み合わせた多数の記録システムが含まれます。これにより以下の問題が発生します。
- 品質管理の難しさ
- カメラが停止していないか確認する必要がある。
- ストリームが同期外れていないかチェックする必要がある。
- 必要なトピックが存在するか、重複した録画が混入していないかを検証する必要がある。
- 大規模データへの対応
- コーパスが大きくなると、断片的なスクリプトで何が実行されたかの追跡や、結果の検証、データの再現実成が困難になる。
HFlow の概要と機能
HFlow は、オーケストレーション、保存、バージョン管理、そしてキュレーション(品質管理)を一元的に担当するプラットフォームです。
- 柔軟な拡張性
- チームは内蔵チェックに加え、新しいトランスフォーム、チェック、ラベル、および拡張機能を容易に記述できます。
- 既存の処理コードを接続することも可能です。
- トレーサビリティと可視化
- 各処理されたエピソードにその源流(プロヴェナンス)を付与します。
- パイプラインをグラフとして可視化し、カタログ上にメタデータと品質証拠を記録・検索可能です。
- 出力の生成経路を追跡したり、各段階を監視したり、基となる録画をロードせずにコーパスを検証できます。
境界規格:MCAP
- MCAP は HFlow v1 の入力・出力の境界規格です。
- 同期されたビデオ、状態、アクション、その他時系列ストリームを効率的に保存・提供します。
- データの源(人間装着カメラ、遠隔操作ロボット、自律ポリシー等)によって形式が変わるわけではなく、どのソースからも MCAP エピソードとして表現すればパイプラインへ供給できます。
⚠️ 現状:コアのリファインサイクル機能はエンドツーエンド動作する pre-v1 段階です。HFlow をローカルで試用可能です。詳細は実装済み項目およびオープンされたイシューを参照してください。
オープンロボティクスコミュニティへの協力
- リポジトリにスターをつけて、ネットワークを通じて共有し、コントリビューションを行ってください。
- ロボットハードウェアの所有は不要です。誰でもロボティクスの未来の構築に参加できます。
HFlow の境界(スコープ)
| カテゴリ | 説明 |
|---|---|
| 入力 | サポートされた標準 MCAP エピソード、および コマンドでの LeRobot Dataset v3 リポジトリからの読み込み。 |
| 処理 | ユーザーによる Python トランスフォーム、チェック、ラベル、および拡張機能。 |
| 実行 | 開発段階はインプロセス(単一プロセス)。スケジュールされたランには生成された Airflow 3 DAG を使用。 |
| 永続的出力 | キャンオニカルな MCAP エピソード、プロヴェナンス、アーティファクト、および Parquet カタログ。 |
| キュレーション | バージョン固定化されたマニフェストを DuckDB SQL コードで書き込む。 |
得られる成果:4 つのリライフサイクル段階
人間とロボットのデータは以下のフローを通過します:
収集 (collection) --> 取り込み (ingestion) ---------------> キュレーション (curation) ------> 配信 (delivery)
(ランディングバケット) (トランスフォーム -> QC ゲート -> Airflow DAG) (エピソードカタログに対する SQL) (キュレテッドな MCAP + マニフェスト;学習用への変換)
主要な利点
- あなたの処理コードはあなたのものであります
- トランスフォーム、品質チェック、ラベル、拡張機能は独自の環境におけるプレーンな Python 関数です。
- プロプライエタリなフレームワークに書き直す必要はなく、既存のコードも小さなアダプターで接続されます。
- エピソードは MCAP 形式です
- ROS 2 がネイティブに記録するコンテナであり、Foxglove や Rerun で直接開けます。
- Dyna の論文で説明されているチューニング(バンド内 H.264 ゴップレンガの最適化)に対応します。これによりトレーニングサンプルのコスト削減が図れます。
- 処理されたエピソードはその源流を持ちます
- ファイル自体にスキーマ、パイプライン、生成ツールのバージョン、およびソース URI を記録します。
- カタログレコードは測定値と結果をステップのバージョンに接続し、悪い結果の起源を追跡しやすくします。
- パイプラインはグラフとして可視化されます
- HFlow は Airflow DAG をレンダリングするため、各段階の接続関係やタスクの状態、ログ、再試行状況を監視可能です。
- 品質チェックは再利用可能な証拠を生み出します
- アクセサは既存コードから入力(numpy 配列など)を抽出し、結果をハードコーディングされた判定ではなく、検索可能な測定値として出力します。
- データセットごとに異なる閾値を設定しても、メディアの再処理は不要です。
- 録画をロードせずにコーパスを検査できます
- メタデータ、品質測定値、タグ、バージョンスタンプ、アーティファクト所在地は Parquet カタログ内に存在します。
- DuckDB は基となる MCAP ファイルを開かずに、コーパス全体に関する質問に答えることができます。
ホスティングとスケーラビリティ
オープンソースデプロイメントは、所有しやすく設計されています。
- デプロイオプション
- 付属の Docker Compose ランタイムで単一テナントワークスペースを動作させます。
- 生成された DAG バンドルを既存の Airflow 3 環境にデプロイします。
- 制御平面とデータプレーンの分離
- ユーザーアカウント、RBAC、マルチテナント制御平面は含まれていません。
- データプレーン(処理部分)は制御平面と分離され、複数の孤立したワークスペース(チームごとや顧客ごと)としてスケーリングできます。
- ドキュメント
- データプレーンコントラクトの詳細は
を参照してください。docs/HOSTING.md
- データプレーンコントラクトの詳細は
コミュニティとホスティングに関する関心
- ホスト版プラットフォームのウェイトリスト:ワークフローについてのお問い合わせは可能です。
- コミュニティ Discord:ご質問、フィードバック、議論のために参加してください。
- 行動規範:コミュニティ標準を確認し、懸念を私的に報告してください。
- Issue 管理:再現可能なバグとスコープされた機能リクエストについては GitHub Issues を使用します。
インストールと試行
uv を使用して PyPI から SDK をインストールします。
注意: Hebbian Robotics プロジェクトはバージョン
から開始されます。以前0.2.0で存在したリリースは別の無関係なプロジェクトのものです。0.1.x
クイックスタート
リポジトリをクローンし、ローカルで実行します:
git clone https://github.com/Hebbian-Robotics/hflow.git cd hflow uv sync --locked uv run python examples/quickstart.py
- このコマンドは入力ファイルを指定しない場合、カメラと状態ストリームを持つ小さなマルチモーダルエピソードをシミュレートし、インプロセスでパイプラインを実行します。
- 自前の録画を使用するには:
uv run python examples/quickstart.py path/to/episode.mcap
CLI ヘルプを表示するには:
uv run hflow --help
スケジュール動作や詳細な手順については、ランタイムガイドと
CONTRIBUTING.md を参照してください。
LeRobot データセットからのインポート
LeRobot Dataset v3 エピソードを標準 MCAP 境界にインポートします:
uv run hflow import lerobot \ --repo lerobot/pusht --revision main \ --camera observation.image --episode-index 0 \ --output-dir ./data/lerobot_pusht
インポーターは
main を不変なソースコミットに解決し、それをエピソードのプロヴェナンスとして記録します。詳細は LeRobot インポートガイドを参照してください。
外観(使い方)
6 行のコードで始められます。以下の例ではロボット遠隔操作エピソードを使用していますが、同様のステップインターフェースはエゴセントリックビデオやその他のフィジカル AI 録画にも適用されます。
import hflow from hflow.checks import camera_frame_stats from your_existing_qc import check_joint_smoothness # 既存のチェックを使用 app = hflow.App("kitchen-pipeline") # データルート:$HFLOW_DATA_ROOT, hflow.toml, ./data @app.check(version="1") def joint_smoothness(ep: hflow.Episode) -> hflow.CheckResult: joints = ep.channel("/joint_states").to_numpy() # 私たちの行:抽出 result = check_joint_smoothness(joints, rate_hz=100) # あなたの行:変更なし return hflow.CheckResult(measurements=result) # 私たちの行:記録 @app.check(version="1", critical=True) def camera_blackout(ep: hflow.Episode) -> hflow.CheckResult: camera_topic = next(topic for topic in ep.cameras if "wrist_cam" in topic) evidence = camera_frame_stats(ep, cameras=[camera_topic]) black_frame_percent = evidence.measurements[f"{camera_topic}/black_frame_pct"] assert isinstance(black_frame_percent, float) return hflow.CheckResult( measurements={"black_pct": black_frame_percent}, verdict=black_frame_percent < 50.0, # パーセント;あなたの閾値 ) if __name__ == "__main__": app.test("episode_0001.mcap") # 全体のパイプライン、インプロセス、インフラなし # または app.run() を呼び出して Compose ランタイムを起動し、hflow ingest を使用。
- 各チェックや拡張機能はバージョン宣言を持ちます。HFlow はその値をそのまま保存するため、リファクタリング時に動作を保ち、結果比較が必要な場合にバージョンアップ(bump)を行います。
- キュレーションはその後に行われ、
またはコマンドラインのhflow.curate(data_root / "catalog", sql, output="manifest.parquet")
で実行します。hflow curate "<sql>"
カタログへの DuckDB ブラウザはいつでもアクセス可能です:
SELECT episode_id, uri FROM episodes WHERE task = 'fold_napkin' AND status = 'ok' AND black_pct < 1.0 -- パーセント;ユーザー所有の閾値 AND pipeline_version = 'a41c9f27b3d8' -- リプロセッシング世代の一つをピン止め
デザインの原則
- アーキテクチャを民主化し、最適化は後回しにする
- 小規模で有用なワークフローと標準インターフェースを維持します。
- スケーリングメカニズムは実装済み、簡素化済み、後回し、または範囲外であることを正直にラベル付けします。
- 証拠ではなく判定
- チェックはカバレッジ付きで測定値を記録し、パス/失敗のポリシーは消費者がキュレーション時に所有します。
- 品質タグはエピソードをルーティングしますが、データを決して削除しません。
- すべての境界で標準形式
- MCAP エピソード、Parquet カタログ、Airflow DAG を採用します。コードは必要最小限(形式によるブリッジや明確でない陥穽の場合)のみが存在します。
- あなたのコードはあなたのものであります
- 既存のトランスフォームなどをプロプライエタリフレームワーク用に書き直すことなく、小さなアダプターで接続します。
要件
- Python: ≥ 3.11
- ランタイム: Docker(パイプライン用)、または独自 Airflow デプロイメント(Astronomer, MWAA, Cloud Composer, self-managed)。
- 最初の
は約 2 GB のコンテナイメージとタスク venv をダウンロード/ビルドします(一度きり)。hflow up
- 最初の
- ストレージ: ネイティブな
,s3://
, Azure データルートにはオプションのバケットバックエンドが必要です。ローカルパスのみをサポート。gs:// - OS: Linux x86_64/aarch64 対応(WSL2 で Windows サポートあり)。Airflow はネイティブに Windows で動作しないため、WSL2 経由となります。
ドキュメントとリソース
ドキュメントホーム:
- タスクから始め、その後チュートリアル、ハウツーガイド、参照、説明へ進む。
- よくある質問(FAQ):形式、インフラ、スケーラビリティ、プロジェクトスコープ、リリースステータス。
- HFlow とロボティクスデータスタックの適合性(MCAP, Airflow, Foxglove, Rerun, DuckDB など)。
- 動作可能な例:正確なコマンド、前提条件、期待される出力。
- アーキテクチャと実装ステータスマトリックス。
- OpenAI vision パスとの連携方法。
リンクと参考
- Dyna Robotics: Million-hour scale で Training Dyna-2 を行うこと。
- MCAP 仕様 と Python ライブラリ (Foxglove)。
- Foxglove CompressedVideo スキーマ:MCAP 内のバンド内 H.264/H.265/VP9/AV1 ビデオ。
- Apache Airflow。
- DuckDB。
- Pareto: Hebbian Robotics のロボティクスデータキュレーションプラットフォーム。
コントリビューションとライセンス
すべてのコントリビューターに感謝します!HFlow を素晴らしいものにするために、コミュニティに参加するには
CONTRIBUTING.md を参照してください。
- ライセンス: Apache-2.0
- ライセンスはコードをカバーし、名称はカバーしません:商標ポリシーを参照してください。