Octo-Small 1.5 — LIBERO (GGUF for vla.cpp)
GGUF conversion of cyrusneary/octo-finetuned-libero
(a LIBERO finetune of rail-berkeley/octo-small-1.5)
for inference with vla.cpp, a lightweight C++
inference engine for Vision-Language-Action models built on top of
llama.cpp.
Octo pairs two SmallStem16 convolutional image tokenizers with a T5-base text encoder, a 12-layer block transformer with a block-wise causal mask, and a DDPM diffusion action head. Both vision stems and the T5 encoder — including its SentencePiece vocabulary — are baked into the single GGUF, so there is no separate mmproj file and no Python tokenizer at inference time.
Source checkpoint
That upstream repo holds three finetuning experiments. This conversion uses the octo-small one (the other two are octo-base, which vla.cpp's Octo engine rejects — it is specialised to the small backbone):
2025-06-20_octo_small_1p5_libero_finetune/octo_finetune/experiment_20250620_175739/
step 60000 (the final of 12 checkpoints, 5000 … 60000)
Files
| File | Size | Description |
|---|---|---|
octo-small-libero-f32.gguf | 522 MiB | Combined model — SmallStem16 ×2 + T5-base encoder (+ SentencePiece vocab) + block transformer + diffusion head + action statistics, F32 |
Geometry
| Backbone | 384 hidden, 12 blocks, 6 heads, 1536 FFN |
| Images | primary 256×256, wrist 128×128 |
| Language | T5-base, 16 tokens (max_length=16, padding="max_length") |
window_size | 1 (single frame; no observation history) |
| Action | horizon 4 × dim 7, DDPM, 20 denoising steps |
⚠️ Pick an un-normalisation key
The checkpoint carries statistics for four LIBERO suites:
liber_o10 libero_goal libero_object libero_spatial
Because there is more than one and none is named bridge_dataset, vla.cpp cannot
auto-resolve which to un-normalise against and will refuse to run until you choose one:
export VLA_OCTO_UNNORM_DATASET=libero_object # or libero_goal / libero_spatial / liber_o10
(liber_o10 is spelled that way upstream; it is the LIBERO-10 / long suite.)
Usage
# build with the Octo arch (on by default; needs a system protobuf for SentencePiece)
cmake -S . -B build -DGGML_CUDA=ON -DVLA_OCTO=ON && cmake --build build -j
# one-shot from the command line — Octo tokenizes the instruction in-process
VLA_OCTO_UNNORM_DATASET=libero_object ./build/vla-cli \
-hf vrfai/octo-small-libero-gguf \
--image primary.png --image wrist.png \
--text "pick up the black bowl" --pretty
# or serve it
VLA_OCTO_UNNORM_DATASET=libero_object ./build/vla-server octo-small-libero-f32.gguf
vla-cli returns a 4×7 chunk of un-normalised actions. Dimension 6 (gripper) is passed
through un-normalised by design — LIBERO clients invert and binarise it themselves.
Reproducing this conversion
python scripts/convert_octo_to_gguf.py \
--ckpt <snapshot>/2025-06-20_octo_small_1p5_libero_finetune/octo_finetune/experiment_20250620_175739 \
--step 60000 \
--out octo-small-libero-f32.gguf
License
The upstream repository declares no license and ships no model card. The Octo project
and the octo-small-1.5 base model it finetunes are MIT-licensed, but that does not
automatically extend to a third party's finetuned weights — if your use matters legally,
check with the upstream author. This repository redistributes those weights in GGUF form
only, and adds no license of its own.