Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
9dff2d9
Support AMD CPU and Intel GPU
khanhnd61-vr Aug 5, 2026
ae2882a
fix backend init edge cases
anindex Aug 8, 2026
3105c83
fix multisuite lookup in ci matrix
anindex Aug 8, 2026
3a1b3ff
bump llama.cpp to b10326
anindex Aug 8, 2026
b2ba0ee
relax transformers pin, default docker to sm_89
anindex Aug 8, 2026
cd246c9
harden servers against malformed requests
anindex Aug 8, 2026
c26c313
harden model loading against bad checkpoints
anindex Aug 8, 2026
1ea4c2b
fix evo1 padded state dims, document arch quirks, add unit tests
anindex Aug 8, 2026
14458b0
share the dual vision tower between openvla-oft and vla-adapter
anindex Aug 8, 2026
ba07aa6
share the DiT time embeddings across gr00t and vla-jepa
anindex Aug 8, 2026
b749323
share the CHW image preprocessing across four archs
anindex Aug 8, 2026
87e4aa1
shorten code comments
anindex Aug 8, 2026
f42cf5d
keep the gguf reader open across predict calls
anindex Aug 8, 2026
06a1493
raise cpu thread cap to 16, add VLA_N_THREADS
anindex Aug 8, 2026
06f5cb1
document VLA_N_THREADS and VLA_DEVICE
anindex Aug 8, 2026
87a16a1
add stable C ABI and libvla
anindex Aug 8, 2026
be9c314
add python bindings over the C ABI
anindex Aug 8, 2026
c409654
fail pi0 and pi05 load when the checkpoint is missing weights
anindex Aug 9, 2026
843e619
share the qwen3-vl vision tower between gr00t n1.7 and vla-jepa
anindex Aug 9, 2026
d751c8d
reuse the compute context and graph allocator across predict calls
anindex Aug 9, 2026
e8aaaa0
add -hf model fetch, vla-bench, release workflow and contributor docs
anindex Aug 9, 2026
de62b3d
default the gr00t n1.7 graph cache on, regenerate the benchmark table
anindex Aug 9, 2026
478ac57
refresh adoption notes, drop em-dashes from contributor docs
anindex Aug 9, 2026
e63396d
build every test target before ctest
anindex Aug 9, 2026
1059543
validate checkpoint geometry before sizing buffers
anindex Aug 9, 2026
9553cdb
stop a stalled peer from parking the servers
anindex Aug 9, 2026
3982914
drop the write-only backend flags
anindex Aug 9, 2026
eca483d
fix the c api load leak and two doc errors
anindex Aug 9, 2026
c70fddc
bump llama.cpp to b10331
anindex Aug 9, 2026
7df64e0
release 0.2.0
anindex Aug 9, 2026
1530eb0
share one graph cache across the ggml archs
anindex Aug 9, 2026
eea5323
share the time embedding, causal mask and patch count
anindex Aug 9, 2026
7409154
add --text to vla-cli and build aarch64 binaries
anindex Aug 9, 2026
a5f3766
refresh the benchmark table and add success rates
anindex Aug 9, 2026
7709b32
compare SR of vla.cpp vs pytorch on libero_object
khanhnd61-vr Aug 12, 2026
2885bd3
add opt-in flash attention to evo1, pi0 and smolvla and batch evo1's …
khanhnd61-vr Aug 12, 2026
11bfff6
carry evo1 and pi0 activations in BF16 behind VLA_EVO1_BF16_ACT and V…
khanhnd61-vr Aug 12, 2026
e29488a
widen the bitvla ternary GEMM to four column tiles per CTA and pad it…
khanhnd61-vr Aug 12, 2026
4a508fc
update the headline table comparing vla.cpp and best pytorch
khanhnd61-vr Aug 12, 2026
5d9ec9e
move the BF16 activation kernels in-tree to src/cuda and reduce the g…
khanhnd61-vr Aug 12, 2026
d9a2a09
keep llama.cpp's tool binaries out of the default build and drop the …
khanhnd61-vr Aug 12, 2026
5564ab9
Update README for release v0.2.0
khanhnd61-vr Aug 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
---
name: Bug report
about: Something built or ran, and did the wrong thing
labels: bug
---

**What happened**

**Expected**

**Repro**

```
# command, including the model and backend
```

**Environment**
- vla.cpp commit:
- Backend: CPU / CUDA / Metal / SYCL
- OS and compiler:
- GPU and driver (if relevant):
- Model and checkpoint:

**Output**

Paste the shortest decisive part of the log, not the whole run.
20 changes: 20 additions & 0 deletions .github/ISSUE_TEMPLATE/model_request.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
---
name: Architecture request
about: Ask for a VLA policy that vla.cpp does not run yet
labels: enhancement
---

**Policy**

Name, paper or repo link, and the reference implementation.

