GreenVLA-2b-base is the lightweight base checkpoint of the
Green-VLA family — a ~2B-parameter Vision-Language-Action model pretrained on both general-domain and robotics data (3,000+ hours of demonstrations across multiple embodiments).
Use this checkpoint when you need a
smaller model footprint for fine-tuning or deployment on resource-constrained hardware. For best performance, consider
GreenVLA-5b-base.
1git clone https://github.com/greenvla/GreenVLA.git
2cd GreenVLA
3uv sync # or: pip install -e .
1import numpy as np
2import torch
3from lerobot.common.policies.factory import load_pretrained_policy
4from lerobot.common.utils.torch_observation import (
5 move_dict_to_batch_for_inference,
6 torch_preprocess_dict_inference,
7)
8
9# 1. Load policy and transforms.
10policy, input_transforms, output_transforms = load_pretrained_policy(
11 "SberRoboticsCenter/GreenVLA-2b-base",
12 data_config_name="bridge",
13)
14policy.to("cuda").eval()
15
16# 2. Build an observation (replace with real sensor data).
17raw_obs = {
18 "observation/state": np.random.rand(8).astype(np.float32), # x y z roll pitch yaw _pad_ gripper
19 "observation/image": np.random.randint(0, 256, size=(224, 224, 3), dtype=np.uint8),
20 "prompt": "pick up the green block and place it on the plate",
21}
22
23# 3. Transform, preprocess, and batch.
24obs = input_transforms(raw_obs)
25obs = torch_preprocess_dict_inference(obs)
26batch = move_dict_to_batch_for_inference(obs, device="cuda")
27
28# 4. Predict actions and post-process.
29with torch.inference_mode():
30 raw_actions = policy.select_action(batch).cpu().numpy()
31
32actions = output_transforms(
33 {"actions": raw_actions, "state": batch["state"].cpu().numpy()}
34)["actions"]
35# actions shape: (action_horizon, 7) — [x, y, z, roll, pitch, yaw, gripper]
See
examples/example_inference_bridge.py for the full runnable script with argument parsing.
1from PIL import Image
2from lerobot.common.policies.factory import load_pretrained_policy
3
4# Load without data transforms
5policy, _, _ = load_pretrained_policy(
6 "SberRoboticsCenter/GreenVLA-2b-base",
7 data_config_name=None,
8)
9policy = policy.to("cuda").eval()
10
11# Access the processor and model directly
12processor = policy.model.processor
13image = Image.open("scene.jpg")
14
15messages = [
16 {
17 "role": "user",
18 "content": [
19 {"type": "image", "image": image},
20 {"type": "text", "text": "Describe what the robot should do next."},
21 ],
22 }
23]
24
25inputs = processor.apply_chat_template(
26 messages, tokenize=True, add_generation_prompt=False,
27 return_dict=True, return_tensors="pt",
28 padding_side="left", padding="max_length", max_length=256,
29 images_kwargs={"do_resize": True},
30).to("cuda")
31
32generated_ids = policy.model.model.generate(
33 **inputs, max_new_tokens=256, do_sample=False, use_cache=False,
34)
35
36generated_ids_trimmed = [
37 out[len(inp):] for inp, out in zip(inputs.input_ids, generated_ids)
38]
39print(processor.batch_decode(generated_ids_trimmed, skip_special_tokens=True)[0])
1@misc{apanasevich2026greenvlastagedvisionlanguageactionmodel,
2 title = {Green-VLA: Staged Vision-Language-Action Model for Generalist Robots},
3 author = {I. Apanasevich and M. Artemyev and R. Babakyan and P. Fedotova and
4 D. Grankin and E. Kupryashin and A. Misailidi and D. Nerus and
5 A. Nutalapati and G. Sidorov and I. Efremov and M. Gerasyov and
6 D. Pikurov and Y. Senchenko and S. Davidenko and D. Kulikov and
7 M. Sultankin and K. Askarbek and O. Shamanin and D. Statovoy and
8 E. Zalyaev and I. Zorin and A. Letkin and E. Rusakov and
9 A. Silchenko and V. Vorobyov and S. Sobolnikov and A. Postnikov},
10 year = {2026},
11 eprint = {2602.00919},
12 archivePrefix = {arXiv},
13 primaryClass = {cs.RO},
14 url = {https://arxiv.org/abs/2602.00919},
15}