EdgeFlow - 水平スケーリング可能なリアルタイム映像分散処理フレームワーク
(github.com/seolgugu)Raspberry Pi のような低性能デバイスで高fpsの映像処理を実現するために作られた、k3s ベースのフレームワークです。
連続する映像フレームを Redis を通じて複数の処理ノードに分散した後、再び集約する方式で水平スケーリングを実現しました。
実際に、Raspberry Pi 4B 1台では 4fps に過ぎなかった YOLOv5 の動作速度が、4台のノードに分散した場合には 16〜17fps まで 線形的に増加することを確認しました。
システムは、フレームを生成する Producer、処理を担当する Consumer、そして結果を集約して表示する Gateway で構成されています。
Gateway はインターフェースを自由に差し替えて複数のシステムへ拡張でき、中間ブローカー(Broker)の役割を担う Redis も別のプロトコルにカスタマイズ可能な構造になっています。
主な特徴
- edgeflow コマンド: 1つのコマンドで k3s クラスターへのイメージのビルド、プッシュ、デプロイまでを一括で処理します。
- 直感的なパイプライン:
link().to()構文により、パイプラインを直感的に構成できます。 - 柔軟な管理: 各ノードごとに独立した依存関係管理が可能で、依存関係の変更がなければリビルドなしで実行中の Pod にコードを即座に反映できます。
- 順序保証: 分散処理時に発生するフレーム順序の乱れを解決するため、Gateway に Jitter Buffer を内蔵しました。
- ローカルテスト: Kubernetes クラスターがなくても、ローカル環境でマルチプロセス方式によりパイプラインを再現できます。
進捗状況
プロトタイプ段階で、実際の Raspberry Pi カメラを Pod 内部へ直接取り込むことに成功しており、現在この機能をフレームワーク上で安定的に再現するための実装を進めています。
現在、複数のシステムを連携させるためにプロジェクトを高度化しています。まだ至らない点も多いですが、分散システムや映像処理パイプラインの設計について、どのようなフィードバックでもいただければ本当に大きな学びになります。読んでいただきありがとうございます。
詳しい内容やクイックチュートリアルは以下のリンクから確認できます。
Github: https://github.com/seolgugu/edgeflow
まだコメントはありません。