**Checkpoint**

Where the weights live and under what license.

**Why it is worth adding**

Benchmark numbers, or what it does that the supported archs do not.

CONTRIBUTING.md has the six-site walkthrough if you want to send the port
yourself.
12 changes: 12 additions & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
## What

## Why

## Verified

- [ ] Builds clean under `-Wall -Wextra` (first-party code)
- [ ] `ctest` passes
- [ ] Numeric output unchanged (`vla_predict_check` diff), or the change is
meant to move it and a LIBERO sweep is below

Archs and backends tested:
23 changes: 16 additions & 7 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,14 @@ jobs:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- name: pixel-shuffle channel order
# Compiled directly: pure, no llama.cpp or protobuf/zmq needed.
- name: pure unit tests
run: |
g++ -std=c++17 -Isrc -Wall -Wextra tests/test_vision_common.cpp -o /tmp/test_vision_common
/tmp/test_vision_common
for t in test_vision_common test_rope_conventions; do
g++ -std=c++17 -Isrc -Wall -Wextra -fsanitize=address,undefined \
-fno-omit-frame-pointer "tests/$t.cpp" -o "/tmp/$t"
"/tmp/$t"
done

py-tooling:
runs-on: ubuntu-24.04
Expand All @@ -31,6 +35,8 @@ jobs:
python-version: '3.11'
- name: converter remap
run: python tests/py/test_converters.py
- name: binding struct parity
run: python tests/py/test_bindings.py

build-gate:
runs-on: ubuntu-24.04
Expand All @@ -45,8 +51,11 @@ jobs:
- uses: actions/cache@v4
with:
path: build/_deps
key: llama-b9866-${{ runner.os }}
- name: build vla-server + vlm-server + vla-cli (CPU, -Wall -Wextra)
key: llama-b10331-${{ runner.os }}
# Everything, not a target list: ctest registers tests this job must build,
# and a named list goes stale the next time one is added.
- name: build + ctest (CPU, -Wall -Wextra)
run: |
cmake -B build -DCMAKE_BUILD_TYPE=Release -DGGML_CUDA=OFF
cmake --build build -j"$(nproc)" --target vla-server vlm-server vla-cli
cmake -B build -DCMAKE_BUILD_TYPE=Release -DGGML_CUDA=OFF -DVLA_BUILD_TESTS=ON
cmake --build build -j"$(nproc)"
ctest --test-dir build --output-on-failure
144 changes: 144 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
# Tagged binaries and a container image. build.yml already compiles all of this
# on every push; this is the same work with the artifacts kept.
name: release

on:
push:
tags: ['v*']
workflow_dispatch:
inputs:
tag:
description: Tag to build (dry run, nothing is published)
required: true

permissions:
contents: write
packages: write

env:
BINARIES: vla-server vlm-server vla-cli vla-bench

jobs:
linux:
runs-on: ${{ matrix.runner }}
strategy:
fail-fast: false
matrix:
include:
- name: linux-x86_64-cpu
cmake: -DGGML_CUDA=OFF
cuda: false
runner: ubuntu-24.04
- name: linux-x86_64-cuda
cmake: -DGGML_CUDA=ON -DCMAKE_CUDA_ARCHITECTURES=75;86;89;120
cuda: true
runner: ubuntu-24.04
# Jetson and other aarch64 boards. Native arm64 runner, CPU only: the
# hosted images carry no CUDA for arm64, so a Jetson GPU build still
# has to happen on the device.
- name: linux-aarch64-cpu
cmake: -DGGML_CUDA=OFF
cuda: false
runner: ubuntu-24.04-arm
steps:
- uses: actions/checkout@v4

- name: deps
run: |
sudo apt-get update -qq
sudo apt-get install -y -qq --no-install-recommends \
build-essential cmake git ca-certificates pkg-config \
libzmq3-dev cppzmq-dev libprotobuf-dev protobuf-compiler

- name: cuda toolkit
if: matrix.cuda
run: |
wget -q https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt-get update -qq
sudo apt-get install -y -qq --no-install-recommends cuda-toolkit-12-6
echo "/usr/local/cuda/bin" >> "$GITHUB_PATH"

- name: build
run: |
cmake -B build -DCMAKE_BUILD_TYPE=Release ${{ matrix.cmake }}
cmake --build build -j"$(nproc)" --target $BINARIES vla

- name: package
run: |
out="vla.cpp-${{ github.ref_name }}-${{ matrix.name }}"
mkdir -p "$out"
for b in $BINARIES; do cp "build/$b" "$out/"; done
cp build/libvla.so "$out/"
cp include/vla.h LICENSE.md README.md "$out/"
# vla-cli --text runs this; VLA_TOKENIZE_SCRIPT points at it.
mkdir -p "$out/scripts" && cp scripts/tokenize_prompt.py "$out/scripts/"
tar -czf "$out.tar.gz" "$out"

