源码构建需要 CMake ≥ 3.22、C++17 编译器(GCC 11+/Clang 14+)以及 ZeroMQ 和 protobuf;若想省掉这些 apt 依赖,可加 -DVLA_BUILD_SERVER=OFF -DVLA_SPM=OFF,但 Octo 需改用 --tokens;用 -hf 首次运行会从 Hugging Face 下载并缓存权重到 $VLA_CACHE(默认 ~/.cache/vla);vla-server 默认绑定 tcp://*:5555,且官方提示桌面 CPU 上动作队列会卡顿,建议在 GPU 主机上运行服务端。
vla.cpp
VinRoboticsApache-2.0活跃维护基于 llama.cpp 和 GGUF 的 VLA 模型统一推理运行时,用 C++ 实现,支持量化部署,让机器人视觉-语言-动作模型能在本地高效跑起来。
A unified inference runtime for VLA models.
sudo apt-get install -y libzmq3-dev cppzmq-dev libprotobuf-dev protobuf-compiler
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j$(nproc)支持 CPU(x86-64/ARM)、Apple Silicon(Metal)、NVIDIA(含 Jetson,CUDA)、AMD(ROCm)、Intel(SYCL/OpenVINO)、Qualcomm(Hexagon)。README 未给出具体显存要求,各设备延迟与内存见 docs/benchmark。
基于 llama.cpp 的 C++ 推理引擎,把多种 VLA 机器人策略统一到一个无需 Python 的运行时里
基于 llama.cpp 和 GGUF 的 VLA 模型统一推理运行时,用 C++ 实现,支持量化部署,让机器人视觉-语言-动作模型能在本地高效跑起来。
核心能力
- 用单个自包含 GGUF 打包每个 VLA 策略,推理时不需要 Python 和 PyTorch
- 基于 llama.cpp 构建,CMake 会自动拉取并锁定其版本
- 同一套二进制覆盖 CPU、Apple Silicon、NVIDIA、AMD、Intel、Qualcomm 后端
- 支持 SmolVLA、π0、π0.5、GR00T N1.x、OpenVLA-OFT 等十余种策略
- 提供 vla-cli、vla-server、vla-bench 三个可执行程序,并支持 -hf 直接拉取权重
容易踩的坑
- v0.4.0最新正式版2026-09-30 · 2026-09-30 13:22 UTC
vla.cpp now runs 13 VLA architectures, adds Intel (OpenVINO) and Snapdragon (Hexagon, Adreno) backends, and ships portable binaries for Linux x86-64, Linux aarch64 and macOS.
Highlights
- New models: Octo-Small and TurboVLA.
- OpenVINO backend for Intel CPUs, iGPUs and NPUs, 3-10x faster than the CPU backend on an Arc iGPU. See docs/backend/ov.md.
- Snapdragon X on Windows on Arm: Hexagon NPU and Adreno GPU, with CPU fallback. See docs/backend/hexagon-windows.md.
- Prebuilt binaries for CPU, CUDA 12.8/13.4 (incl. Jetson Orin, Thor, DGX Spark) and Apple Metal, plus a Python wheel. See docs/PREBUILT.md.
- 6-18% faster inference on CUDA, with identical outputs.
- More accurate: π0, SmolVLA, GR00T N1.7, VLA-JEPA, Evo-1 and BitVLA now match their reference implementations.
- Tokenizer in the GGUF:
vla-cli --textruns without Python for Octo, π0, π0.5 and OpenVLA-OFT. - More stable: the servers no longer crash on bad requests, and the C API is thread-safe.
Breaking changes
- The x86 CUDA 12.8 tarball is renamed
linux-x86_64-cuda-12.8; the macOS tarball shipsvla-cliandvla-benchonly. - The CMake option
VLA_OCTOis renamedVLA_SPM(the old name still works). - Command-line flags now override
--config, and a missing or invalid config file is an error.
Full details in CHANGELOG.md.
What's Changed
- Support backend OpenVINO by @khanhnd61-vr in https://github.com/VinRobotics/vla.cpp/pull/23
- Octo: ggml inference engine (diffusion + L1/proprio), LIBERO client, and open-loop evaluation by @DuyBaoDOCer in https://github.com/VinRobotics/vla.cpp/pull/28
- Fix GR00T N1.7 relative-action decoding and the ALOHA right-arm client by @hungho77 in https://github.com/VinRobotics/vla.cpp/pull/25
- Feature/add turbovla support by @Zeustakeshi in https://github.com/VinRobotics/vla.cpp/pull/29
- Add Snapdragon X support: Hexagon NPU and Adreno OpenCL with CPU fallback by @khanhnd61-vr in https://github.com/VinRobotics/vla.cpp/pull/30
- vla.cpp performance review by @anindex in https://github.com/VinRobotics/vla.cpp/pull/32
New Contributors
- @DuyBaoDOCer made their first contribution in https://github.com/VinRobotics/vla.cpp/pull/28
- @hungho77 made their first contribution in https://github.com/VinRobotics/vla.cpp/pull/25
- @Zeustakeshi made their first contribution in https://github.com/VinRobotics/vla.cpp/pull/29
Full Changelog: https://github.com/VinRobotics/vla.cpp/compare/v0.3.0...v0.4.0
- v0.3.02026-08-24 · 2026-08-24 04:04 UTC
查看更新说明
- add Docker Compose evaluation stack (client image + orchestration + docs) (#15)
- add end-to-end LIBERO eval on WSL2 (#17)
- add Apple Silicon (Metal) benchmarks and fix the macOS Metal doc (#20)
- refactor and get same performance as Pytorch grap capture by using bf16 format (#21)
- v0.2.02026-08-13 · 2026-08-13 02:45 UTC
查看更新说明
vla.cpp v0.2.0
Eleven VLA policies from one self-contained GGUF, now on Intel GPUs as well as CPU, CUDA and Metal.
- SYCL backend for Intel Arc / Flex / Data Center Max / Xe iGPU;
VLA_DEVICEpicks the ordinal on CUDA and SYCL alike. - Stable C ABI (
include/vla.h,libvla) with Python bindings. - Four new architectures: π0.5, VLA-Adapter, OpenVLA-OFT, VLA-JEPA.
- Faster: the compute graph is cached across
predictcalls in every architecture; Evo-1 encodes all camera views in one pass; BitVLA's ternary GEMM is bank-conflict-free. Opt-in BF16 activations (VLA_*_BF16_ACT) and fused attention (VLA_*_FA) on top. vla-bench,-hf user/repocheckpoint fetch,vla-cli --text.- Prebuilt binaries for Linux x86-64 (CPU/CUDA), Linux aarch64 (CPU), macOS Metal, plus a GHCR image.
llama.cpp pinned at b10331. GR00T N1.5 and N1.6 shift by up to 4.6e-4 from an upstream ggml kernel change; the other nine architectures are bit-identical. Full detail in CHANGELOG.md.
- SYCL backend for Intel Arc / Flex / Data Center Max / Xe iGPU;
- v0.1.12026-07-06 · 2026-07-06 11:09 UTC
查看更新说明
First tagged release. C++ inference for 10 VLA policies, validated on the LIBERO object suite (10 tasks).
LIBERO object sweep (RTX 3090, CUDA 12.8)
Model SR client/call (ms) bitvla 100% 145 evo1 90% 238 gr00t_n1_5 100% 109 gr00t_n1_6 80% 99 gr00t_n1_7 100% 102 openvla_oft 100% 256 pi0 80% 264 pi05 100% 167 smolvla 100% 86 vla_adapter 100% 108 7/10 policies at 100% success. Full report: #14.
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
A C++ inference engine for Vision-Language-Action (VLA) models, built on llama.cpp.
It runs the open VLA policies under one runtime, each packaged as a single self-contained GGUF that needs no Python or
PyTorch at inference time. The binaries drive robots on CPU, Apple Silicon,
NVIDIA (including Jetson), AMD, Intel and Qualcomm hardware.

Install
Download a prebuilt release, or build from source for any other platform or backend.
Prebuilt binaries
Each release ships tarballs for Linux x86-64 and aarch64 (CPU and CUDA) and macOS arm64 (Metal):
TAG=<release tag>
curl -LO https://github.com/VinRobotics/vla.cpp/releases/download/$TAG/vla.cpp-$TAG-linux-x86_64-cpu.tar.gz
tar -xzf vla.cpp-$TAG-linux-x86_64-cpu.tar.gz
Each platform's requirements are in docs/PREBUILT.md.
Build from source
The CPU build needs CMake ≥ 3.22, a C++17 compiler (GCC 11+ or Clang 14+),
ZeroMQ and protobuf. CMake fetches and pins llama.cpp itself:
sudo apt-get install -y libzmq3-dev cppzmq-dev libprotobuf-dev protobuf-compiler
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j$(nproc)
-DVLA_BUILD_SERVER=OFF -DVLA_SPM=OFF drops the apt packages and builds only
vla-cli, vla-bench and libvla; Octo then takes --tokens instead of --text.
For a GPU or NPU, follow the backend's page in docs/backend/: CUDA, ROCm, SYCL, OpenVINO, Metal, Hexagon. For containers, see docs/DOCKER.md.
Quickstart
Once the binaries are built, run one CPU prediction without a server or simulator:
pip install -U "huggingface_hub[cli]" transformers
# -hf fetches and caches the checkpoint (under $VLA_CACHE, default ~/.cache/vla)
./build/vla-cli -hf vrfai/smolvla-libero-gguf \
--image assets/front.jpg --text "pick up the black bowl" --pretty
# or point at a file you already have
./build/vla-cli --ckpt models/smolvla/smolvla-libero.gguf \
--image assets/front.jpg --text "pick up the black bowl" --pretty
With a prebuilt tarball, run vla-cli from the extracted
vla.cpp-<tag>-<platform>/ directory instead of ./build/.
--pretty prints one action row per line and --state sets proprioception.
Prompt tokenization, -hf tags, vla-server, runtime flags and environment
variables are in docs/USAGE.md.
Support matrix
Models (rows) against platforms (columns). Per-device latency and memory are in docs/benchmark/. Use ggml-compiler and follow the instruction to add a new model.
| Model | CPU (x86-64 / ARM) | CUDA (NVIDIA) | ROCm (AMD) | SYCL (Intel) | Metal (Apple) | OpenVINO (Intel) | Hexagon (Qualcomm) |
|---|---|---|---|---|---|---|---|
| SmolVLA | Y | Y | Y | Y | Y | Y | Y |
| π0 | Y | Y | Y | Y | Y | Y | Y |
| π0.5 | Y | Y | Y | Y | Y | Y | Y |
| GR00T N1.5 | Y | Y | Y | Y | Y | Y | Y |
| GR00T N1.6 | Y | Y | Y | Y | Y | Y | Y |
| GR00T N1.7 | Y | Y | Y | Y | Y | Y | Y |
| BitVLA | Y | Y | - | - | - | - | - |
| Evo-1 | Y | Y | Y | Y | Y | Y | Y |
| VLA-Adapter | Y | Y | Y | Y | Y | Y | Y |
| OpenVLA-OFT | Y | Y | Y | Y | Y | Y | Y |
| VLA-JEPA | Y | Y | Y | Y | Y | Y | Y |
| Octo-Small | Y | Y | Y | Y | Y | - | Y |
| TurboVLA | Y | Y | Y | Y | Y | Y | Y |
| ACT | Y | Y | Y | ~ | Y | ~ | Y |
Legend: Y = supported (released and benchmarked), ~ = in progress, - = planned.
Rollout on a real robot
The LeRobot fork adds a
lerobot-vla-cpp client that drives an SO-101 arm against vla-server. It does
the preprocessing for SmolVLA, π0, π0.5 and GR00T N1.5/1.6/1.7. Serve the policy
on a GPU host; on a desktop CPU the action queue stalls:
./build/vla-server smolvla-so101.gguf # binds tcp://*:5555
Installing, wiring and running the client are in the fork's rollout guide.
Companion Repos
| Repo | Content |
|---|---|
| llama.cpp | ggml and its backends; CMake fetches it at a pinned tag (b11223) |
| LeRobot fork | lerobot-vla-cpp, the client that runs a real robot against vla-server |
| ggml-compiler | Generates ggml C++ from a policy's PyTorch implementation and verifies it, for porting a new model to vla.cpp |
Documentation
| Doc | Content |
|---|---|
| docs/PREBUILT.md | Release tarballs: layout, glibc and CUDA runtime requirements, macOS and Windows notes |
| docs/USAGE.md | vla-cli, vla-server, vla-bench: prompt tokenization, -hf tags, runtime flags, environment variables |
| docs/EVAL.md | Installing LIBERO and SimplerEnv, running the eval clients against vla-server |
| docs/MODELS.md | Converting safetensors checkpoints to GGUF, quantizing to Q8_0/Q4_0 |
| docs/QUANTIZATION.md | FoldQuant W8A8 / W4A4: the GGUF contract, the integer arithmetic, converting a FoldQuantVLA quantized model |
| docs/DOCKER.md | Building and running the eval in containers |
| docs/ARCHITECTURE.md | Engine design: layers, the prediction path, backends, adding an architecture |
| docs/backend/ | Per-backend build and run notes: CUDA, ROCm, SYCL, OpenVINO, Metal, Hexagon, Hexagon on Windows, WSL2 |
| docs/benchmark/ | Per-device latency and memory for every model, and the fastest flags per device |
| docs/KNOWN_ISSUES.md | Known issues and their resolutions |
| docs/ADOPTION.md | C ABI, Python bindings, release packaging, and what is left |
| docs/UPSTREAMING.md | The ggml-openvino fixes to send upstream to llama.cpp |
| CHANGELOG.md | Per-release changes, with the fastest configuration and success rate per model |
| CONTRIBUTING.md | Proving a change is numerically neutral, adding an architecture |
| bindings/python/ | Python bindings |
Citation
@misc{nguyen2026vlacpp,
title = {{vla.cpp}: A Unified Inference Runtime for Vision-Language-Action Models},
author = {Khanh D. Nguyen and Hung T. Ho and Chinh T. Nguyen and
Thanh Q. Duong and Linh D. Le and Duy M. H. Nguyen and
Vien A. Ngo and An T. Le},
year = {2026},
eprint = {2606.08094},
archivePrefix = {arXiv},
primaryClass = {cs.RO},
doi = {10.48550/arXiv.2606.08094},
url = {https://arxiv.org/abs/2606.08094}
}
License
Licensed under the Apache License, Version 2.0.
Acknowledgements
Supported VLA models:
- ACT - Zhao et al.
- SmolVLA - Hugging Face LeRobot team.
- π0,π0.5 - Physical Intelligence.
- BitVLA - Hongyu Wang et al.
- Evo-1 - Tao Lin et al.
- VLA-Adapter - Yihao Wang et al.
- OpenVLA-OFT - Moo Jin Kim et al.
- GR00T N1.x - NVIDIA Isaac.
- VLA-JEPA - Jingwen Sun et al.
- Octo - Octo Model Team, UC Berkeley RAIL.
- TurboVLA - Hengyi Xie et al.
Built on:
llama.cpp- LLM inference engine in C/C++.- LIBERO - benchmark suite for the success-rate sweeps.
- SimplerEnv - the second simulator in the eval scaffold.
- RoboCasa - RoboCasa365 kitchen simulator for the SmolVLA and GR00T N1.6 evals.