Skip to content

Embodied.cpp: A Portable Inference Runtime of Embodied AI Models on Heterogeneous Robots

Embodied.cpp is a portable C++ inference runtime for embodied AI models (VLAs and World-Action Models) that runs on heterogeneous edge hardware (CPU / CUDA GPU / NPU) from GGUF weights, in the spirit of llama.cpp but specialized for the runtime contract embodied deployment actually needs: multi-rate execution inside closed-loop control, latency-first batch-1 inference, and I/O beyond fixed language tokens. The paper argues existing request-response inference servers (built for LLM serving) don’t fit this contract, and proposes a five-layer architecture — input adapters, sequence builders, backbone execution, head plugins, deployment adapters — factored from an analysis of representative VLAs and WAMs. Evaluated on two VLAs (HY-VLA, π0.5) and a preliminary WAM benchmark using a Causal World Modeling for Robot Control (LingBot-VA) Transformer block: 100.0% and 91.0% closed-loop task success and a WAM block-memory reduction from 312.2 MiB to 88.1 MiB. The release is the first VLA/WAM equivalent to llama.cpp on file, filling a serving-side gap between “trained VLA” and “policy running on a robot” that the recent DimOS — The Agentive Operating System for Physical Space (v0.0.13) deployment-runtime entry called out.

  • Existing inference runtimes (vLLM / SGLang / llama.cpp) target request-response LLM serving and therefore do not satisfy the runtime contract of embodied deployment: multi-rate execution inside closed-loop control, latency-first batch-1 inference on heterogeneous hardware, and extensible embodied interfaces beyond fixed token I/O [Abstract].
  • Representative VLA models and World-Action Models share a common execution path that decomposes into five layers — input adapters, sequence builders, backbone execution, head plugins, and deployment adapters — which is what Embodied.cpp materializes as the runtime contract [Abstract].
  • Closed-loop deployment on two VLA models achieves 100.0% task success rate for HY-VLA and 91.0% for π0.5 [Abstract].
  • On a preliminary WAM benchmark using a LingBot-VA Transformer block, the runtime reduces block memory from 312.2 MiB to 88.1 MiB [Abstract] (~3.5× reduction).
  • One backend abstraction covers CPU, CUDA GPU, and NPU deployment paths; the released build supports pi0.5, HY-VLA, and LingBot-VA today, with a documented roadmap for OpenVLA, Octo, Hi Robot, GeneralVLA, GR00T N1, Fast-in-Slow, UniPi, WorldVLA, DreamZero, FastWAM, Cosmos Policy, UWM, and Being-H0.7 [GitHub README §1.1].
  • Serving surface is a ZeroMQ/Protobuf boundary rather than an HTTP/gRPC serving stack — one process per model (vla-pi05-server, vla-hy-vla-server, wam-lingbot-server), each fed GGUF weights [GitHub README §2.5].

The paper’s central move is treating embodied deployment as a runtime-contract problem rather than a model-serving problem: rather than adapting a request-response LLM server (batch-N throughput-first, HTTP boundary, fixed text-token I/O) to VLA/WAM inference, it defines the contract from the robot side — closed-loop control ticks at a fixed rate, batch is always 1 at inference time, latency dominates throughput, and inputs/outputs include images, proprioception, action chunks, and (for WAMs) latent video streams. The authors survey the open-source VLA/WAM zoo (AR-token VLAs, VLM-backboned VLAs, hierarchical VLAs, asynchronous VLAs, predict-then-act WAMs, unified AR-modeling WAMs, shared-backbone WAMs, latent-space WAMs) and extract a shared five-layer decomposition: input adapters normalize sensor / simulator payloads, sequence builders assemble the model’s tokenized/vectorized context, backbone execution runs the shared transformer (mostly reusing llama.cpp / GGML kernels), head plugins compute the model-specific action or world-frame outputs, and deployment adapters translate outputs back to the simulator or robot. Backbone execution runs on a single backend abstraction that spans CPU (verified on Apple Silicon for π0.5), CUDA GPU (with custom kernels in kernels/), and NPU. Weights arrive as GGUF, produced either from the released HuggingFace collection or from the paper’s own conversion scripts (convert_pi05_to_gguf.py, convert_hy_vla_to_gguf.py, convert_lingbot_va_to_gguf.py), with quantization helpers for HY-VLA and LingBot-VA. Servers communicate with client-side evaluation harnesses (LIBERO, RoboTwin, real robots) via ZeroMQ + Protobuf, which lets the same policy binary drive a native C++ simulator or a Python-side robot stack without model-side changes. Evaluation is closed-loop task success on VLAs and block-level memory footprint on WAMs; the preliminary WAM benchmark is a single Transformer block from LingBot-VA rather than the full unified world+action model, i.e. a memory-side sanity check rather than a policy-side result.

  • VLA closed-loop deployment: HY-VLA reaches 100.0% task success and π0.5 reaches 91.0% task success on the reported simulator tasks (LIBERO for π0.5, RoboTwin for HY-VLA) [Abstract]. Success rates are relative to the same VLA architectures’ baseline PyTorch implementations, i.e. the runtime preserves policy quality — it is not a distillation or compression result.
  • WAM memory footprint: The LingBot-VA Transformer block drops from 312.2 MiB to 88.1 MiB, ~3.5× reduction [Abstract]. This is a per-block figure on a preliminary benchmark, not full-model end-to-end memory.
  • Deployment surface: single-binary servers per model, GGUF weight artifacts on HuggingFace, and simulator drivers for LIBERO (5 suites × 10–90 tasks) and RoboTwin (dual-arm), plus a real-robot path via ZeroMQ [README §2.6, §3].
  • Portability: the release documents CPU-only builds on Linux and macOS Apple Silicon, and CUDA GPU builds; NPU support is claimed in the paper (backend abstraction) but not detailed in the README at filing time.

Embodied.cpp is the first filed wiki artifact of a llama.cpp-shaped inference runtime for VLAs and WAMs — a serving-side stack that pairs GGUF weights, a single backend abstraction across CPU/CUDA/NPU, and multi-rate closed-loop execution. That directly fills the gap the recently-filed DimOS — The Agentive Operating System for Physical Space (v0.0.13) entry described between “trained VLA” and “policy running on a robot”: DimOS owns the message-passing plane (typed streams, transports, module lifecycle) while Embodied.cpp owns the model plane (kernels, weights, backbone execution, quantization) — the pair is a plausible open-source stack for the deployment surface that closed offerings (Inside NVIDIA Halos for Robotics: A Full-Stack Functional Safety System for Physical AI Halos, NVIDIA Isaac) target. It also lands a concrete data point for the LLM Inference Efficiency concept in a new regime — batch-1 latency-first serving with mixed image / action / language / world-latent I/O — where the LLM-serving optimizations logged so far (SpecBundle, TileRT, MegaScale-MoE) don’t directly translate. And the runtime’s willingness to treat both VLAs (per VLA Models) and world-action models (per World Foundation Models) as a single execution class is a small piece of evidence for the recent Reuss/µ₀/Cosmos Policy line that world-model peers and action policies should share deployment infrastructure — separate models, one runtime contract.