- uses: actions/upload-artifact@v4
with:
name: ${{ matrix.name }}
path: '*.tar.gz'

macos:
runs-on: macos-14
steps:
- uses: actions/checkout@v4

- name: deps
run: brew install cmake zeromq cppzmq protobuf

- name: build
run: |
cmake -B build -DCMAKE_BUILD_TYPE=Release -DGGML_METAL=ON
cmake --build build -j"$(sysctl -n hw.ncpu)" --target $BINARIES vla

- name: package
run: |
out="vla.cpp-${{ github.ref_name }}-macos-arm64-metal"
mkdir -p "$out"
for b in $BINARIES; do cp "build/$b" "$out/"; done
cp build/libvla.dylib "$out/"
cp include/vla.h LICENSE.md README.md "$out/"
mkdir -p "$out/scripts" && cp scripts/tokenize_prompt.py "$out/scripts/"
# Metal needs the shader library next to the binary.
find build -name 'default.metallib' -exec cp {} "$out/" \;
tar -czf "$out.tar.gz" "$out"

- uses: actions/upload-artifact@v4
with:
name: macos-arm64-metal
path: '*.tar.gz'

docker:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- uses: docker/setup-buildx-action@v3
- uses: docker/login-action@v3
if: startsWith(github.ref, 'refs/tags/')
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- uses: docker/build-push-action@v6
with:
context: .
push: ${{ startsWith(github.ref, 'refs/tags/') }}
tags: |
ghcr.io/${{ github.repository }}:${{ github.ref_name }}
ghcr.io/${{ github.repository }}:latest
cache-from: type=gha
cache-to: type=gha,mode=max

publish:
needs: [linux, macos, docker]
if: startsWith(github.ref, 'refs/tags/')
runs-on: ubuntu-24.04
steps:
- uses: actions/download-artifact@v4
with: { path: dist, merge-multiple: true }
- uses: softprops/action-gh-release@v2
with:
files: dist/*.tar.gz
generate_release_notes: true
23 changes: 23 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,28 @@

Notable changes to vla.cpp. Format loosely follows [Keep a Changelog](https://keepachangelog.com).

## [0.2.0] - 2026-08-09

### Added
- SYCL backend for Intel GPUs (Arc, Flex, Data Center Max, Xe iGPU). `VLA_DEVICE` picks the ordinal on CUDA and SYCL alike. See `docs/backend/sycl.md`.
- Stable C ABI (`include/vla.h`, `libvla`) and Python bindings over it (`bindings/python`).
- Four more architectures: π0.5, VLA-Adapter, OpenVLA-OFT and VLA-JEPA.
- `vla-bench` for engine-only latency, and `-hf user/repo[:file.gguf]` to fetch a checkpoint on first use.
- `vla-cli --text`, tokenized by `scripts/tokenize_prompt.py` with the tokenizer the architecture was trained on.
- Release workflow publishing Linux x86-64 (CPU and CUDA), Linux aarch64 (CPU), macOS Metal and a GHCR image.

### Changed
- One shared backend ladder (`src/backend.h`) instead of a copy per arch. CMake rejects two accelerators in one build directory.
- Shared headers for the Qwen3-VL tower, the DINOv2+SigLIP dual tower, the DiT time embeddings, the causal mask and CHW image preprocessing.
- `vla::graph_cache` keeps the compute graph across `predict` calls in nine architectures, not just GR00T N1.7. Output is unchanged.
- llama.cpp pinned at b10331. GR00T N1.5 and N1.6 shift by up to 4.6e-4 on actions peaking near 0.87, from an upstream ggml kernel change in the SigLIP tower they share. The other nine architectures are bit-identical.

### Fixed
- Reject checkpoint geometry that contradicts itself before it sizes a buffer, in smolvla, bitvla, gr00tn1d6, vla_adapter and the Qwen3-VL position resample.
- A peer that stalls mid-message no longer parks either server.
- Treat a missing state vector as zeros in every architecture rather than dereferencing it.
- Build every registered test before `ctest`, so the four that were never built stop reporting as not run.

## [0.1.1] - 2026-07-04

### Added
Expand Down Expand Up @@ -40,5 +62,6 @@ expert + dataset stats), CPU or CUDA, no external mmproj and no patch to llama.c
- llama.cpp is fetched + pinned via CMake `FetchContent` (tag `b9866`); bumping is a
one-line `GIT_TAG` change. Removed the `patches/` fetch script.

[0.2.0]: https://github.com/VinRobotics/vla.cpp/releases/tag/v0.2.0
[0.1.1]: https://github.com/VinRobotics/vla.cpp/releases/tag/v0.1.1
[0.1.0]: https://github.com/VinRobotics/vla.cpp/releases/tag/v0.1.0
Loading
Loading