Realtime-VLA
Abstract
- π0レベルのマルチビューVLAを単一コンシューマGPU (RTX 4090) で30Hz フレームレート、最大480Hzの軌道周波数で実行する方法を示す
- モデル推論のオーバーヘッドを排除する一連の戦略を導入
- 実世界実験で落下するペンの把持タスクにおいてπ0ポリシーが100%の成功率を達成
- Full Streaming Inferenceフレームワークを提案
1 Introduction
- VLAモデル (数十億パラメータ) は汎化性能に優れるがレイテンシが課題
- 1 forward passに数百msかかるため、動的タスクへの対応が困難
- 33ms (≈1/30s) 以下がリアルタイム動作の転換点:30FPS映像の全フレームを処理可能
- 最適化後、RTX 4090で2ビュー入力に対し27.3msのレイテンシを達成
推論速度比較 (RTX 4090, 空プロンプト, chunk_length=63)
| 実装 | 1 view | 2 views | 3 views |
|---|
| naive torch | 105.0ms | 106.5ms | 113.9ms |
| openpi/jax | 43.8ms | 53.7ms | 67.6ms |
| ours | 20.0ms | 27.3ms | 36.8ms |
- 落下ペン把持タスクで100%成功率を実証(30cm落下、反応時間200ms以内、人間と同等)
- Full Streaming Inferenceモード:最大480Hzの制御信号生成が可能
2 Preliminary on π0-level Model
- VLM backbone: PaliGemma (3Bパラメータ) で初期化
- Vision Encoder: SigLIP (400Mパラメータ)
- LLM: Gemma (2.6Bパラメータ)
- Action Expert (AE): VLMとMoEアーキテクチャで結合
- Gemmaから縮小 (幅・MLP次元を削減)、300Mパラメータ
- Flow Matching によるaction chunkingの予測
- VLMの入力: マルチビュー画像 + タスクプロンプト
- AEの入力: 状態 + アクションノイズ
3 Eliminating the Overheads
3.1 Removing CPU Overhead
- Python → CUDAカーネル起動のオーバーヘッドが深刻(π0モデルで1000以上のカーネル起動)
- CUDA Graph を使用してカーネルストリームを記録・リプレイ
- リプレイ時はGPUとドライバのみでカーネル起動(Python実行オーバーヘッド排除)
- VLAではtransformerブロックに動的分岐がないため適用可能
- 約2倍の高速化を達成
3.2 Simplifying the Graph
- RMSNorm affine吸収: RMS normのアフィンパラメータを後続の線形層に融合(線形性の結合則)
- Action Time Encoder折り畳み: 2つの連続カーネルを1つに統合。時間ステップは10種のみなので結果をテーブル化
- QKV融合: Q, K, Vの射影行列を1つの大行列に統合。RoPEもmatmulに融合し、重みを事前計算
- これらの変換で7-8msの推論時間削減
3.3 Avoiding Other Overheads
- 画像リサイズ: カメラISPの出力解像度を224×224に近い値(240×320等)に設定。手書きリサイズで60us以下
- ピンドメモリ使用、静的CPUバッファ、ゼロコピーカメラフレーム処理
4 In-Depth Optimization of the Kernels
- 簡略化後の計算グラフは24のGEMM的演算とスカラー演算で構成
4.1 Tuning Tile Parameters of GEMM
- cuBLAS (torch.matmul) のデフォルト設定が最適でないケースあり
- Triton実装でタイリング戦略を手動チューニング → 約1.5ms改善
- LLMのtransformerは17回(18ではなく)のattention/FFN実行(最終層のKVキャッシュのみAEに渡すため)→ 約0.7ms節約
4.2 Fusing Gated Linear Layers
- FFNのGated up-projection: FC1(x,w1) · GELU(FC2(x,w2))
- 2つのmatmulを並列実行し、ロード/ストア操作を結合
- 入力タイル1つのロード後に2つの重みタイルを処理、結合結果のみ書き戻し
- 1.7msの改善
4.3 Partial Split-k
- 512×1152×1152のGEMM: 64×64タイルで144ブロック → RTX 4090の128SMに不均等分配
- 解決策: 512×1152×1024 (64×64タイル、均等分配) + 512×1152×128 (32×32ブロック、split-2) に分割
- 1カーネルで記述可能(独立な計算)、改善は0.1ms未満だが興味深い事例
4.4 Fusing the Scalar Operations
- bias、残差接続、活性化関数をGEMMに統合
- RMS Normは先にトークンレベル統計を計算し、次のGEMMで累積後に対応ファクタで除算
- 推定約4msの改善
カーネル詳細 (2 views, RTX 4090)
| コンポーネント | Roofline | cuBLAS | Triton | 実測 |
|---|
| Vision Encoder | 2.485ms | 4.334ms | 3.957ms | 4.059ms |
| LLM | 10.727ms | 12.875ms | 12.732ms | 12.503ms |
| Action Expert | 6.486ms | 10.808ms | 9.831ms | 11.001ms |
| 合計 | 19.698ms | 28.017ms | 26.520ms | 27.299ms |
5 Establishing Lower Bound
5.1 Roofline of the GEMMs
- BF16 GEMM (N×K×M) の下限: t_roofline = max(2KM / T_bandwidth, NKM / T_compute)
- RTX 4090: メモリ帯域幅 1.01 TB/s、BF16 MAC/s 91.4T (ブースト周波数2.79GHz考慮)
- Roofline下限:
| 1 view | 2 views | 3 views |
|---|
| 12.8ms | 19.7ms | 26.7ms |
5.2 Synchronization Overhead
- 1378回のmatmulに対する同期オーバーヘッドを測定
| 方法 | 時間 | オーバーヘッド |
|---|
| Pytorch (逐次起動) | 13.81ms | +12.92ms |
| CUDA Graph | 2.61ms | +1.72ms |
| Software Barrier | 1.75ms | +0.86ms |
| Fused (同期なし) | 0.89ms | +0ms |
- Software Barrier: ブロック数=SM数のとき、グローバルメモリでバリア実装可能
- 同期込み下限:
| 1 view | 2 views | 3 views |
|---|
| 13.7ms | 20.6ms | 27.6ms |
6 Full Streaming Inference
6.1 Overlapped Streaming Inference
- AEカーネル (IO律速) とVLMカーネル (計算律速) を並行実行でスループット向上
| 構成 | 推論時間 |
|---|
| Sequential VLM + 10 AE | 27.3ms |
| Concurrent VLM + 10 AE | 26.3ms |
| Concurrent VLM + 16 AE | 32.7ms |
- 並行実行なら1秒あたり30 VLM + 480 AE実行が可能
6.2 Re-thinking Action Expert: Up to 480 Hz
- 480Hzの制御周波数実現のために、高周波サンプリング可能なセンサ(力センサ 2kHz+等)をAEに入力
- Flow Matchingを「漸次的」生成に書き換え:各ステップで部分アクションリストを生成(RTC類似)
- 2つのフィードバックループ:
- Quick loop: 高周波信号入力 → AE処理 → 反応軌道生成(最速2ms)
- Slow loop: 画像駆動ループ、VLM処理後AEに反映(最速1/30s)
6.3 Fusing VLMs: Going below 1Hz
- VLMの30Hzフレームエンコーディングにテキスト推論をピギーバック
- 1つの重み行列ロード後にVLM計算とテキストデータ推論を順次実行
- 追加のオートリグレッシブテキストストリーム(30 token/s)で対話・推論が可能
6.4 Summary
- 3つのフィードバックループ:
- Force loop (480Hz): AEによる高周波入出力
- Visual loop (30Hz): VLMによる画像反応
- Textual loop (<1Hz): テキストベースの対話・推論
7 Real World Validation
7.1 Setup and Data Collection
- 垂直配置の2つのグラバーによるペン把持タスク
- 30FPS 720P USBカメラ(遅延約2フレーム)
- ペン落下距離約30cm、200msで把持する600エピソード収集
- 2ビュー入力(現在フレーム + 前フレーム)で速度情報も取得
7.2 Training and Inference
- openpiリポジトリで訓練、空プロンプト、数エポック
- マルチスレッド構成: カメラスレッド → リングバッファ → 推論スレッド → 出力バッファ → 送信スレッド
- GPU暖機後に安定速度で実験開始
7.3 Result
- 10回連続の把持実験で100%成功率
- タスク自体は単純だが、システム視点ではVLA実装の低レイテンシを実証
- 人間の反応(30cm落下距離)と同等の反応速度
- 手動設計カーネル: XLA, TensorRT, CUTLASS, Triton, FlashAttention, FlashDecoding
- スケジューリングベース: TVM(アルゴリズムと実行スケジュールの分離)
- 超最適化: Mirage, Neptune(階層的最適化だが検索時間長い)
9 Future Directions
9.1 Visual-based Latency: Going to 60-120 FPS
- 低精度(8bit)量子化や適応的ビュー選択で高FPS化
- 人間は30FPSと60FPSの差を認識可能、60FPSが次の目標
9.2 Larger Models: Going to 7B and Beyond
- RTX 5090は帯域幅 (1.79TB/s) が大幅向上、AEスケーリングに有利
- 7Bパラメータが次のマイルストーン
9.3 More Fine-grained Feed-back Loop
- AE内の各層レベルでの信号注入による更なる高周波制御の可能性(現状未解決)