Downloads · 30 days
0
Project-IRA/TPSoSe2026_SmolVLA_LeRobot_SO101_Finetuning_V5_Full
TPSoSe2026_SmolVLA_LeRobot_SO101_Finetuning_V5_Full is a robotics model from Project-IRA. Use it for the robotics task on the model card, and read the license before you ship it in a product. It is set up for lerobot. The card lists the license as cc-by-sa-4.0.
SmolVLA fine-tuned on all four tasks using SmolVLA's default settings — notably with the vision encoder frozen. Superseded by V6 Full.
Downloads · 30 days
0
Access
Public
Updated Jul 19, 2026
Repo size
26.4 GB
Likes
0
Public
Click a slice to open those files.
.safetensors27.7 GB · 100%
From the Hugging Face model README
SmolVLA fine-tuned on all four tasks using SmolVLA's default settings — notably with the vision encoder frozen. Superseded by V6 Full.
Part of Project-IRA — Interactive Robotic Arm. Code: https://github.com/Project-IRA/interactive-robotic-arm
| Base model | lerobot/smolvla_base |
| Robot | SO-101 follower (6-DOF) |
| Training data | Project-IRA/TPSoSe2026_Dataset_Full_Merged_Final_LeRobot_SO101_V1 |
| Recommended checkpoint | 100000 |
| Inputs | camera1 (wrist) + camera2 (desk) images — renamed keys, see Usage — 6-dim joint state, English instruction |
| Outputs | 6-dim continuous action chunks |
Works, but noticeably worse than V6. Best checkpoint 100000.
The characteristic failure was the arm missing objects entirely with no directed motion toward them — the expected symptom when the vision encoder never adapts to the scene. This diagnosis is what motivated V6.
SLURM job 2163390. Single L40S GPU.
| Setting | Value |
|---|---|
| Base | lerobot/smolvla_base |
| Dataset | 930-episode merged set |
| Steps | 100000, completed (--save_freq=5000); best at 100000 |
| Batch size | 64 |
| Vision encoder | frozen (SmolVLA default) |
| Image augmentation | off |
| AMP | off |
| Parameters | 99,880,992 trainable of 450,046,176 total |
| Camera keys | renamed — wrist_left->camera1, desk_view->camera2 |
| SLURM | --gres=gpu:L40S:1 --cpus-per-task=16 --mem=92G --time=42:00:00 |
lerobot-train \
--policy.path=lerobot/smolvla_base \
--dataset.repo_id=TPSoSe2026_Dataset_Full_Merged_Final_LeRobot_SO101 \
--batch_size=64 --steps=100000 --save_freq=5000 \
--num_workers=16 --tolerance_s=0.01 \
--output_dir=outputs/train/smolvla_full \
--job_name=smolvla_full \
--policy.device=cuda --policy.push_to_hub=false --wandb.enable=false \
--rename_map='{"observation.images.wrist_left": "observation.images.camera1", "observation.images.desk_view": "observation.images.camera2"}'
Kept for comparison — the frozen/unfrozen vision encoder contrast against V6 is the clearest ablation in the project.
[!CAUTION] This model expects renamed camera keys. Training used
--rename_mapto remap the dataset's camera features:
Dataset feature What the policy expects Physical camera observation.images.wrist_leftobservation.images.camera1wrist observation.images.desk_viewobservation.images.camera2desk If you feed this policy
wrist_left/desk_viewit will fail or silently misbehave. Name your camerascamera1(wrist) andcamera2(desk) at inference time, or apply the same--rename_mapwhen re-training. The Pi0.5 models do not do this — they use the nativewrist_left/desk_viewnames.
[!IMPORTANT] Model files are nested under
outputs_V5/, sofrom_pretrainedon the repo ID will not work:outputs_V5/train/smolvla_full/checkpoints/<step>/pretrained_model/Checkpoints present: every 5000 steps from
005000to100000. Use100000. Repo total ~27.7 GB.hf download Project-IRA/TPSoSe2026_SmolVLA_LeRobot_SO101_Finetuning_V5_Full \ --include 'outputs_V5/train/smolvla_full/checkpoints/100000/pretrained_model/*' \ --local-dir ./smolvla_v5
import torch
from lerobot.policies.smolvla.modeling_smolvla import SmolVLAPolicy
policy = SmolVLAPolicy.from_pretrained("Project-IRA/TPSoSe2026_SmolVLA_LeRobot_SO101_Finetuning_V5_Full")
policy = policy.to("cuda").eval()
On-robot rollout:
lerobot-record \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM0 \
--robot.id=$ROBOT_ID \
--robot.cameras='{
camera1: {type: opencv, index_or_path: /dev/v4l/by-path/$WRIST_PATH, width: 640, height: 480, fps: 30},
camera2: {type: opencv, index_or_path: /dev/v4l/by-path/$DESK_PATH, width: 640, height: 480, fps: 30}
}' \
--policy.path=Project-IRA/TPSoSe2026_SmolVLA_LeRobot_SO101_Finetuning_V5_Full \
--dataset.repo_id=$HF_USER/eval_run \
--dataset.single_task="Sort the lego by color" \
--episodes=10
Use one of the exact training prompts (see the dataset card) as the task string. Both cameras run at 640x480 at inference time even though
desk_viewwas recorded at 800x600.
| Robot | SO-101 follower arm (6-DOF), robot_type: so_follower |
| Teleoperation | SO-101 leader arm |
| Control frequency | 30 fps |
| State / action space | 6-dim: shoulder_pan.pos, shoulder_lift.pos, elbow_flex.pos, wrist_flex.pos, wrist_roll.pos, gripper.pos |
Camera observation.images.desk_view | 800x600, h264 (recording) |
Camera observation.images.wrist_left | 640x480, h264 (recording) |
Inference note: both cameras are run at 640x480 during inference, not at their recording resolutions, to reduce the payload sent to the inference server.
All training ran on a SLURM cluster with L40S GPUs. Two environment details were required and are easy to miss when reproducing:
torchcodec discovers at runtime:
export LD_LIBRARY_PATH=$CONDA_PREFIX/envs/ffmpeg_libs_v8/lib:<venv>/lib/python3.12/site-packages/nvidia/npp/lib:$LD_LIBRARY_PATH--tolerance_s=0.01 on every run, to accommodate timestamp jitter in the recorded
episodes.Multi-GPU runs additionally set PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True.
Datasets and the virtualenv were copied to node-local /scratch before training rather
than read from shared storage.
No Weights & Biases logging was enabled for any run (--wandb.enable=false), so there are
no public training curves — the job.*.err SLURM logs are the record.
The model is conditioned on English natural-language instructions. Prompt phrasing was varied roughly every 10 episodes during recording, giving 93 distinct prompts in the merged dataset. Use one of the training prompts verbatim for best results — the full lists are on the dataset card.
This model is a derivative work of Apache-2.0 licensed components:
| Component | Upstream | License |
|---|---|---|
| LeRobot framework | https://github.com/huggingface/lerobot | Apache-2.0 |
lerobot/smolvla_base | https://huggingface.co/lerobot/smolvla_base | Apache-2.0 |
Apache-2.0 permits relicensing derivative works. We retain the upstream copyright notices, license text, and NOTICE files for the incorporated material, as Apache-2.0 Section 4 requires. The upstream components remain under Apache-2.0 — only this project's own contributions (the fine-tuned weights and training configuration) are offered under CC BY-SA 4.0.
CC BY-SA 4.0 was chosen because it is share-alike: derivatives must be released under the same licence, so this work cannot be taken closed-source. The project's source code lives in a separate repository under its own licence — see https://github.com/Project-IRA/interactive-robotic-arm.
@misc{project_ira_2026,
title = {Project-IRA: Interactive Robotic Arm},
author = {Baten, Cleo and Keppler, Bela and Sapper, Jonas},
year = {2026},
howpublished = {\url{https://huggingface.co/Project-IRA}},
note = {Code: \url{https://github.com/Project-IRA/interactive-robotic-arm}}
}