rlx-vlash / README.md
eugenehp's picture
Upload folder using huggingface_hub
d7174e8 verified
|
Raw
History Blame Contribute Delete
4.66 kB
---
license: apache-2.0
base_model:
- lerobot/pi0_base
- lerobot/pi05_base
tags:
- robotics
- vision-language-action
- vla
- pi0
- pi05
- vlash
- rlx
- gguf
pipeline_tag: robotics
---
# rlx-vlash weights (Ο€β‚€ / Ο€β‚€.β‚…)
RLX-native repackaging of the [VLASH](https://github.com/mit-han-lab/vlash)
**Ο€β‚€** and **Ο€β‚€.β‚…** Vision-Language-Action robot policies, ready to load with the
[`rlx-vlash`](https://crates.io/crates/rlx-vlash) crate. The tensors are the
published `lerobot/pi0_base` / `lerobot/pi05_base` checkpoints, remapped to
rlx-vlash's canonical key names and re-encoded into GGUF / RLX-package formats
(no fine-tuning β€” same weights, different container + naming).
Both policies pair a **PaliGemma** backbone (SigLIP-So400m/14 @224 vision tower +
Gemma-2B text) with a **Gemma-300M action expert** running through 18 *joint*
transformer layers that share one attention, and generate action chunks by
**flow matching** (a 10-step Euler integration of a learned velocity field).
- **Ο€β‚€** β€” state is a suffix token, time is fused into the action embeddings,
standard Gemma RMSNorm.
- **Ο€β‚€.β‚…** β€” action-only suffix; time drives **adaptive RMSNorm** in the action
expert (`state_cond=false` for the base checkpoint).
## Contents
Each variant ships in four precisions, in both GGUF and RLX-package containers:
```
pi0/ model.gguf model-q8_0.gguf model-q4_k.gguf model-f32.gguf
model.rlxp model-q8_0.rlxp model-q4_k.rlxp model-f32.rlxp config.json
pi05/ (same)
```
| file | format | precision | approx size |
|---|---|---|---|
| `model.gguf` / `model.rlxp` | GGUF / RLX pkg | **f16** (primary) | β‰ˆ 6.4 GB |
| `model-q8_0.gguf` / `model-q8_0.rlxp` | GGUF / RLX pkg | q8_0 (8-bit) | β‰ˆ 3.4 GB |
| `model-q4_k.gguf` / `model-q4_k.rlxp` | GGUF / RLX pkg | q4_K (4-bit) | β‰ˆ 1.9 GB |
| `model-f32.gguf` / `model-f32.rlxp` | GGUF / RLX pkg | f32 (lossless) | β‰ˆ 13 GB |
Pick whichever fits: **f16** is the recommended default (reproduces the action
trajectory exactly), **q8_0** / **q4_K** trade precision for size (norms/biases
stay f16 in the quantized variants), **f32** is bit-exact to source.
**Quantization quality (important).** Measured vs the original VLASH
implementation on `pi05_base`: per-step model outputs stay near-perfect at every
precision (image features & single-step velocity cosine β‰₯ 0.999 even at q4_K β€”
the quant/dequant is exact), but the **10-step flow-matching rollout amplifies**
small weight errors into the final action chunk:
| precision | image features | 1-step velocity | **50-action chunk** |
|---|---|---|---|
| f16 | 1.0000 | 1.0000 | **1.0000** |
| q8_0 | 0.99998 | 0.99999 | **0.973** |
| q4_K | 0.9976 | 0.99946 | **0.807** |
(cosine vs reference.) This is the known sensitivity of iterative flow/diffusion
samplers, not a quantization bug. **For faithful robot control use `f16`**; treat
`q8_0` / `q4_K` as size-first options where some action drift is acceptable.
GGUF stores dims in the standard
GGML (llama.cpp) order and loads through rlx-vlash or any GGUF-aware runtime; the
`.rlxp` is the RLX flat-mmap package. All keep rlx-vlash's canonical key names, so
no remap happens at load.
## Usage (rlx-vlash)
Put one variant's files in a directory (the runner prefers `model.gguf`), then:
```rust
use rlx_vlash::{VlashRunner, VlashVariant};
use rlx_runtime::Device;
let mut runner = VlashRunner::builder(VlashVariant::Pi05)
.device(Device::Cpu)
.num_images(1)
.prompt_tokens(200)
.model_dir("path/to/pi05") // dir containing model.gguf (+ tokenizer.json)
.build()?;
let actions = runner.predict_action_chunk(&[image_nchw], &state, "pick up the cube", None)?;
```
The language **tokenizer is not included** (PaliGemma's is gated): fetch
`google/paligemma-3b-pt-224`'s `tokenizer.json` and place it alongside the
weights, or supply token ids directly.
## Parity
rlx-vlash reproduces the original VLASH implementation on these checkpoints at
**cosine = 1.000000** across every stage β€” SigLIP vision features, the
image+text prefix, a single flow-matching denoise step (joint attention + adaRMS
/ state-token path), and the full 10-step action chunk β€” for **both** Ο€β‚€ and
Ο€β‚€.β‚… (max |Ξ”| ≀ 1.1e-3, attributable to MPS-f32 reference vs CPU-f32 rlx).
## License & attribution
Apache-2.0, inherited from the upstream [VLASH](https://github.com/mit-han-lab/vlash)
project and the `lerobot/pi0_base` / `lerobot/pi05_base` base checkpoints. These
files are a format/naming repackaging of those weights; please cite VLASH and
LeRobot. The `rlx-vlash` inference crate itself is GPL-3.0-only.