Skip to content
Source
LeRobot — Model repository updates· lerobot·· 490 days agoSignalEditorial score85

SmolVLA: A Compact and Efficient Vision-Language-Action Model for Affordable Robotics

lerobot/smolvla_base

Summary

SmolVLA is a compact, efficient Vision-Language-Action (VLA) model designed for affordable robotics, trainable on a single GPU and deployable on consumer hardware. It matches the performance of larger VLAs through community-driven data and provides a reference implementation for training and inference.

Full article

You are reading the complete RoboSignal summary. The publisher’s full article is available at the original source.

Read full article at source

huggingface.co · Opens in a new tab; source language may differ.

Editorial context

The release of SmolVLA introduces a compact and efficient Vision-Language-Action model designed for affordable robotics, trainable on a single GPU and deployable on consumer hardware. It matches the performance of larger models through community-driven data and provides a reference implementation for training and inference.

Evidence and limits

Published automatically after robotics and source-evidence checks; no manual editorial approval is recorded. Source assertions are not independently verified. Missing information remains not reported.

Environment:
Not reported
Control:
Not reported
Data origin:
Not reported
Source excerpts and review record

No manual editorial approval recorded.

Original source quotation: “SmolVLA is a compact, efficient Vision-Language-Action (VLA) model designed for affordable robotics, trainable on a single GPU and deployable on consumer hardware, while matching the performance of much larger VLAs through community-driven data.”

Source E1

Original source quotation: “Original paper: (SmolVLA: A Vision-Language-Action Model for Affordable and Efficient Robotics)[ https://arxiv.org/abs/2506.01844]”

Source E2

Original source quotation: “Reference implementation: https://github.com/huggingface/lerobot”

Source E3

Original source quotation: “Model description Inputs: images (multi-view), proprio/state, optional language instruction Outputs: continuous actions”

Source E4

Original source quotation: “Training objective: flow matching Action representation: continuous Intended use: Base model to fine tune on your specific use case”

Source E5

Original source quotation: “Quick start (inference on a real batch) Installation pip install "lerobot[smolvla]" For full installation details (including optional video dependencies such as ffmpeg for torchcodec), see the official documentation: https://huggingface.co/docs/lerobot/installation”

Source E6

Original source quotation: “Load model + dataset, run select_action import torch from lerobot.datasets.lerobot_dataset import LeRobotDataset from lerobot.policies.factory import make_pre_post_processors # Swap this import per-policy from lerobot.policies.smolvla.modeling_smolvla import SmolVLAPolicy # load a policy model_id = "lerobot/smolvla_base" # <- swap checkpoint device = torch.device( "cuda" if torch.cuda.is_available() else "cpu" ) policy = SmolVLAPolicy.from_pretrained(model_id).to(device). eval () preprocess, postprocess = make_pre_post_processors( policy.config, model_id, preprocessor_overrides={ "device_processor" : { "device" : str (device)}}, ) # load a lerobotdataset dataset = LeRobotDataset( "lerobot/libero" ) # pick an episode episode_index = 0 # each episode corresponds to a contiguous range of frame indices from_idx = dataset.meta.episodes[ "dataset_from_index" ][episode_index] to_idx = dataset.meta.episodes[ "dataset_to_index" ][episode_index] # get a single frame from that episode (e.g. the first frame) frame_index = from_idx frame = dict (dataset[frame_index]) batch = preprocess(frame) with torch.inference_mode(): pred_action = policy.select_action(frame) # use your policy postprocess, this post process the action # for instance unnormalize the actions, detokenize it etc.. pred_action = postprocess(pred_action)”

Source E7

Original source quotation: “Training step (loss + backward) If you’re training / fine-tuning, you typically call forward(...) to get a loss and then: policy.train() batch = dict (dataset[ 0 ]) batch = preprocess(batch) loss, outputs = policy.forward(batch) loss.backward()”

Source E8

Original source quotation: “Notes: Some policies expose policy(**batch) or return a dict; keep this snippet aligned with the policy API. Use your trainer script ( lerobot-train ) for full training loops.”

Source E9

Original source quotation: “How to train / fine-tune lerobot-train \ --dataset.repo_id= ${HF_USER} /<dataset> \ --output_dir=./outputs/[RUN_NAME] \ --job_name=[RUN_NAME] \ --policy.repo_id= ${HF_USER} /<desired_policy_repo_id> \ --policy.path=lerobot/[BASE_CHECKPOINT] \ --policy.dtype=bfloat16 \ --policy.device=cuda \ --steps=100000 \ --batch_size=4 Add policy-specific flags below: -policy.chunk_size=... -policy.n_action_steps=... -policy.max_action_tokens=... -policy.gradient_checkpointing=true”

Source E10

Original source quotation: “Real-World Inference & Evaluation You can use the record script from lerobot-record with a policy checkpoint as input, to run inference and evaluate your policy. For instance, run this command or API example to run inference and record 10 evaluation episodes: lerobot-record \ --robot.type=so100_follower \ --robot.port=/dev/ttyACM1 \ --robot.cameras="{ up: {type: opencv, index_or_path: /dev/video10, width: 640, height: 480, fps: 30}, side: {type: intelrealsense, serial_number_or_name: 233522074606, width: 640, height: 480, fps: 30}}" \ --robot.id=my_awesome_follower_arm \ --display_data=false \ --dataset.repo_id=${HF_USER}/eval_so100 \ --dataset.single_task="Put lego brick into the transparent box" \ # <- Teleop optional if you want to teleoperate in between episodes \ # --teleop.type=so100_leader \ # --teleop.port=/dev/ttyACM0 \ # --teleop.id=my_awesome_leader_arm \ --policy.path=${HF_USER}/my_policy”

Source E11

Source:LeRobot — Model repository updates · huggingface.co